MessagePack 뷰어·변환기
브라우저 처리MessagePack 바이트(16진수·Base64)를 읽기 쉬운 JSON으로 풀고, 거꾸로 JSON을 가장 작은 MessagePack 형식으로 인코딩해 16진수와 크기 비교를 보여 줍니다. 타임스탬프 확장도 읽습니다.
- 파일·이미지·문서 처리 도구는 브라우저 안에서 처리되더라도 원본에 개인정보나 민감 정보가 포함될 수 있습니다. 공유·제출 전 원본과 결과를 한 번 더 확인하세요.
MessagePack은 JSON과 같은 구조를 더 작은 바이너리로 담는 형식이라 Redis 캐시, 게임 서버, 실시간 통신에서 자주 쓰이지만 바이트만 보고는 내용을 알 수 없습니다. 이 도구는 MessagePack 바이트를 해석해 JSON으로 보여 주고, 반대로 JSON을 MessagePack으로 바꿔 줍니다.
{
"name": "ToolBada",
"tools": 800
}
24바이트를 읽었습니다.
MessagePack 뷰어·변환기 사용 가이드
MessagePack은 JSON과 같은 구조를 더 작은 바이너리로 담는 형식이라 Redis 캐시, 게임 서버, 실시간 통신에서 자주 쓰이지만 바이트만 보고는 내용을 알 수 없습니다. 이 도구는 MessagePack 바이트를 해석해 JSON으로 보여 주고, 반대로 JSON을 MessagePack으로 바꿔 줍니다.
디코딩은 nil, 참/거짓, 정수(fixint부터 64비트까지), float32·64, 문자열, 배열, 맵, bin, ext 형식을 모두 읽습니다. 바이너리는 {"$bin": "16진수"}로, 타임스탬프 확장(-1)은 {"$timestamp": "ISO 시각"}으로, JavaScript 안전 범위를 넘는 64비트 정수는 문자열로 보여 줍니다.
인코딩은 값마다 가장 짧은 형식을 골라 같은 JSON보다 얼마나 작아지는지 바이트 수로 비교해 줍니다. 디코딩 후 남은 바이트가 있으면 값이 여러 개 이어진 스트림일 수 있다는 점도 알려 줍니다.
사용 방법
- 'MessagePack 바이트 또는 JSON' 칸에 16진수·Base64 바이트를 넣거나, 인코딩하려면 JSON을 넣습니다.
- 변환 방향에서 'MessagePack → JSON' 또는 'JSON → MessagePack'을 고릅니다.
- '실행'을 누르면 정리된 JSON 또는 16진수 바이트와 크기 정보가 나옵니다.
예시: 맵 하나 풀어 보기
82 a4 6e 61 6d 65 a8 54 6f 6f 6c 42 61 64 61 a5 74 6f 6f 6c 73 cd 03 20
{
"name": "ToolBada",
"tools": 800
}
24바이트를 읽었습니다.같은 JSON을 거꾸로 인코딩하면 이 24바이트가 그대로 나오고, JSON 원문(31바이트)보다 작다는 비교도 함께 표시됩니다.
이럴 때 쓰면 좋아요
- Redis나 메시지 큐에 저장된 MessagePack 값을 확인할 때
- 게임·실시간 서버의 패킷 내용을 디버깅할 때
- JSON 대신 MessagePack을 쓰면 크기가 얼마나 줄어드는지 비교할 때
- 직접 구현한 MessagePack 인코더의 결과를 검증할 때
문제가 생겼을 때
0xc1은 MessagePack에서 쓰지 않는 바이트입니다. 다른 형식(CBOR, BSON 등)의 데이터이거나 시작 위치가 어긋났을 수 있습니다.
문자열이나 배열 길이만큼 바이트가 이어지지 않습니다. 복사할 때 끝부분이 잘리지 않았는지 확인하세요.
활용 팁
- JSON의 1.0은 정수 1로 인코딩됩니다. JavaScript가 둘을 구분하지 않기 때문이며, 실수로 보내야 한다면 받는 쪽에서 형식을 맞춰야 합니다.
- 맵 키가 문자열이 아닌 데이터는 JSON으로 바꿀 때 키를 문자열로 표시합니다. 원래 키 형식이 중요하면 16진수에서 직접 확인하세요.
자주 묻는 질문
네. 16진수가 아닌 Base64 문자열을 넣으면 자동으로 바이트로 바꿔 해석합니다.
JavaScript가 정확히 다룰 수 있는 범위(약 9천조)를 넘는 정수는 정밀도를 잃지 않도록 "18446744073709551615"처럼 문자열로 표시합니다.
표준이 정한 가장 작은 형식을 고르므로 대부분의 라이브러리와 같은 바이트가 나옵니다. 실수는 항상 float64로 인코딩하는 점만 라이브러리 설정에 따라 다를 수 있습니다.