❓ NoSQL
관계형 테이블과는 다른 방식으로 데이터를 저장하는 데이터 저장소이다. 테이블을 행과 열이 아닌, 체계적인 방식(document, key-value, wide-column, graph 등)으로 저장한다.
관계에 중점을 둔 SQL 데이터베이스보다 자유로운 형태로 데이터를 저장 가능하기 때문에 필요에 따라 새로운 데이터 유형을 추가할 수 있다.
NoSQL 데이터베이스는 데이터베이스를 클라우드 기반으로 쉽게 분리할 수 있도록 지원하기 때문에 저장공간을 효율적으로 사용할 수 있다. 또 시스템이 커지며 DB를 증설하는 시점에, NoSQL은 수평적 확장 형태로 증설해서 이론상 무한대로 서버를 분산시켜 증설이 가능하다.
스키마를 미리 준비할 필요가 없어 빠르게 개발에 들어갈 수 있다. 다운타임 없이 데이터 구조를 자주 업데이트 해야하는 경우 일일이 스키마를 수정해줄 필요가 없어 효율적이다.
🤓 MongoDB
MongoDB는 대표적인 NoSQL 도큐먼트 데이터베이스이다. 도큐먼트 데이터베이스는 데이터를 테이블이 아닌, 문서처럼 도큐먼트 형태로 저장한다. 각각의도큐먼트
는 데이터를필드-값
의 형태로 가지고 있고,컬렉션
이라고 하는 그룹으로 묶어 관리한다.
도큐먼트는 객체와 같이 데이터를 필드-값 쌍(Field - Value pair)으로 저장하고 구성한다.
이미지 출처 : mongodb
Document
: 필드-값 쌍으로 저장된 데이터이다. 도큐먼트의 모음이 컬렉션이 된다. 데이터베이스는 여러 개의 컬렉션으로 구성된다.Field
: 데이터 포인트를 위한 고유한 식별자이다.Value
: 주어진 식별자(필드)와 연결된 데이터이다.Collenction
: MongoDB document로 구성된 저장소이다. 일반적으로 도큐먼트 간 공통 필드가 있다. 데이터베이스 당 많은 컬렉션이 있고, 컬렉션 당 많은 도큐먼트가 있을 수 있다.shell을 이용하여 도큐먼트를 조회하거나 업데이트할 때, 도큐먼트는 JSON 형식으로 출력된다. JSON 형식으로 도큐먼트를 작성하기 위해서는 조건이 있다. 이 조건 중 하나라도 충족되지 않으면 유효한 도큐먼트가 아니다!
{}
로 도큐먼트가 시작하고, 끝나야 한다.:
콜론으로 분리되어야 하고, 필드와 값의 쌍은 쉼표,로 구분된다.""
로 감싸야 한다.컴퓨터 언어에 가까운 이진법에 기반을 둔 표현법이다. JSON보다 메모리 사용이 효율적이고, 빠르며, 가볍고, 유연하다. 또한 더 많은 데이터 타입을 사용할 수 있다.
MongoDB는 JSON형식으로 작성된 것은 무엇이든 데이터베이스에 추가할 수 있고, 조회가 가능하다. 하지만 내부적으로는 속도, 효율성, 유연성의 장점이 있는 BSON 형식으로 데이터를 저장, 사용하고 있다.
MongoDB에서는 Atlas로 클라우드에 데이터베이스를 설정한다. GUI와 CLI로 데이터를 시각화, 분석, 내보내기, 빌드 하는데 사용할 수 있다.
아틀라스 사용자는 클러스터를 배포할 수 있고, 클러스터는 그룹화된 서버에 데이터를 저장한다. 이 서버는 레플리카 세트로 구성되어 있다. 이 레플리카 세트는 동일한 데이터를 저장하는 몇 개의 연결된 MongoDB 인스턴스의 모음이다.
도큐먼트나 컬렉션을 변경할 경우, 변경된 데이터의 중복 사본이 레플리카 세트에 저장된다. 이러한 설정 덕분에 레플리카 세트의 인스턴스 중 하나에 문제가 발생하더라도 데이터는 그대로 유지되고, 레플리카 세트의 어플리케이션에서 나머지 작업이 가능하다. 레플리카 세트는 클러스터(서버 그룹)을 배포하면 자동으로 구성된다.
Replica set
: 동일한 데이터를 저장하는 소수의 연결된 머신이다. 레플리카 세트 중 하나에 문제가 발생하더라도, 데이터를 그대로 유지하는 것이 가능하다.Instance
: 로컬 혹은 클라우드에서 큭정 소프트웨어를 실행하는 단일 머신이다. MongoDB의 경우, 데이터베이스를 이다.Cluster
: 데이터를 저장하는 서버그룹이다. 여러 대의 컴퓨터를 네트워크를 통해 연결해 하나의 단일 컴퓨터처럼 동작하도록 제작한 컴퓨터이다.MongoDB 데이터는 BSON 형태로 저장하고, 보통 JSON 형태로 출력된다.
예를 들어, 단순 백업 저장에는 가볍고 빠른 BSON 형식이 적절하고, 데이터를 내보낸 후 조회나 출력이 필요할 경우에는 사람이 읽기 쉬운 JSON 형식이 알맞다.
사용 | JSON | BSON |
---|---|---|
가져오기 | mongoimport | mongorestore |
내보내기 | mongoexport | mongodump |
삭제옵션 쿼리문(drop)을 선택적으로 적용할 수 있다.
적용되는 데이터의 형식은 JSON 뿐 아니라, csv와 같은 데이터 형식일 수도 있다. 또한 컬렉션 이름을 지정하는 등 부가적인 옵션을 적용할 수 있다.
mongoimport --uri"Atlas Cluster URI" --drop=파일이름.json
mongorestore --uri"Atlas Cluster URI" --drop dump
mongoexport의 경우 내보낼 컬렉션과 파일 이름을 명시해야 한다.
mongoexport --uri"Atlas Cluster URI" --collection=컬렉션 --out=파일이름.json
mongodump --uri"Atlas Cluster URI"