Protobuf 디코더/인코더

🔐 인코딩

gRPC가 쓰는 Protocol Buffers 바이너리를 스키마 없이 분석하거나, .proto로 JSON↔바이너리를 양방향 변환합니다.

.proto 없이 Protobuf 바이너리(hex/base64)를 붙여 넣으면 필드 번호 · wire type · 값을 추론해서 보여 줍니다. 필드 이름은 스키마가 없으면 복원할 수 없습니다.

Wire Type 종류

  • 0 varint — int32/64, uint, bool, enum, sint(zigzag)
  • 1 64-bit — fixed64, sfixed64, double
  • 2 length-delimited — string, bytes, 중첩 메시지, packed
  • 5 32-bit — fixed32, sfixed32, float

📦 Protobuf 디코더/인코더란?

Protocol Buffers(프로토콜 버퍼, protobuf)는 구글이 만든 언어 중립 바이너리 직렬화 포맷으로, gRPC가 메시지를 주고받을 때 쓰는 바로 그 인코딩 방식입니다. JSON처럼 사람이 읽는 텍스트가 아니라 필드 번호 + wire type + 값으로 촘촘하게 압축된 바이트열이라, 같은 데이터라도 훨씬 작고 빠릅니다. 이 도구는 두 가지 모드를 제공합니다. Raw 디코드.proto 정의가 없어도 hex/Base64 바이너리를 붙여 넣으면 wire format을 해석해 필드 구조를 추론해 줍니다(protoc --decode_raw 와 비슷).스키마 기반.proto 를 붙여 넣고 메시지 타입을 고르면 JSON ↔ 바이너리를 양방향으로 변환합니다. 모든 처리는 브라우저 안에서만 일어나며 입력 데이터가 외부로 전송되지 않습니다.

🧩 두 모드, 언제 뭘 쓰나

  • Raw 디코드 — gRPC 트래픽 캡처, 로그, 어디선가 긁은 바이너리를 스키마 없이 빠르게 들여다볼 때. 필드 번호와 타입은 보이지만 필드 이름은 복원되지 않습니다. 같은 길이 데이터가 문자열인지 중첩 메시지인지 애매하면 두 해석을 모두 보여 줍니다.
  • 스키마 기반.proto 가 있을 때. 필드 이름까지 정확히 디코딩되고, 반대로 JSON을 넣어 실제 전송될 바이너리를 만들어 API를 테스트할 수 있습니다.

⚠️ 알아두면 좋은 점

  • 암호화가 아닙니다. Base64처럼 인코딩일 뿐이라, 바이너리만 있으면 구조가 그대로 드러납니다. 민감 정보는 별도 암호화가 필요합니다.
  • proto2/proto3 차이 — 기본값 처리, optional 표현이 다릅니다. 이 도구는 protobufjs 기반으로 두 문법을 모두 파싱합니다.
  • 64비트 정수 — JavaScript 정밀도 한계 때문에 int64/uint64 는 문자열로 출력됩니다.

자주 묻는 질문

Protobuf도 인코딩 도구가 될 수 있나요?

네. Protocol Buffers는 데이터를 바이너리로 직렬화(인코딩)하는 포맷이라, JSON을 바이너리로 인코딩하거나 바이너리를 다시 사람이 읽는 형태로 디코딩하는 도구로 동작합니다. gRPC가 내부적으로 쓰는 인코딩이 바로 이것입니다.

.proto 파일 없이 디코딩할 수 있나요?

Raw 디코드 모드를 쓰면 스키마 없이도 필드 번호, wire type, 값을 추론할 수 있습니다. 다만 바이너리에는 필드 이름이 들어있지 않으므로 이름은 복원되지 않고, 정확한 타입 해석은 .proto가 있어야 가능합니다.

gRPC 요청 바이너리를 그대로 넣어도 되나요?

gRPC는 메시지 앞에 5바이트 길이 프리픽스(compression flag 1바이트 + length 4바이트)를 붙입니다. 순수 메시지 바이트만 떼어 넣어야 정확히 파싱됩니다. 프리픽스가 붙은 채로는 첫 필드가 깨져 보일 수 있습니다.

입력한 데이터가 서버로 전송되나요?

아니요. 파싱과 변환 모두 브라우저 안에서만 수행되며 .proto나 바이너리 데이터가 외부 서버로 전송되지 않습니다.

관련 도구

광고