Format Atlas

비교

Protocol Buffers와 JSON

Protocol Buffers는 `.proto` 스키마에서 타입 메시지를 정의하고 필드 번호 기반 바이너리 wire 형식과 별도의 ProtoJSON 매핑을 제공합니다. JSON은 RFC 8259의 일반 텍스트 형식이며 특정 스키마를 전제하지 않습니다.

어떤 형식을 선택해야 할까요?

RPC나 서비스 메시지에서 타입 계약과 바이너리 wire 호환성을 관리한다면 Protobuf를 선택하세요. 일반 텍스트 구조와 폭넓은 JSON 도구가 필요하면 JSON을 선택하세요.

적합한 경우 Protocol Buffers 스키마 파일

Protocol Buffers 메시지 구조 정의 · 여러 프로그래밍 언어에서 공유할 데이터 계약 작성

  • protoc로 언어별 코드 생성
  • RPC 및 서비스 간 통신 메시지 정의

적합한 경우 JSON

웹 API, 설정 파일 및 데이터 교환

  • 구조화된 데이터 전달

기본 정보

항목Protocol Buffers 스키마 파일JSON
확장자.proto.json
MIME 유형text/plainapplication/json
주요 용도Protocol Buffers 메시지 구조 정의 · 여러 프로그래밍 언어에서 공유할 데이터 계약 작성웹 API, 설정 파일 및 데이터 교환
여는 방법텍스트 편집기나 Protocol Buffers 지원 IDE에서 엽니다. 문법과 import를 확인하려면 프로젝트에서 사용하는 버전과 설정으로 protoc 컴파일을 실행합니다.텍스트 편집기, IDE 또는 JSON 지원 뷰어로 엽니다.
내보내기 또는 변환다른 스키마 형식으로 옮길 때는 유형, 필드 번호, 기본값, 열거형 값, 호환성 의미를 먼저 대응시킨 뒤 코드를 생성하고 실제 데이터를 테스트합니다. 확장자를 .json이나 바이너리 형식으로 바꾸는 것만으로는 변환되지 않습니다.애플리케이션이나 변환 도구로 CSV 등의 형식으로 변환할 수 있습니다.

용도별 선택

protoc로 언어별 코드 생성

Protocol Buffers 메시지 구조 정의 · 여러 프로그래밍 언어에서 공유할 데이터 계약 작성

Protocol Buffers 스키마 파일

RPC 및 서비스 간 통신 메시지 정의

Protocol Buffers 메시지 구조 정의 · 여러 프로그래밍 언어에서 공유할 데이터 계약 작성

Protocol Buffers 스키마 파일

구조화된 데이터 전달

웹 API, 설정 파일 및 데이터 교환

JSON

핵심 사항 1

Protobuf 바이너리 wire 데이터는 `.proto` 정의와 필드 번호에 의존합니다. JSON은 스키마 없이 텍스트 객체와 배열을 나타내며, ProtoJSON은 Protobuf 타입을 별도 규칙으로 JSON 값에 매핑합니다.

차이 자세히 보기

핵심 사항 2

ProtoJSON은 bytes를 base64 문자열로, int64를 문자열로, enum을 이름으로 나타내고 필드명을 JSON 키로 변환합니다. 이는 바이너리 wire 형식이나 임의 JSON Schema와 같지 않습니다.

차이 자세히 보기

차이 자세히 보기

서비스 간 타입 계약과 간결한 바이너리 교환에는 Protobuf를 사용하세요. 일반 텍스트 인터페이스에는 JSON을 사용하세요. Protobuf의 JSON 표현을 쓸 경우 임의의 JSON 문서가 같다고 가정하지 말고 ProtoJSON 규칙을 따르세요. presence, null, 숫자 범위, unknown field, 스키마 진화를 확인하세요.

  • Protobuf wire 메시지의 필드 번호와 타입을 해석하려면 일치하는 스키마가 필요합니다. 일반 JSON 문법은 스키마를 요구하지 않습니다.
  • ProtoJSON은 별도 매핑과 호환성 규칙이 있고 바이너리 wire보다 효율이 낮으며 unknown field를 같은 방식으로 보존하지 않습니다.
  • 변환 시 field presence, 정수 정밀도, enum 이름, map 키, oneof, null, unknown field가 달라질 수 있습니다. 실제 런타임 라이브러리와 구·신 스키마로 검증하세요.

자주 묻는 질문

ProtoJSON은 모든 JSON 문서와 호환되나요?

아니요. ProtoJSON은 Protobuf 스키마로 표현 가능한 구조를 전용 매핑으로 나타내며 모든 JSON Schema나 wire 동작을 보존하지 않습니다.

자세히 보기

참고 자료 및 사양