Apache Avro
Apache Avro는 데이터 직렬화(Data Serialization) 시스템이다. 주로 대용량 데이터 처리와 분산 시스템에서 데이터 교환 및 저장을 목적으로 사용된다.
주요 특징
- JSON 스키마 정의: 데이터의 구조(스키마)를 JSON 형식으로 정의한다. 이로 인해 스키마 작성 및 가독성이 용이하다.
- 바이너리 데이터 포맷: 스키마와 별개로 실제 데이터는 압축된 바이너리 형식으로 인코딩되어 저장되므로 공간 효율성과 전송 속도가 높다.
- 스키마 내장: 데이터 파일 자체에 스키마가 함께 저장된다. 파일을 읽는 프로그램은 내장된 스키마를 확인하여 데이터를 해석하므로, 별도의 코드 생성(Code Generation) 과정 없이 동적 언어 환경에서 데이터를 즉시 처리할 수 있다.
- 스키마 진화(Schema Evolution): 데이터 구조가 변경(필드 추가, 삭제 등)되어도 이전 버전의 데이터나 새로운 버전의 데이터를 호환성 있게 읽고 쓸 수 있는 규칙을 제공한다.
- RPC 지원: 클라이언트와 서버 간의 원격 프로시저 호출(Remote Procedure Call) 프로토콜을 지원한다.
데이터 직렬화 포맷 비교
데이터 직렬화에 자주 사용되는 Apache Avro, Protocol Buffers, JSON의 비교는 다음과 같다.
| 특징 | Apache Avro | Protocol Buffers (Protobuf) | JSON |
|---|---|---|---|
| 초기 개발사 | Apache Software Foundation (Hadoop 프로젝트) | Douglas Crockford (ECMA Standard) | |
| 포맷 형식 | 바이너리 | 바이너리 | 텍스트 |
| 스키마 언어 | JSON | 자체 IDL (Interface Definition Language) | 없음 (선택적 JSON Schema 사용 가능) |
| 코드 생성(Code Generation) | 선택적 (런타임 동적 해석 가능) | 필수 (사전 컴파일 필요) | 불필요 |
| 스키마 저장 방식 | 데이터 파일의 헤더에 스키마 포함 | 데이터와 스키마 분리 (미포함) | 스키마 불필요 (데이터에 키값 포함) |
| 주요 사용 사례 | 빅데이터 에코시스템(Hadoop), Apache Kafka 메세징 | 마이크로서비스 통신 (gRPC) | 웹 API, 일반 데이터 교환 및 설정 파일 |
출처
- Apache Software Foundation, “Apache Avro™ 1.11.1 Documentation”.
- Gwen Shapira, Todd Palino, Rajini Sivaram, Kriti Pramod, Kafka: The Definitive Guide, O’Reilly Media. (Chapter on Data Serialization and schema registry).