MessagePack 정리기
지저분한 MessagePack hex 또는 base64 문자열을 정리합니다. 0x 접두사를 떼고, \xNN 이스케이프를 펼치고, Python의 b'...' 리터럴을 풀고, 붙여넣기 찌꺼기를 다듬습니다.
MessagePack 정리기가 실제로 하는 일
잠깐 솔직해져 봅시다: MessagePack은 바이너리 포맷입니다. Cloudflare Worker 로그에서 복사-붙여넣기하다가 몇 바이트가 잘렸다면, 어떤 도구도 마법처럼 되돌릴 수 없습니다 — 그 바이트는 사라졌고, github.com/msgpack/msgpack의 명세는 길이 접두사 방식이라 꼬리가 빠지면 무엇을 해도 디코딩에 실패합니다. 그래서 이 페이지는 깨진 바이너리 데이터를 복구하는 척하지 않습니다.
대신 좀 더 지루하지만 유용한 일을 합니다: 터미널, 디버거, iOS 콘솔, 클립보드를 거치며 hex와 base64 (RFC 4648) 덤프가 묻혀 오는 포맷 노이즈를 제거합니다. 구체적으로는 주변 공백을 다듬고, 감싼 따옴표를 벗기고, Python의 b'...' 바이트 리터럴을 풀고, \xNN 이스케이프 시퀀스를 원시 hex 자릿수로 펼치고, 0x 접두사를 떼고, 페이로드 안의 콤마와 공백을 버립니다. 정리된 결과는 진짜 msgpack 디코더 — 공식 @msgpack/msgpack 라이브러리나 명세를 따르는 어떤 구현 — 가 군말 없이 받아주는 것입니다.
구체적인 예: 왼쪽에 b'\x83\xa7orderId\xa8ORD-7421...'을 붙여넣고 정리하기를 누르면, 오른쪽에 원시 hex 문자열이 나옵니다. 그걸 우리 MessagePack 뷰어에 바로 떨어뜨리거나 빠른 Node REPL에서 Uint8Array에 넣을 수 있습니다. 화려한 건 없습니다. 그저 노이즈를 제거할 뿐입니다.
붙여넣은 MessagePack 문자열 정리 방법
세 단계. 로그 한 줄에서 무언가를 막 복사해서 디코더에 넘길 수 있는 hex로 만들고 싶은 그 순간을 위해 만들어졌습니다.
지저분한 문자열을 왼쪽 패널에 붙여넣기
가지고 있는 걸 왼쪽 에디터에 떨어뜨리세요 — Python의 repr(), iOS 디바이스 콘솔 한 줄, curl --data-binary @file | xxd의 출력, Cloudflare Worker 로그 항목, 무엇이든. 정리기는 입력이 예쁠 필요가 없습니다. 접두사와 이스케이프가 섞인 일부러 지저분한 예시를 보려면 지저분한 hex 샘플을 누르세요. 붙여넣을 만한 예:
b'\x83\xa7orderId\xa8ORD-7421\xa5items\x92\x82\xa3sku\xa7SKU-101\xa3qty\x02\x82\xa3sku\xa7SKU-244\xa3qty\x01\xa8customer\xa8Ava Chen'저건 msgpack-python이 출력한 진짜 Python 바이트 리터럴입니다. 정리기는 b'...' 래퍼를 인식해서 벗기고, 각 \xNN을 원시 hex로 바꿉니다.
정리하기 클릭
초록색 정리하기!! 버튼을 누르세요. 클릭으로 동작하는 건 의도적입니다 — 나오는 것을 받아들이기 전에 들어가는 것을 봐야 하기 때문입니다. 오른쪽 패널은 정리된 hex(또는 자동 감지된 base64)를 보여주고, 에디터 아래 노트 패널은 우리가 적용한 모든 변환을 나열해서 아무것도 조용히 일어나지 않게 합니다.
결과를 진짜 디코더에 넘기기
오른쪽 패널의 정리된 문자열을 우리 MessagePack 뷰어나 MessagePack → JSON 도구에 떨어뜨리세요. 바이트가 진짜로 온전했고 포맷만 문제였다면, 디코딩된 JSON이 보일 겁니다 — SKU-101 라인 아이템들, 고객 Ava Chen, 모두 다. 디코더가 여전히 불평한다면, 문제는 진짜 손상이나 잘림이고, 유일한 해결책은 소스에서 바이트를 다시 가져오는 것입니다.
실제로 이걸 쓰게 되는 경우
Cloudflare Worker 로그에서 바이트 꺼내기
Worker는 바이너리 페이로드를 0x83 0xa7 6f 72 64 65 72... 처럼 바이트 사이에 공백을 넣고 각 바이트마다 0x를 붙여서 로그에 남기는 걸 좋아합니다. 그 줄을 복사해서 여기 붙여넣으면, 정리기가 한 번의 클릭으로 접두사와 공백을 제거해서 — 진짜 디코더가 먹을 수 있는 83a76f7264657249...를 남겨줍니다.
디버거에서 나온 Python repr 풀기
pdb에서 브레이크포인트를 찍고, p msgpack.packb(order)를 실행해 b'\x83\xa7orderId\xa8ORD-7421'을 받았습니다. 그건 Python 바이트 리터럴입니다 — b 접두사와 따옴표는 데이터의 일부가 아닙니다. 정리기가 그것들을 벗기고 각 \xNN을 실제 hex 쌍으로 펼치니, 손으로 다시 쓰지 않고도 결과를 뷰어에 붙여넣을 수 있습니다.
curl --data-binary | xxd 덤프 정리하기
서버가 받은 것을 점검하려고 curl --data-binary @msg.bin https://api.example.com | xxd를 실행했습니다. xxd 출력은 왼쪽에 줄 번호, 오른쪽에 ASCII, 가운데에 공백 구분 hex 바이트가 있습니다. 주소 열과 ASCII 열은 직접 떼어내고, 가운데를 정리기에 붙여넣으면 바이트 사이 공백을 제거해 hex가 다시 하나의 단단한 문자열이 됩니다.
iOS 디바이스 콘솔에서 붙여넣기
iOS 콘솔 출력은 때때로 바이너리 페이로드를 작은따옴표로 감싸고 소프트 줄바꿈을 끼워 넣습니다. 정리기는 감싼 따옴표와 공백을 한 번에 처리하므로, 디코딩하기 전에 텍스트 에디터에서 찾기-바꾸기 게임을 할 필요가 없습니다.
자주 묻는 질문
이 도구가 깨진 MessagePack 바이너리 데이터를 복구할 수 있나요?
아니요, 그리고 그렇게 할 수 있다고 주장하는 어떤 도구도 의심해야 합니다. MessagePack은 길이 접두사 방식의 바이너리 포맷입니다 — 길이 필드 중간에 바이트가 빠지거나 잘못되면, 디코더는 거기 무엇이 있어야 했는지 추측할 수 없습니다. 이 페이지는 붙여넣기 찌꺼기와 포맷 노이즈만 고칩니다. 바이트가 진짜로 손상되었다면, 해결책은 소스에서 다시 가져오는 것입니다: 요청을 다시 실행하기, 로그 보존소에서 다시 읽기, 데이터베이스에서 다시 내보내기. 잃어버린 바이트를 소프트웨어로 대체할 방법은 없습니다.
여기서 "정리하기"는 정확히 무엇을 의미하나요?
여섯 가지 구체적인 정규화: 주변 공백을 다듬고; 감싼 작은따옴표나 큰따옴표를 벗기고; Python의 b'...' / b"..." 바이트 리터럴을 풀고; \xNN 이스케이프 시퀀스를 원시 hex 자릿수로 펼치고; 각 바이트의 0x 접두사를 떼고; 바이트 사이 공백과 콤마를 제거합니다. 그 모든 후, 결과는 구조적으로 건전한지 확인하기 위해 hex나 base64 중 하나로 한 번 파싱됩니다. 에디터 아래 노트 패널에는 당신의 입력에 실제로 발동된 모든 변환이 나열됩니다.
입력 시 자동 정리가 아니라 왜 정리하기 버튼이 있나요?
의도적입니다. 다른 대부분의 도구는 입력이 사람이 읽을 수 있고 즉각적인 피드백을 원하기 때문에 입력 변경 시 자동 업데이트합니다. 이건 그 반대 — 입력은 이스케이프 시퀀스 더미고, 당신의 목표는 출력을 신뢰하기 전에 무엇이 변환되었는지 검증하는 것입니다. 클릭으로 동작한다는 건 붙여넣고, 입력을 보고, 클릭하고, 노트 패널을 읽어 우리가 기대한 대로 했는지 확인할 수 있다는 뜻입니다.
내 데이터가 브라우저를 떠나나요?
아니요. 모든 정리는 이 탭 안에서 로컬로 동작합니다. fetch도, 업로드도, 입력에 대한 텔레메트리도 없습니다. 탭을 닫으면 데이터는 사라집니다. 그렇긴 해도, URL 표시줄은 공공 장소처럼 다루세요 — 비밀을 담은 페이로드를 쿼리 문자열에 붙여넣지 말고, 끝났을 때 민감한 것을 담았던 클립보드는 비우세요.
입력이 hex가 아니라 base64라면요?
자동 감지됩니다. 입력이 (공백, 콤마, 0x, \xNN 이스케이프를 제거한 후) 모두 hex 문자이고 짝수 길이라면 hex로 처리합니다. 그렇지 않으면 표준 base64를 시도합니다. 어느 쪽이든, 정리된 출력은 감지된 포맷을 유지합니다 — 깨끗한 hex는 hex로, 깨끗한 base64는 base64로 남습니다. 결과는 다음으로 MessagePack 뷰어에 떨어뜨리세요. 거기도 같은 방식으로 자동 감지합니다.
왜 가끔 출력이 입력과 똑같이 보이나요?
입력이 이미 깨끗했기 때문입니다 — 할 일이 없습니다. 그 경우 노트 패널에 "입력이 이미 깨끗했습니다."라고 표시됩니다. 이건 정상이고 좋은 것입니다. 정리기는 바빠 보이려고 변환을 지어내지 않습니다.
다른 MessagePack 도구
포맷을 정리하는 건 첫 단계입니다. 문자열이 깨끗해지면, 이것들이 바이트를 디코딩하고 왕복시킵니다: