CoderTools

MessagePack 코덱

MessagePack 바이너리 직렬화 형식 인코딩 및 디코딩

🔒 100% 로컬 처리입력하신 데이터는 브라우저에서 완전히 처리되며, 서버로 전송되지 않습니다.

API 응답, 로그 파일 또는 네트워크 캡처에서 가져온 MessagePack 데이터 붙여넣기

클릭하여 예제 데이터 삽입

디코드 결과

MessagePack 데이터를 입력하고 디코드를 클릭하면 결과가 표시됩니다

MessagePack 데이터 타입 참조

타입 이름 포맷 바이트 범위 설명
양수 FixInt0x00-0x7F0에서 127까지의 정수 (1바이트)
음수 FixInt0xE0-0xFF-32에서 -1까지의 정수 (1바이트)
FixMap0x80-0x8F0-15개의 키-값 쌍을 가진 맵
FixArray0x90-0x9F0-15개의 요소를 가진 배열
FixStr0xA0-0xBF0-31 바이트 길이의 문자열
Nil0xC0null/nil 값을 나타냄
불리언0xC2-0xC3True (0xc3) 또는 False (0xc2)
바이너리0xC4-0xC6원시 바이너리 데이터 (bin8/bin16/bin32)
확장0xC7-0xC9, 0xD4-0xD8타입 코드가 있는 애플리케이션 정의 타입
부동소수점0xCA-0xCB32비트 또는 64비트 부동소수점 수
부호 없는 정수0xCC-0xCF8/16/32/64비트 부호 없는 정수
부호 있는 정수0xD0-0xD38/16/32/64비트 부호 있는 정수
문자열0xD9-0xDBUTF-8 문자열 (str8/str16/str32)
배열0xDC-0xDD16비트 또는 32비트 길이의 배열
0xDE-0xDF16비트 또는 32비트 길이의 맵

MessagePack 프로토콜 문서

MessagePack이란

MessagePack은 효율적인 데이터 교환을 위해 설계된 바이너리 직렬화 형식입니다. 2008년 Furuhashi Sadayuki가 만들었으며, JSON과 유사한 데이터 구조를 JSON보다 일반적으로 50% 작고 파싱이 더 빠른 컴팩트한 바이너리 표현으로 압축합니다. 이 형식은 성능이 중요한 Redis, Fluentd 및 수많은 실시간 통신 시스템에서 널리 채택되고 있습니다.

바이너리 인코딩 구조

MessagePack은 타입-길이-값 인코딩 체계를 사용합니다. 첫 번째 바이트(포맷 바이트)가 데이터 타입을 결정하며, 작은 정수와 짧은 문자열의 경우 값 자체를 포함할 수 있습니다. 더 큰 값은 길이와 페이로드에 추가 바이트를 사용합니다. 이 설계를 통해 MessagePack은 작은 값을 매우 효율적으로 인코딩하면서도 큰 데이터 구조를 지원할 수 있습니다.

포맷 바이트 의미
0x00-0x7F양수 fixint (0-127, 바이트 내 값)
0x80-0x8FFixmap (0-15쌍, 하위 4비트에 개수)
0x90-0x9FFixarray (0-15요소, 하위 4비트에 개수)
0xA0-0xBFFixstr (0-31바이트, 하위 5비트에 길이)
0xC0-0xDFNil, 불리언, bin, ext, float, int 타입
0xE0-0xFF음수 fixint (-32에서 -1)

MessagePack vs JSON 비교

두 형식 모두 동일한 데이터 모델을 나타내지만 다른 시나리오에 최적화되어 있습니다. MessagePack은 컴팩트한 크기와 파싱 속도를 우선시하여 고처리량 시스템에 이상적입니다. JSON은 사람의 가독성과 모든 플랫폼에서의 범용 호환성을 우선시합니다.

MessagePack 장점
  • JSON보다 30-50% 작음
  • 네이티브 바이너리 데이터 지원
  • 더 빠른 직렬화 및 파싱
  • 구별되는 정수 타입으로 타입 안전
JSON 장점
  • 사람이 읽고 편집 가능
  • 브라우저와 언어의 범용 지원
  • 더 쉬운 디버깅 및 로깅

일반적인 용도

  • Redis 데이터 직렬화 및 캐싱
  • 실시간 통신 프로토콜 (게임, 채팅)
  • Fluentd 로그 집계 및 전달
  • RPC 프레임워크 (MessagePack-RPC)
  • 대역폭 제약이 있는 모바일 및 임베디드 애플리케이션

확장 타입

MessagePack은 애플리케이션 정의 확장 타입을 지원합니다. 각 확장에는 타입 코드(-128에서 127까지의 정수)와 바이너리 페이로드가 있습니다. 일반적인 표준 확장에는 정확한 시간 표현을 위해 초와 나노초를 저장하는 타임스탬프(타입 -1)가 포함됩니다.

타입 코드 일반적인 용도
-1타임스탬프 (공식)
0-127애플리케이션 정의 타입

빠른 메뉴

최근 사용 도구 없음