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)
- 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
링크