MongoDB의 BSON: 이진 데이터 저장 형식의 이해
BSON(Binary JSON)이란?
MongoDB에서 사용하는 BSON(Binary JSON)은 JSON(JavaScript Object Notation)의 확장된 형태로, 데이터를 이진 형식으로 저장하고 교환하기 위해 설계되었습니다. BSON은 MongoDB가 데이터를 효율적으로 저장, 쿼리, 검색, 인덱싱하기 위해 사용하는 핵심적인 데이터 표현 형식입니다.
BSON의 특징
1. 이진 형식
- BSON은 데이터를 이진(Binary) 형태로 직렬화합니다.
- 이진 형식은 텍스트 기반의 JSON보다 읽기와 쓰기가 더 빠르고, 공간 효율성을 높입니다.
2. 유형 정보 포함
- BSON은 필드의 데이터 타입을 명시적으로 저장합니다.
- 이를 통해 MongoDB는 저장된 데이터를 빠르게 처리하고 적절한 타입으로 변환할 수 있습니다.
3. 빠른 탐색 및 처리
- BSON은 필드 크기를 명시적으로 저장하여 데이터 탐색 속도를 높입니다.
- 예를 들어, 문자열, 배열, 객체 등의 크기가 명확하게 기록됩니다.
4. 확장성
- 사용자 정의 타입과 함께 확장성을 제공하여 복잡한 데이터 구조도 저장할 수 있습니다.
- MongoDB가 새로운 기능을 도입할 때 BSON도 유연하게 확장될 수 있습니다.
BSON과 JSON의 차이
특성 | JSON | BSON |
---|---|---|
형식 | 텍스트 기반 | 이진(Binary) |
데이터 타입 | 제한적(숫자, 문자열, 배열 등) | 풍부함(날짜, 64비트 정수 등 포함) |
공간 효율성 | 낮음(텍스트 오버헤드 존재) | 높음(이진 압축) |
속도 | 느림 | 빠름 |
BSON의 데이터 타입
BSON은 JSON보다 더 많은 데이터 타입을 지원하며, MongoDB는 이러한 타입을 활용해 더 강력한 기능을 제공합니다.
- 숫자 (Number):
- 32비트 정수 (
int32
) - 64비트 정수 (
int64
) - 64비트 부동소수점 (
double
)
- 32비트 정수 (
-
문자열 (String): UTF-8로 인코딩된 문자열
-
문서 (Document): JSON의 객체와 유사한 중첩 구조
-
배열 (Array): 순서가 있는 값의 목록
-
이진 데이터 (Binary Data): 임의의 이진 데이터를 저장
-
날짜 (Date): UNIX epoch 시간을 기준으로 밀리초 단위로 저장
-
불리언 (Boolean): 참/거짓
-
null: 빈 값을 나타냄
-
ObjectId: MongoDB에서 문서를 고유하게 식별하기 위한 12바이트 식별자
-
정규 표현식 (Regular Expression): 정규식을 저장
- Min/Max Key: BSON의 범위 비교를 위해 사용
BSON의 구조 예시
아래는 JSON과 BSON 형식을 비교한 예입니다:
JSON 형식:
{
"name": "Alice",
"age": 30,
"isActive": true
}
BSON 형식 (설명용, 실제는 이진):
0x16 00 00 00 // 전체 문서 크기 (22바이트)
02 // "name" 필드의 타입 (문자열)
6e 61 6d 65 00 // "name" (널로 종료)
06 00 00 00 41 6c 69 63 65 00 // 문자열 값 "Alice" (6바이트)
10 // "age" 필드의 타입 (32비트 정수)
61 67 65 00 // "age" (널로 종료)
1e 00 00 00 // 값 30
08 // "isActive" 필드의 타입 (Boolean)
69 73 41 63 74 69 76 65 00 // "isActive" (널로 종료)
01 // 값 true
00 // 문서 종료
BSON의 장점
- 빠른 데이터 처리: 이진 구조 덕분에 데이터 읽기/쓰기가 빠릅니다.
- 공간 효율성: 중복 필드 이름을 줄이고 크기 정보를 포함하여 저장 공간을 절약합니다.
- 유형 다양성: JSON에서는 지원하지 않는 데이터 유형(예: 날짜, 64비트 정수 등)을 포함합니다.
사용 예
MongoDB에서 데이터를 삽입하거나 조회할 때, JSON 형식으로 작업하지만 실제로 저장 및 전송되는 데이터는 BSON 형식으로 변환됩니다.
이를 통해 MongoDB는 개발자 친화적인 JSON 인터페이스를 유지하면서도 성능을 최적화할 수 있습니다.
BSON의 내부 작동 방식을 이해하면 MongoDB를 더 효율적으로 사용할 수 있습니다! 😊
Leave a comment