몽고DB는 Document로 데이터를 관리하고 있습니다. 이때 우리 눈으로 데이터를 받아보면 모두 JSON형태로 데이터를 보여주고, 저장합니다. 또 검색기능을 사용할 때에도 JSON문법에 맞게 입력해줍니다.
몽고DB에서는 데이터를 BSON형태로 저장하여 사용하고 있습니다. 그래서 JSON은 무엇이고 BSON이 무엇인지 궁금해서 찾아보았습니다.
이 포스팅에서는 몽고DB에서 사용하는 JSON과 BSON에 대해서 알아보도록 하겠습니다.
JSON이란 무엇인가
일반적으로 JSON은 JavaScript Object Notation의 줄임말로 Javascript 언어의 일부로 정의되어있는 형식이며 2013년에 공식화 된 형식입니다.
JSON의 형태는 일반적으로 key와 value의 값으로 채워져 있습니다. 직관적이고 간단한 특성으로 쉽게 이해할 수 있는 형태의 표현 방법입니다.
{
"_id": "10009999",
"listing_url": "https://www.aaabbb.com/rooms/10009999",
"name": "Horto flat with small garden",
"summary": "One bedroom + sofa-bed ...",
"cancellation_policy": "flexible",
"last_scraped": {
"$date": {
"$numberLong": "1549861200000"
}
},
"amenities": [
"Wifi",
"Wheelchair accessible",
"Kitchen",
"Free parking on premises",
"Smoking allowed",
"Hot tub"
],
"price": {
"$numberDecimal": "317.00"
},
"address": {
"street": "Rio de Janeiro, Rio de Janeiro, Brazil",
"suburb": "Jardim Botânico",
"government_area": "Jardim Botânico",
"market": "Rio De Janeiro",
"country": "Brazil",
"country_code": "BR",
"location": {
"type": "Point",
"coordinates": [
{
"$numberDouble": "-43.23074991429229"
},
{
"$numberDouble": "-22.966253551739655"
}
],
"is_location_exact": true
}
},
"availability": {
"availability_30": {
"$numberInt": "0"
},
"availability_60": {
"$numberInt": "0"
}
},
"review_scores": {},
"reviews": []
}
JSON의 등장 전에는 XML을 웹에서 주고받는 데이터로 주로 사용했습니다. 그러다가 Javascript의 사용이 증가하면서 사람과 기계가 모두 읽을 수 있는 형태의 구조가 구현하기에도 쉽고 확인하기에도 쉬웠죠. 그래서 점차 JSON의 사용이 증가하게 되었습니다.
BSON이란 무엇인가
BSON은 단순히 말하면 Binary JSON입니다. JSON과 동일한 구조지만 Binary 형태로 변경된 구조를 말합니다. 그럼 JSON이 있는데 왜 BSON이 등장한 것일까요?
몽고DB가 처음 개발될 때에는 JSON을 이용해서 개발을 진행했다고 합니다. 그러다가 문제점 몇가지가 나타나기 시작한 것입니다.
- JSON은 텍스트 기반으로 구문 분석이 매우 느리다.
- JSON은 공간 효율성과는 거리가 멀다. (데이터베이스 문제)
이 외에도 여러가지 문제가 발생한 것입니다. 그래서 고안해 낸것이 바로 BJSON입니다. JSON구조의 좋은점은 그대로 가져가면서 기계가 빠르게 읽을 수 있는 binary 형태로 변경하여 저장을 한 것입니다.
몽고DB에서 사용하는 BSON. 그리고 JSON
몽고DB는 내부적으로 BSON을 사용합니다. 하지만 JSON을 떨어뜨려놓고는 생각할 수 없는 것입니다. 동일한 형태로 사람에게 보여질 때에는 JSON의 형태로 보여주고 저장할 때나 네트워크로 전송할 때에는 BSON 형태로 만들어서 저장 또는 전송하기 때문입니다.
{"hello": "world"}
→ \x16\x00\x00\x00 // total document size
\x02 // 0x02 = type String
hello\x00 // field name
\x06\x00\x00\x00world\x00 // field value
\x00 // 0x00 = type EOO ('end of object')
또한 JSON에서는 표현할 수 있는 방법이 문자열, boolean, 숫자, 배열입니다. 그에 반해 BSON에서는 조금 더 디테일하게 표현할 수 있습니다. 예를들어서 숫자의 경우도 Integer, Float, Long, Decimal과 같이 분류가 되며 날짜의 형태도 저장이 가능합니다.
즉, 사람이 값을 입력할때에는 신경쓰지 않아도 되는 부분중 하나입니다. 내부적으로는 조금 더 유연하게 데이터를 동적으로 저장하고 있습니다. 이것이 RDBMS(관계형 데이터베이스)와 큰 차이점 중 하나입니다.
그리고 이런 모든 관리는 MongoDB Altas에서 확인할 수 있으며 다양한 정보를 제공받을 수 있습니다.
이번 포스팅에서는 MongoDB에서 사용하는 JSON과 BSON에 관계에 대해서 알아보았습니다. BSON의 장점은 JSON보다 빠르게 데이터를 CRUD 할 수 있다는 점입니다. 하지만 사람이 확인할 때에는 JSON의 형태로 확인이 바로 가능하니 별도로 생각해 줄 필요도 없는 부분입니다.
다음에 몽고DB를 사용하는 방법에 대해서 포스팅 해보도록 하겠습니다. 이상입니다.
2021.03.03 - [쿤즈 Server/MongoDB] - [MongoDB] 몽고DB란 무엇인가 (feat. NoSQL)
'쿤즈 Server > MongoDB' 카테고리의 다른 글
[MongoDB] 데이터 입력 (insert) 사용 방법 (0) | 2021.03.30 |
---|---|
[MongoDB] mongo shell을 이용한 mongodb 접속 방법(Windows / macOS) (0) | 2021.03.27 |
[MongoDB] 몽고DB의 ObjectID (2) | 2021.03.15 |
[MongoDB] Atlas 명령어 연결 및 find() 검색기능 사용방법 (0) | 2021.03.13 |
[MongoDB] 몽고DB란 무엇인가 (feat. NoSQL) (2) | 2021.03.03 |
댓글