Protocol Buffers

Protocol Buffers(Protobuf)는 구글(Google)에서 개발한 언어 및 플랫폼 중립적인 데이터 직렬화(Data Serialization) 메커니즘이다. 시스템 간 통신 프로토콜이나 데이터 저장 시 구조화된 데이터를 효율적으로 처리하기 위해 고안되었다.

주요 특징

  • 자체 IDL(Interface Definition Language): .proto 확장자를 사용하는 텍스트 파일에 데이터 구조(메시지 타입)를 정의한다.
  • 사전 코드 생성(Code Generation): protoc 컴파일러를 사용하여 .proto 파일에 정의된 스키마를 C++, Java, Python, Go 등 다양한 프로그래밍 언어의 네이티브 데이터 클래스로 자동 변환한다.
  • 바이너리 포맷: 데이터를 텍스트가 아닌 압축된 바이너리 스트림으로 인코딩한다. 이로 인해 데이터 크기가 작아지고 파싱 속도가 매우 빠르다.
  • 스키마 분리: 데이터 전송 시 스키마 자체를 포함하지 않으며, 각 필드에 부여된 고유 번호(Tag Number)를 통해 데이터를 식별한다.
  • 호환성(Compatibility) 유지: 필드 번호를 기반으로 작동하므로, 필드를 추가하거나 삭제해도 이전 버전의 코드와 새로운 버전의 코드가 서로 충돌 없이 데이터를 주고받을 수 있다(상위/하위 호환성).
  • gRPC 통합: 고성능 원격 프로시저 호출(RPC) 프레임워크인 gRPC의 기본 메시지 포맷으로 사용된다.

데이터 직렬화 포맷 비교

직렬화에 널리 사용되는 Protocol Buffers, JSON, XML의 비교는 다음과 같다.

특징Protocol Buffers (Protobuf)JSONXML
초기 개발사GoogleDouglas CrockfordW3C
포맷 형식바이너리텍스트텍스트
스키마 언어자체 IDL (.proto)없음 (JSON Schema로 보완 가능)XSD, DTD 등
데이터 크기매우 작음중간 (필드 이름 반복 포함)큼 (시작 및 종료 태그 포함)
파싱 속도매우 빠름보통느림
사람의 가독성낮음 (바이너리 인코딩)높음중간
주요 사용 사례마이크로서비스 통신(gRPC), 내부 데이터 저장RESTful 웹 API, 브라우저-서버 통신레거시 시스템, 복잡한 문서 구조화

출처

  • Google, “Protocol Buffers Documentation” (developers.google.com/protocol-buffers).
  • Martin Kleppmann, Designing Data-Intensive Applications, O’Reilly Media. (Chapter 4: Encoding and Evolution).

Entities