한 줄 정의
텍스트 기반 데이터(JSON, XML 등) 대신 이진 데이터 포맷으로 인코딩/디코딩하여 네트워크 페이로드 크기를 줄이고 통신 처리량을 극대화하는 기법.
핵심 요지
- JSON 텍스트 변환 병목 제거: 수만 건의 정형 데이터를 텍스트 문자열로 상호 변환 시 전송 용량 및 CPU 직렬화/역직렬화 오버헤드가 급증함.
- 적재적소 경계 구분: 외부 사용자와 만나는 대외 API/디버깅 영역에는 JSON을 유지하고, 고속 통신이 필수적인 백엔드 마이크로서비스 및 이벤트 버스 구간에는 바이너리 포맷을 도입.
- 5대 대표 구현 및 특성:
- Protobuf:
.proto스키마 필드 태그 기반의 고효율 마이크로서비스/gRPC 통신. - MessagePack: 스키마 없이 기존 JSON 구조를 즉시 1바이트 식별자 바이너리로 압축.
- Apache Avro: 스키마와 데이터를 동시 포함하여 Kafka 스트리밍 호환성 유지.
- FlatBuffers: 역직렬화 과정 자체를 생략하는 Zero Copy 방식.
- Protobuf:
상세
- 성능 벤치마크 (5,000건 샘플 레코드 기준):
예시
- 10,000개 사용자 페이로드 전송 시 JSON(2.3 MB, ~180ms) 대비 바이너리 포맷(620 KB, ~34ms) 전송 적용으로 5배 빠른 처리량 달성.
충돌
- 디버깅 가독성 저하: 바이너리 데이터는 로그에서 인간이 해독할 수 없으므로 문제 발생 시 덤프 트레이스 및 파싱 도구 지원이 필수적임.