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개의 댓글