[JSON] 데이터 주고 받을 때 쓰는 표현 방법, 그럼 XML, BSON은?

JavaScript Object Notation
- 데이터 표현 방법, 데이터 교환 포맷이다. 주로 데이터를 주고 받을 때 사용한다.
- 서버와 클라이언트간 비동기 통신에 많이 사용한다.
- 데이터를 저장하거나 전송할 때 많이 사용한다.
- key, value 쌍으로 이루어진다.
- 특정 언어에 종속되지 않는다.
- XML의 불필요한 태그, 많은 용량, 나쁜 가독성 때문에 JSON이 대부분 대체되었다.
- eXtensible Markup Language: 데이터를 설명하는 태그를 마음대로 정의할 수 있다.
- data 표현에 집중한 HTML과 달리, data 전달에 집중한 언어다.

JSON 구조
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
}
}
- key값과 문자열은 쌍따옴표를 이용하여 표기해야한다.
- 원하는 만큼 객체와 배열을 중첩시켜서 사용할 수 있다.
- null, number, string, array, object, boolean을 사용할 수 있다.
Handling JSON in Javascript
const jsonText = '{ "age": "27", "gender": "male" }';
const obj = JSON.parse(jsonText);
// Object {age: '27', gender: 'male'}
JSON.stringify(obj);
// String '{"age":"27","gender":"male"}'
BSON (Binary JSON)
BSON은 Binary JSON의 약자로, MongoDB에서 데이터를 저장하고 전송하기 위해 사용하는 이진 형식이다.
특징
- JSON의 직관적인 구조를 유지하면서 바이너리 형식의 장점을 결합
- 데이터 타입을 더 세밀하게 지원 (JSON보다 풍부한 데이터 타입)
- 빠른 파싱과 효율적인 저장 공간 활용
- 프로그래밍 언어와의 더 나은 호환성
JSON vs BSON 데이터 타입 비교
| JSON | BSON |
|---|---|
| String | String |
| Number | Integer (32bit, 64bit) |
| Double | |
| Decimal128 | |
| Boolean | Boolean |
| Array | Array |
| Object | Object |
| null | null |
| Date | |
| Binary data | |
| ObjectId | |
| Regular Expression |
사용 예시
JSON:
{
"name": "John Doe",
"age": 30,
"birth": "1993-01-15",
"scores": [85.5, 90.0, 92.5]
}
BSON (16진수로 표현):
\x31\x00\x00\x00 // 문서 전체 크기 (49 bytes)
\x02 // String 타입
name\x00 // 필드명
\x09\x00\x00\x00John Doe\x00 // 문자열 값
\x10 // Int32 타입
age\x00 // 필드명
\x1e\x00\x00\x00 // 정수값 30
\x09 // Date 타입
birth\x00 // 필드명
\x00\x40\x23\x01\x00\x00\x00\x00 // 날짜값
\x04 // Array 타입
scores\x00 // 필드명
[...] // 배열 데이터
\x00 // 문서 종료
BSON의 장점
- 성능 최적화
- 바이너리 형식으로 인한 빠른 파싱
- 효율적인 데이터 순회
- 네트워크 전송 시 더 작은 크기
- 풍부한 데이터 타입
- 날짜, 바이너리 데이터 등 기본 지원
- 숫자 타입의 정밀한 구분 (Int32, Int64, Double, Decimal128)
- ObjectId를 통한 효율적인 문서 식별
- MongoDB 최적화
- 인덱싱과 쿼리 처리의 효율성
- 저장소 엔진과의 최적화된 통합
- 샤딩과 복제에 최적화된 구조
실제 활용
- 데이터 저장: MongoDB가 내부적으로 모든 문서를 BSON으로 저장
- 네트워크 전송: MongoDB 드라이버와 서버 간 통신
- 애플리케이션 개발: MongoDB 드라이버가 자동으로 JSON과 BSON 간 변환 처리