관계형 데이터베이스 레거시를 사용하지 않고 체계적인 식으로 데이터를 저장하는 데이터 저장소다. 이전에 SQL 챕터에서 NoSQL이 사용되는 경우에 대해 설명했는데, 다시 한 번 정리해 보자면 이렇다.
- 비구조적인 대용량의 데이터를 저장하는 경우
- 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우 (수평적 확장)
- 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우
MongoDB는 데이터를 도큐먼트 형식으로 저장한다. 즉, NoSQL 도큐먼트 데이터베이스인 것이다.
MongoDB Atlas: https://www.mongodb.com/atlas/database
MongoDB Atlas는 MongoDB를 설계한 사람들이 만든 모든 것을 관리하는 클라우드 데이터베이스다. AWS, Azure, GCP를 통해 배포에 관한 모든 것을 통합 관리해준다.
아틀라스 사용자는 클러스터를 배포할 수 있으며, 클러스터는 그룹화된 서버에 데이터를 저장한다. 여기서 몇 가지 용어에 대해 알아보자.
MongoDB는 도큐먼트 형식의 데이터베이스다. 여기서 도큐먼트는 필드-값 쌍
으로 구성된 데이터다. 일반적으로 도큐먼트 간의 공통 필드가 있으며, 이런 도큐먼트의 모음을 컬렉션이라고 부른다. MongoDB 데이터베이스는 여러 개의 컬렉션으로 구성되어 있다.
필드-값 쌍
으로 저장된 데이터shell을 이용하여 도큐먼트를 조회하거나 업데이트할 때, 도큐먼트는 JSON 형식으로 출력된다. JSON(JavaScript Object Notatioin)으로 작성된 문서는 중괄호({}
)로 감싸져야 하며, 필드와 값이 콜론(:
)으로 분리되어야 하고, 필드-값 쌍은 쉼표(,
)로 분리된다. 또 필드를 포함한 모든 문자열은 쌍따옴표(""
)로 감싸야한다. 아래 이미지는 JSON으로 작성된 데이터다.
JSON은 텍스트 형식이라 읽기 쉽다는 장점이 있지만, 파싱이 느리고 메모리 사용이 비효율적이며 사용할 수 있는 데이터 타입에 한계가 있다는 단점이 있다. 이런 JSON의 단점을 보완하기 위해 사용되는 것이 BSON이다. 아래 이미지는 BSON으로 작성된 데이터다.
BSON(Binary-JSON)은 이진법 기반의 데이터 저장 방법으로, 메모리 사용이 효율적이며 다양한 데이터 타입을 사용할 수 있다. MongoDB는 JSON으로 적힌 모든 데이터를 조회하거나 데이터베이스에 추가할 수 있지만 효율성을 위해 내부에서는 BSON으로 데이터를 저장하고 사용한다.
MongoDB의 데이터는 BSON 형태로 저장되고 JSON형태로 출력되기 때문에 상황에 맞게 데이터를 가져오고(import) 내보내야(export) 한다.
- mongoimport: 데이터베이스를 아틀라스 클러스터로 가져온다.(JSON/csv)
mongoimport --uri"<Atlas Cluster URI>" --drop=<filename>.json
- mongoexport: 클러스터에서 로컬 머신으로 데이터를 내보낸다. 내보낼 컬렉션과 파일의 이름을 정확히 명시해야 한다.
mongoexport --uri"<Atlas Cluster URI>" --collection=<collection name> --out=<filename>.json
- mongorestore: 로컬 머신에서 아틀라스 클러스터로 BSON 형식의 파일을 가져온다.
--drop
옵션으로 기존에 있는 데이터를 삭제할 수 있다.mongorestore --uri"<Atlas Cluster URI>" --drop dump
- mongodump: 아틀라스 클러스터 안에 있는 데이터베이스를 로컬 머신에 BSON 형식의 데이터로 내보낸다.
mongodump --uri"<Atlas Cluster URI>"