26일차 - [데이터베이스] NoSQL : MongoDB Basic

MongoDB

NoSQL

관계형 데이터베이스 레거시를 사용하지 않고 체계적인 식으로 데이터를 저장하는 데이터 저장소다. 이전에 SQL 챕터에서 NoSQL이 사용되는 경우에 대해 설명했는데, 다시 한 번 정리해 보자면 이렇다.

  1. 비구조적인 대용량의 데이터를 저장하는 경우
  2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우 (수평적 확장)
  3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우

MongoDB는 데이터를 도큐먼트 형식으로 저장한다. 즉, NoSQL 도큐먼트 데이터베이스인 것이다.

Atlas Cloud

MongoDB Atlas: https://www.mongodb.com/atlas/database

MongoDB Atlas는 MongoDB를 설계한 사람들이 만든 모든 것을 관리하는 클라우드 데이터베이스다. AWS, Azure, GCP를 통해 배포에 관한 모든 것을 통합 관리해준다.
아틀라스 사용자는 클러스터를 배포할 수 있으며, 클러스터는 그룹화된 서버에 데이터를 저장한다. 여기서 몇 가지 용어에 대해 알아보자.

  • 인스턴스(Instance): 로컬 또는 클라우드에서 소프트웨어를 실행하는 단일 머신이다. MongoDB의 경우에는 데이터베이스다.
  • 클러스터(Cluster): 인스턴스들의 모임이다. 데이터를 저장하는 서버 그룹이라고 생각하면 된다. 여러 대의 컴퓨터 네트워크를 연결하여 단일 컴퓨터처럼 사용할 수 있다.
  • 레플리카 세트(Replica Set): 동일한 데이터를 저장하는 소수의 연결된 머신이다. 클러스터를 배포하면 자동으로 레플리카 세트가 구성되며, 하나의 레플리카에 문제가 생겨도 나머지 데이터를 사용하는 데에 문제가 없다.

MongoDB Document

MongoDB는 도큐먼트 형식의 데이터베이스다. 여기서 도큐먼트는 필드-값 쌍으로 구성된 데이터다. 일반적으로 도큐먼트 간의 공통 필드가 있으며, 이런 도큐먼트의 모음을 컬렉션이라고 부른다. MongoDB 데이터베이스는 여러 개의 컬렉션으로 구성되어 있다.

  • 도큐먼트(Document): 필드-값 쌍으로 저장된 데이터
  • 필드(Field): 데이터 포인트를 위한 고유한 식별자
  • 값(Value): 주어진 식별자와 연결된 데이터
  • 컬렉션(Collection): MongoDB의 도큐먼트로 구성된 저장소

JSON vs. BSON

shell을 이용하여 도큐먼트를 조회하거나 업데이트할 때, 도큐먼트는 JSON 형식으로 출력된다. JSON(JavaScript Object Notatioin)으로 작성된 문서는 중괄호({})로 감싸져야 하며, 필드와 값이 콜론(:)으로 분리되어야 하고, 필드-값 쌍은 쉼표(,)로 분리된다. 또 필드를 포함한 모든 문자열은 쌍따옴표("")로 감싸야한다. 아래 이미지는 JSON으로 작성된 데이터다.

JSON은 텍스트 형식이라 읽기 쉽다는 장점이 있지만, 파싱이 느리고 메모리 사용이 비효율적이며 사용할 수 있는 데이터 타입에 한계가 있다는 단점이 있다. 이런 JSON의 단점을 보완하기 위해 사용되는 것이 BSON이다. 아래 이미지는 BSON으로 작성된 데이터다.

BSON(Binary-JSON)은 이진법 기반의 데이터 저장 방법으로, 메모리 사용이 효율적이며 다양한 데이터 타입을 사용할 수 있다. MongoDB는 JSON으로 적힌 모든 데이터를 조회하거나 데이터베이스에 추가할 수 있지만 효율성을 위해 내부에서는 BSON으로 데이터를 저장하고 사용한다.

Importing & Exporting

MongoDB의 데이터는 BSON 형태로 저장되고 JSON형태로 출력되기 때문에 상황에 맞게 데이터를 가져오고(import) 내보내야(export) 한다.

JSON

  • mongoimport: 데이터베이스를 아틀라스 클러스터로 가져온다.(JSON/csv)
mongoimport --uri"<Atlas Cluster URI>"
			--drop=<filename>.json
  • mongoexport: 클러스터에서 로컬 머신으로 데이터를 내보낸다. 내보낼 컬렉션과 파일의 이름을 정확히 명시해야 한다.
mongoexport --uri"<Atlas Cluster URI>"
			--collection=<collection name>
            --out=<filename>.json

BSON

  • mongorestore: 로컬 머신에서 아틀라스 클러스터로 BSON 형식의 파일을 가져온다. --drop 옵션으로 기존에 있는 데이터를 삭제할 수 있다.
mongorestore --uri"<Atlas Cluster URI>"
			 --drop dump
  • mongodump: 아틀라스 클러스터 안에 있는 데이터베이스를 로컬 머신에 BSON 형식의 데이터로 내보낸다.
mongodump --uri"<Atlas Cluster URI>"

좋은 웹페이지 즐겨찾기