tech.junha.kr

[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 데이터 타입 비교

JSONBSON
StringString
NumberInteger (32bit, 64bit)
Double
Decimal128
BooleanBoolean
ArrayArray
ObjectObject
nullnull
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의 장점

  1. 성능 최적화
    • 바이너리 형식으로 인한 빠른 파싱
    • 효율적인 데이터 순회
    • 네트워크 전송 시 더 작은 크기
  2. 풍부한 데이터 타입
    • 날짜, 바이너리 데이터 등 기본 지원
    • 숫자 타입의 정밀한 구분 (Int32, Int64, Double, Decimal128)
    • ObjectId를 통한 효율적인 문서 식별
  3. MongoDB 최적화
    • 인덱싱과 쿼리 처리의 효율성
    • 저장소 엔진과의 최적화된 통합
    • 샤딩과 복제에 최적화된 구조

실제 활용

  • 데이터 저장: MongoDB가 내부적으로 모든 문서를 BSON으로 저장
  • 네트워크 전송: MongoDB 드라이버와 서버 간 통신
  • 애플리케이션 개발: MongoDB 드라이버가 자동으로 JSON과 BSON 간 변환 처리