gRPC

[gRPC] Protocol Buffere(proto3) 소개, 사용법

큐범 2022. 12. 29. 00:13

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.

 

Protocol Buffers  |  Google Developers

Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data.

developers.google.com