gRPC Proto File

mohadang·2023년 9월 24일
0

Road to Backend

목록 보기
18/21
post-thumbnail

Message and Field

syntax : "proto3"

  • Proto version 지정. 명시하지 않으면 default로 version 2.
  • 지원 언어 차이.
    • Proto2 지원 언어 : C++, Java, Python, Go
    • Proto3 지원 언어 : C++, Java, Python, Go, Ruby, Objectice-C, C#, JavaScript, PHP, Dart
  • 그 이외 문법적인 차이 있음.

message : "SearchRequest"

  • 여러 타입의 필드로 구성.
  • CameCase 작명.
  • 여러 타입의 필드로 구성됨.

Field : "query, page_number, result_per_page"

  • snake_case 작명.
  • 숫자를 표기해야 할 경우 꼭 문자 뒤에 표기
    • GOOD : query_1
    • BAD : 1_query
  • query, page_number, result_per_page

Field Tag(Field number) : " = 1, = 2, = 3"

  • 필드들의 고유한 번호.
  • Enconding 이후 binary data에서 필드를 식별하는데 사용.(Json의 Key 값과 같은 역할)
  • 설정값 제한
    • Min Value : 1
    • Max Value : 536,870,911(=229–1)
      • 255가 아닌 이유는 엔코딩 문제
    • 19000 ~ 19999는 프로토콜 버퍼 구현을 위해 reserved 된 값이므로 사용 불가
  • 설정값에 Tag의 길이
    • 1~15 : 1byte
    • 16~2047 : 2byte.
    • 자주 호출되는 필드에 대해선 1~15로 지정해두는 것이 좋다.

Field Rule

proto2

  • required : 필수로 가져야 할 필드 (only use proto2).
  • optional : 해당 필드를 가지지 않거나 하나만 가짐 (only use proto2).
  • repeated : 임의 반복 가능한 필드 (번호 및 값의 순서는 보존). Key-Value 구조로 저장되어 repeated field를 사용할 때도 key가 계속 붙음.

proto3

  • required, optional은 사라지고, repeated 만 사용.
  • [packed=true] 옵션 : key-value 쌍 형태에서 value만 반복. 효과적인 엔코딩.

Package

message type 이름을 중첩없이 구분할때 사용.

Package 미사용 - 만약 다른 파일에 Open이 있을 경우 모호성 충돌 발생 가능.

Package 사용 - 다른 파일에 Open이 있어도 패키지로 모호성 충돌 회피 가능.

서비스

RPC를 통해 서버가 클라이언트에게 제공할 함수의 형태를 정의.

Unary RPC

Bidirectional RPC

링크

profile
mohadang

0개의 댓글

Powered by GraphCDN, the GraphQL CDN