본문 바로가기
Framework and Tool/gRPC and Protobuf

Protocol buffer

by ocwokocw 2022. 3. 13.

- 출처: https://developers.google.com/protocol-buffers/docs/overview

- 개요

Protocol buffer는 언어 및 Platform에 중립적이며 구조화된 데이터를 직렬화하거나 그 반대 방향으로도 변환가능한 확장 매커니즘이다. JSON과 비슷하지만 더 작고 빠르며 지원하는 언어라면 해당 언어에 맞는 코드를 생성한다.
 
Protocol buffer는 정의하는 부분(.proto 파일)과 proto 컴파일러가 생성하는 코드 부분으로 구성되어 있다.

- Protocol buffer를 사용하여 어떤 문제를 해결할 수 있는가?

 
Protocol buffer는 최대 몇 MB정도 되는 구조화되거나 형을 갖는 데이터 package을 위한 직렬화 형태를 제공한다. Protocol buffer는 Google에서 사용되는 서버간 전송이나 disk에 데이터를 저장하고 보관하는데에 사용된다. .proto 안에 정의할때에는 메시지와 서비스를 기술한다. 아래는 message를 기술한 예제이다.
 
message Person {
  optional string name = 1;
  optional int32 id = 2;
  optional string email = 3;
}
 
proto compiler는 build time에 .proto 파일을 이용하여 다양한 프로그래밍 언어의 코드를 생성한다. 이렇게 생성된 코드안에는 fiel, method 들에 대한 접근 메소드드로가 raw byte로 부터 전체 구조를 직렬화하거나 파싱하는 정보가 포함되어 있다.
 
protocol buffer는 Google의 많은 서비스에서 광범위 하게 사용되고 일정 시간동안 영속적으로 저장되기도 하기 때문에 이전 버전과의 호환성을 유지하는것은 중요하다.

- Protocol buffer 사용의 장점

Protocol buffer는 플랫폼과 언어에 중립적으로 구조화된 데이터를 직렬화하는 경우 사용하기 적합하다. Protocol buffer는 (gRPC와 함께) 의사소통 프로토콜을 정의하거나 데이터 저장소에 사용된다. 그렇기에 아래와 같은 장점을 갖는다.
 
  • compact한 데이터 스토리지
  • 빠른 파싱
  • 많은 프로그래밍 언어에서 사용가능
  • 자동 생성 클래스를 통한 최적화된 기능

- Project 외부 사용 지원
 
만약 정의한 message 형이나 enum이 외부에서도 사용될것 같다면 종속성없이 자신의 파일의 해당 형이나 enum들을 기술하면 된다. timestamp.proto나 status.proto 같은 경우 구글에서 널리 사용된다.

- Protocol buffer를 사용하기 적절하지 않은 경우

protocol buffer는 전체 메시지가 메모리에 한번에 올라가거나 객체 graph 보다 크지 않다고 가정하는 경향이 있다. 만약 다루는 데이터가 몇 MB를 초과한다면 다른 해결책을 고려해볼 필요가 있다. 큰 데이터를 다룰 때 직렬화된 복사본들 때문에 데이터의 몇몇 사본들이 존재하게 될 수 있어서 memory 사용량이 급격히 뛰는 경우가 있다.
 
protocol buffer가 직렬화 될 때, 같은 데이터가 많은 binary 직렬화를 갖게 될 수 있는데 만약 동등성 비교를 해야하면 해당 binary를 파싱해야한다.
 
메시지가 압축되지 않는다. 다른 파일들처럼 zip이나 gzip이 될 수 있지만 JPEG이나 PNG와 같이 특수한 목적의 알고리즘이 protocol buffer보다 더 작은 파일을 생성할 수 있다.
 
Protocol buffer 메시지는 과학적인 분야나 공학적인 분야에서 크고 다 차원배열을 사용할 때 크기나 속도면에서 최대효율을 발휘하지 못한다.
 
Fortran이나 IDL 같은 non-OO 언어를 잘 지원하지 못한다.gRPC, protocol, buffer, protoc, .proto

 

- Protocol buffer는 어떻게 작동하는가?

Protocol buffer는 아래와 같은 흐름으로 동작한다.
 
 
 
  • .proto file을 정의한다.
  • .proto file 기반으로 protoc를 통해 사용 가능한 pb 코드를 생성한다.
  • project 코드에서 생성된 pb 코드를 적절히 사용한 후 컴파일한다.
 
 

'Framework and Tool > gRPC and Protobuf' 카테고리의 다른 글

Protocol buffer - Convention  (0) 2022.04.29
Protocol buffer - Proto3  (0) 2022.04.24
gRPC with protobuf  (0) 2022.03.13
RPC(Remote procedure call)  (0) 2022.03.13

댓글