Protobuf 디코더

hex나 base64로 된 raw protobuf 메시지를 .proto 스키마 없이 디코딩 — 필드 번호, wire type, 문자열, 중첩 메시지까지 확인 — 100% 브라우저 처리, 업로드 없음

🔒 모든 처리는 브라우저에서 실행되며 페이로드는 업로드되지 않습니다. raw wire 포맷을 그대로 읽으므로 .proto 스키마가 필요 없습니다.

.proto 없이 protobuf 디코딩

protobuf로 인코딩된 메시지를 hex나 base64로 붙여넣으면 스키마 없이 바이너리 wire 포맷을 바이트 단위로 해석합니다. 각 필드의 번호, wire type(varint, 64비트, length-delimited, 32비트), 값을 복원하고 중첩된 하위 메시지까지 재귀적으로 펼쳐 전체 트리를 보여줍니다. 모든 처리는 브라우저에서 실행되며 페이로드는 업로드되지 않습니다.

wire 포맷 해석 방식

protobuf 바이너리는 필드 번호와 wire type만 저장하고 선언된 타입은 담지 않으므로 length-delimited 바이트는 휴리스틱으로 해석합니다. 출력 가능한 UTF-8은 문자열로, 그렇지 않으면 하위 메시지로 정상 파싱되면 중첩 메시지로, 나머지는 raw hex로 표시합니다. JavaScript 안전 정수를 넘는 값은 정확한 10진 문자열로 표시합니다.

자주 묻는 질문

디코딩하려면 .proto 파일이 필요한가요?

아니요. protobuf wire 포맷은 스키마 없이도 필드 번호, wire type, 원시 값을 복원할 수 있을 만큼 자기 서술적입니다. 다만 선언된 필드 이름과 정확한 타입(예: int32와 sint32)은 wire에 저장되지 않아 표시할 수 없고, 구조와 값은 볼 수 있습니다.

gRPC 페이로드가 field number 0 오류로 실패하는 이유는?

gRPC는 각 메시지 앞에 5바이트 프리픽스(압축 플래그 1바이트 + 빅엔디언 길이 4바이트)를 붙입니다. 이 5바이트를 제거하고 나머지를 디코딩하세요.

문자열·바이트·중첩 메시지는 어떻게 구분하나요?

길이 지정 필드는 먼저 유효한 UTF-8이면서 제어 문자가 없는지 봅니다. 그러면 문자열로 보여주므로 한글이 담긴 필드도 글자 그대로 나옵니다. 그렇지 않은 바이트가 protobuf 하위 메시지로 깔끔하게 파싱되면 중첩 메시지로, 둘 다 아니면 원시 16진수로 보여줍니다. 스키마 없이 하는 추론이라 값에 따라 의도와 다르게 분류될 수 있습니다.