CBOR 코덱
CBOR 바이너리 데이터 형식 인코딩 및 디코딩
네트워크 캡처, IoT 장치 또는 API 응답에서 CBOR 데이터를 붙여넣으세요
예제 데이터
디코딩 결과
CBOR 데이터를 입력하고 디코딩을 클릭하여 결과를 확인하세요
바이트 뷰어
CBOR로 인코딩할 유효한 JSON 데이터를 입력하세요
컨테이너 길이 인코딩
- Compact: 최소 바이트 사용 (≤23개 요소 시 fixmap/fixarray)
- Explicit 16-bit: 항상 2바이트 길이 사용 (0xB9/0x99 접두사)
- Explicit 32-bit: 항상 4바이트 길이 사용 (0xBA/0x9A 접두사)
- Indefinite: 종료 코드가 있는 무한 길이 사용 (0xBF...0xFF)
JSON Examples
인코딩 결과
JSON 데이터를 입력하고 인코딩을 클릭하여 CBOR을 생성하세요
바이트 뷰어
인코딩 통계
CBOR 데이터 타입 참조
| 메이저 타입 | 타입 이름 | 헤더 바이트 | 설명 |
|---|---|---|---|
| 0 | 부호 없는 정수 | 0x00-0x1B | 0부터 2^64-1까지의 음이 아닌 정수 |
| 1 | 음수 정수 | 0x20-0x3B | -1부터 -2^64까지의 음수 정수 |
| 2 | 바이트 문자열 | 0x40-0x5B | 임의 길이의 원시 바이너리 데이터 |
| 3 | 텍스트 문자열 | 0x60-0x7B | UTF-8 인코딩된 텍스트 문자열 |
| 4 | 배열 | 0x80-0x9B | 데이터 항목의 순서가 있는 컬렉션 |
| 5 | 맵 | 0xA0-0xBB | 키-값 쌍 (객체) |
| 6 | 태그 | 0xC0-0xDB | 확장 타입을 위한 의미론적 태그 |
| 7 | 심플/플로트 | 0xE0-0xFB | 불리언, null, undefined 및 부동소수점 숫자 |
CBOR 프로토콜 문서
CBOR이란?
CBOR(Concise Binary Object Representation)은 RFC 8949에 정의된 바이너리 데이터 직렬화 형식입니다. JSON의 컴팩트한 대안으로 설계된 CBOR은 JSON 데이터 모델과의 호환성을 유지하면서 구조화된 데이터를 효율적인 바이너리 형식으로 인코딩합니다. 이 형식은 자기 설명적이어서 디코더가 외부 스키마 정의 없이 데이터를 파싱할 수 있습니다. CBOR은 대역폭과 처리 능력이 제한된 자원인 IoT 장치 및 임베디드 시스템과 같은 제한된 환경을 위해 특별히 설계되었습니다.
바이너리 인코딩 구조
모든 CBOR 데이터 항목은 두 개의 필드를 포함하는 단일 바이트로 시작합니다: 메이저 타입(3비트)과 추가 정보(5비트). 메이저 타입은 데이터 카테고리(정수, 문자열, 배열 등)를 결정하고, 추가 정보는 인수 길이를 나타내거나 작은 값을 직접 포함합니다. 이 컴팩트한 헤더 설계는 작은 정수와 같은 단순한 값이 단일 바이트만 필요함을 의미합니다.
| 추가 정보 | 의미 |
|---|---|
| 0-23 | 직접 인코딩된 값 (0-23) |
| 24 | 1바이트 부호 없는 정수 뒤따름 |
| 25 | 2바이트 부호 없는 정수 뒤따름 (big-endian) |
| 26 | 4바이트 부호 없는 정수 뒤따름 (big-endian) |
| 27 | 8바이트 부호 없는 정수 뒤따름 (big-endian) |
| 31 | 무한 길이 (문자열, 배열, 맵용) |
컨테이너 길이 인코딩 옵션
CBOR은 컨테이너(배열 및 맵) 길이 인코딩에 유연성을 제공합니다. 모든 유효한 인코딩은 의미적으로 동일한 데이터를 생성하지만 바이너리 표현은 다릅니다. 이 도구는 다양한 시스템 요구사항에 맞는 4가지 인코딩 모드를 제공합니다.
인코딩 예: {"name":"Alice","age":30}
동일한 JSON 객체를 여러 유효한 방식으로 인코딩할 수 있습니다:
| 모드 | 헤더 바이트 | 설명 |
|---|---|---|
| Compact | A2 ... | 0xA2 = fixmap(2), 최소 인코딩 |
| Explicit 16-bit | B9 00 02 ... | 0xB9 = map16, 2바이트 길이 뒤따름 |
| Explicit 32-bit | BA 00 00 00 02 ... | 0xBA = map32, 4바이트 길이 뒤따름 |
| Indefinite | BF ... FF | 0xBF = 무한 map, 0xFF로 종료 |
4가지 인코딩 모두 동일한 JSON으로 디코딩됩니다. 크기 효율성에는 컴팩트, 프로토콜 호환성에는 명시적 길이, 스트리밍 시나리오에는 무한 길이를 선택하세요.
CBOR vs JSON 비교
두 형식 모두 동일한 논리적 데이터 모델을 표현하지만 다른 목적을 제공합니다. CBOR은 컴팩트한 인코딩과 처리 효율성을 우선시하고, JSON은 사람이 읽을 수 있는 것과 범용 텍스트 기반 상호 운용성을 강조합니다.
- 더 작은 인코딩 크기 (일반적으로 30-50%)
- 바이너리 데이터의 네이티브 지원
- 더 빠른 파싱 및 인코딩
- 날짜, URI 등을 위한 내장 시맨틱 태그
- 사람이 읽고 편집 가능
- 범용 브라우저/언어 지원
- 더 쉬운 디버깅 및 로깅
일반적인 응용 프로그램
- IoT 장치 통신 및 센서 데이터 전송
- WebAuthn/FIDO2 인증 프로토콜
- COSE 보안 (CBOR 객체 서명 및 암호화)
- CoAP 메시징 (제한된 애플리케이션 프로토콜)
- 임베디드 시스템 구성 및 데이터 저장
시맨틱 태그
CBOR 태그는 데이터 항목에 시맨틱 의미를 제공합니다. 태그는 감싸진 값이 어떻게 해석되어야 하는지 나타내는 선택적 래퍼로, 기본 데이터 타입을 넘어선 타입 확장을 가능하게 합니다.
| 태그 번호 | 시맨틱 의미 |
|---|---|
| 0 | 표준 날짜/시간 문자열 (RFC 3339) |
| 1 | 에포크 기반 날짜/시간 (Unix 타임스탬프) |
| 2 | 큰 양수 |
| 3 | 큰 음수 |
| 32 | URI 참조 |
| 55799 | 자기 설명 CBOR (매직 넘버) |