JSON vs BSON

김동현·2021년 8월 12일

MongoDB

목록 보기
3/3

JSON

도큐먼트를 shell을 이용하여 조회하거나 업데이트 할 때, 도큐먼트는 JSON(Javascript Object Notation)형식으로 출력된다.
JSON 형식으로 도큐먼트를 작성하기 위해서는 아래와 같은 조건을 만족해야 한다.

  • {} 중괄호로 도큐먼트가 시작하고 끝나야한다.
  • 필드와 값이 : 콜론으로 분리되어야 하며, 필드와 값을 포함하는 쌍은 , 쉼표로 나뉘어야 한다.
  • 필드도 문자열이기 때문에 "" 쌍따옴표로 감싸야 한다.

    JSON 형식은 읽기 쉽고, 많은 개발자들이 쓰기 편한 형태이다.
    하지만 단점도 존재하는데, JSON은 텍스트 형식이기 때문에 읽기 쉽지만, 파싱이 매우 느리고, 메모리 사용에 있어서 비효율적이다.
    그리고 JSON은 기본 데이터 타입만을 지원하기 때문에 사용 할 수 있는 타입에 제한이 있다.
    이러한 문제점을 해결하기 위한 방안으로 BSON(Binary JSON)형식을 도입했다.

BSON


이 사진은 BSON의 형태이다.
컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현법이기 때문에 JSON보다 메모리 사용에 효율적이며, 보다 빠르고, 가벼우며 유연하다.
뿐만 아니라 BSON의 사용으로 더 많은 데이터 타입을 사용할 수 있게 되었다.
따라서 MongoDB는 JSON형식으로 작성된 것은 무엇이든 데이터베이스에 추가할 수 있고, 쉽게 조회할 수 있지만, 속도, 효율성, 유연성의 장점이 있기 때문에 내부적으로 BSON 형식으로 데이터를 저장, 사용하고 있다.
BSON에 대해서 더 알아보도록 하자

importing & exporting


MongoDB의 데이터는 BSON의 형태로 저장이 되고, 보통 읽기 쉬운 JSON의 형태로 출력된다.
그 이유가 단순히 백업 저장을 하기 위해서라면 가볍고 빠른 BSON의 형태를 사용하는 편이 좋고 데이터를 내보낸 후, 조회를 하거나 출력을 해야한다면 사람이 읽기 쉬운 JSON의 형식이 바람직하기 하기 때문이다.
그래서 조건에 따라, 가져오거나 내보낼 때 사용 가능한 명령어가 각각 존재한다.

각각의 형식으로 가져오고 내보내기 위한 명령어이다.

export


BSON의 형식의 데이터를 내보내기 위한 mongodump 명령어와
JSON의 형식의 데이터를 내보내기 위한 mongoexport 명령어 두 가지가 있다.
이를 사용하기 위해서 Atlas Cluster URI가 필요하다.
해당 URI는 일반 웹의 URI와 형식이 같고, username, password, cluster 주소로 이루어져 있다.
mongodump를 하는 경우에는 별다른 쿼리가 없지만,
mongoexport를 하는 경우에는 해당 데이터베이스의 컬렉션 이름, 파일 이름까지 정확하게 작성해줘야 한다.

mongodump 명령어를 통해 아틀라스 클러스터 안에 있는 sample_supplies 라는 데이터베이스를 로컬 머신으로 BSON 형식의 데이터로 내보냈다.
잘보내졌는지 확인을 해보니

터미널에서 확인 할 수 있듯이 dump라는 폴더 안에 sample_supplies 데이터베이스 폴더가 생성되었고, 그 안에는 다시 sales.bson 파일이 생긴 것을 볼 수 있다.
sales.bson이라는 파일을 열어보면 읽기 어려운 BSON형식의 데이터를 확인 할 수 있다.
읽기 쉬운 JSON 형식의 파일을 내보내는 mongoexport를 확인해보자

mongoexport를 사용하여, JSON 형식의 데이터를 내보낼 때에는 내보낼 컬렉션과 파일의 이름을 정확히 명시해야 한다.
로컬 머신으로 내보낸 sales.json 파일을 열어보면

sales.json 파일 안의 JSON형식의 데이터를 볼 수 있따.

import


가져오기 또한 두 가지로 나뉜다.
BSON 형식의 데이터를 가져올 경우에는 mongostore를 사용하며,
JSON 형식의 데이터를 가져올 경우, mongoimport를 사용한다.
export와 마찬가지로 URI를 사용해서 작성되며, 기존에 있는 데이터를 삭제하기 위한 옵션인 drop 쿼리문은 선택적으로 사용할 수 있다.

mongodump를 통해 가져온 BSON형식의 파일을 다시 mongostore를 통해 아틀라스 클러스터로 복원 시켜보자
아틀라스 클러스터 입장에서는 로컬 머신으로 내보냈던 dump 파일을 다시 가져가는 개념이다.
터미널에 done이라고 표시 되면서 mongostore가 완료됬다.
mongoimport를 확인해보면

mongostore와 마찬가지로 mongoimport는 데이터베이스를 다시 아틀라스 클러스터로 가져올 수 있게 한다.
이 때 적용되는 데이터의 형식은 JSON 뿐 아니라, csv와 같은 데이터 형식일 수도 있따.
그리고 파란색 블록에서는 해당 데이터가 삽입되는 컬렉션을 지정하지 않았지만,
아래 초록색 블록과 같이 컬렉션 이름을 지정하는 등의 부가적인 옵션을 추가 할 수 있따.

profile
개발자로서의 첫걸음

0개의 댓글