MessagePack - JSON과 비슷하지만 작고 빠른 이진 직렬화 포맷
(msgpack.org)- 효율적인 Binary Serialization 포맷
- JSON처럼 여러 언어 간 데이터 교환 가능
- 작은 정수는 단일 바이트로 인코딩, 짧은 문자열은 문자열 자체에 추가 바이트가 하나만 더 필요
- 50개 이상의 프로그래밍 언어 및 환경에서 지원
- 사용 사례:
- Redis: Lua용 MessagePack C 확장을 추가해 데이터 직렬화에 활용
- Fluentd: 내부 데이터 표현에 MessagePack 사용, 고속 처리 가능
- Treasure Data: 분석 쿼리에 최적화된 다중 테넌트 데이터베이스 구축
- Pinterest: MessagePack과 Memcache로 피드 캐시 압축 및 빠른 처리
두개의 컨셉 : "Type System" 과 "Format"
- 타입 시스템
- Integer: 정수
- Nil:
null값 - Boolean:
true또는false - Float: IEEE 754 부동 소수점
- Raw: 문자열 또는 바이트 배열
- Array: 객체 배열
- Map: 키-값 쌍
- Extension: 사용자 정의 타입
- Timestamp: 시간 정보
- 포맷
- positive fixint, negative fixint, fixmap, fixarray
- nil, false, true
- bin 8/16/32, ext 8/16/32, float 32/64
- uint 8/16/32/64, int 8/16/32/64, fixext 1/2/4/8/16, str 8/16/32
- array 16/32, map 16/32
- 포맷 예시
fixint: 7비트 정수 (양수는 0x00–0x7F, 음수는 0xE0–0xFF)fixstr: 최대 31바이트 문자열array 16: 최대 (2^16)-1 요소를 가진 배열map 16: 최대 (2^16)-1 키-값 쌍
MessagePack의 장점
- 데이터 크기 최소화 및 속도 최적화
- 기존 JSON 기반 애플리케이션의 대체 및 개선
- 간단한 구현으로 다양한 환경에서 유연하게 활용 가능
GeekNews Weekly에 포함된 글입니다.
에디터 코멘트 보기
댓글과 토론
게임 서버랑 통신 할 때 MessagePack을 적용하려고 했는데.. 설명처럼 다양한 환경에서의 유연화가 잘 안되더라구요. 그래서 protobuf 썼습니다.