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) | JSON | XML |
|---|---|---|---|
| 초기 개발사 | Douglas Crockford | W3C | |
| 포맷 형식 | 바이너리 | 텍스트 | 텍스트 |
| 스키마 언어 | 자체 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).