본문 바로가기
쿤즈 Server/MongoDB

[MongoDB] MongoDB에서 사용하는 JSON vs BSON

by :)Koon 2021. 3. 11.

몽고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)

 

[MongoDB] 몽고DB란 무엇인가 (feat. NoSQL)

가장 익숙한 데이터베이스들은 RDBMS라 해서 관계형 데이터베이스 입니다. 많이 알려진 RDBMS는 Oracle, Mysql, MriaDB, MS-SQL이며 최근에 다시 급 부상하고 있는 PostgreSQL이 있습니다. 이들은 모두 관계형

koonsland.tistory.com

 

댓글