Protocol Bufferes
구조화된 데이터를 직렬화 하기 위한 구글의 언어 중립적, 확장 가능한 메커니즘이다.
데이터를 한 번 구성하는 방법을 정의한 후에 특수 생성된 소스 코드를 사용하여 다양한 데이터 스트림과 다양한 언어를 사용하여 구조화된 데이터를 쉽게 쓰고 읽을 수 있다.
Protocol Buffere은 IDL로서 data structure를 정의한 다음, proto파일을 protocol buffere compiler를 통해 컴파일한다. 컴파일된 소스코드를 사용하여 데이터를 읽고 쓴다.
Protocol Bufferes는 현재 Java, Python, Objective-C, C++을 지원하고 proto3의 경우 Kotlin, Dart, Go, Ruby, C#을 추가적으로 지원한다.
Proto3
서버는 클라이언트로부터 응답(Response)를 하는데 거기서 대부분 들어가는 statusCode와 statusMwssage가 있습니다. 아래의 예시 코드를 통해서 다음과 같이 구성할 수 있습니다.
Code
syntax = "proto3";
option java_package = "com.grpc.education";
option java_multiple_files = true;
package education;
message BasicResponse {
int32 userNum = 1;
string statusCode = 2;
string statusMessage = 3;
}
BasicResponse 메시지 선언에서 볼 수 있는 것은 메시지를 구성하는 데이터에 대해서 각각 선언을 해주는 형식을 가진다.
Field 특징
Field Types은 scalar types, enum, fild type선언이 가능하다.
각 field는 고유한 field 번호를 갖는다.
field 번호에 따라 다른 인코딩 방식 - 1~15 방식이 효율적이다.
- 1~15 1Byte
- 16~2047 2byte
Proto 장단점
Proto 장점
1. 데이터의 크기가 작다.
데이터의 크기가 작은 경우, 통신이 빠르다는 이점이 있다.
2. proto <-> json 전환 유틸을 지원한다.
3. xml비해 3~10배 작고 20~100배 빠르고 더 간결하고 덜 모호하고 더 쉬운 데이터 엑세스 클래스를 제공. <- 공식문서
Proto 단점
1. Proto 포맷에 대한 사전지식이 요구된다.
2. 바이트 형태로 인해서 가독성 저하된다.
Reference.