[TIL : 38] NoSQL : MongoDB

pearpearb·2022년 4월 22일
0

TIL

목록 보기
38/43

✔️ NoSQL은 어떨 때 사용했더라?

❓ NoSQL
관계형 테이블과는 다른 방식으로 데이터를 저장하는 데이터 저장소이다. 테이블을 행과 열이 아닌, 체계적인 방식(document, key-value, wide-column, graph 등)으로 저장한다.

1. 비구조적인 대용량의 데이터를 저장하는 경우

관계에 중점을 둔 SQL 데이터베이스보다 자유로운 형태로 데이터를 저장 가능하기 때문에 필요에 따라 새로운 데이터 유형을 추가할 수 있다.

2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우

NoSQL 데이터베이스는 데이터베이스를 클라우드 기반으로 쉽게 분리할 수 있도록 지원하기 때문에 저장공간을 효율적으로 사용할 수 있다. 또 시스템이 커지며 DB를 증설하는 시점에, NoSQL은 수평적 확장 형태로 증설해서 이론상 무한대로 서버를 분산시켜 증설이 가능하다.

3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우

스키마를 미리 준비할 필요가 없어 빠르게 개발에 들어갈 수 있다. 다운타임 없이 데이터 구조를 자주 업데이트 해야하는 경우 일일이 스키마를 수정해줄 필요가 없어 효율적이다.

✔️ MongoDB Document

🤓 MongoDB
MongoDB는 대표적인 NoSQL 도큐먼트 데이터베이스이다. 도큐먼트 데이터베이스는 데이터를 테이블이 아닌, 문서처럼 도큐먼트 형태로 저장한다. 각각의 도큐먼트는 데이터를 필드-값의 형태로 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어 관리한다.

📂 도큐먼트로 데이터를 어떻게 저장할까?

도큐먼트는 객체와 같이 데이터를 필드-값 쌍(Field - Value pair)으로 저장하고 구성한다.

이미지 출처 : mongodb

📂 키워드

  • Document : 필드-값 쌍으로 저장된 데이터이다. 도큐먼트의 모음이 컬렉션이 된다. 데이터베이스는 여러 개의 컬렉션으로 구성된다.
  • Field : 데이터 포인트를 위한 고유한 식별자이다.
  • Value : 주어진 식별자(필드)와 연결된 데이터이다.
  • Collenction : MongoDB document로 구성된 저장소이다. 일반적으로 도큐먼트 간 공통 필드가 있다. 데이터베이스 당 많은 컬렉션이 있고, 컬렉션 당 많은 도큐먼트가 있을 수 있다.

✔️ 도큐먼트를 올바르게 작성하는 방법

📎 JSON (JavaScript Object Notation)

shell을 이용하여 도큐먼트를 조회하거나 업데이트할 때, 도큐먼트는 JSON 형식으로 출력된다. JSON 형식으로 도큐먼트를 작성하기 위해서는 조건이 있다. 이 조건 중 하나라도 충족되지 않으면 유효한 도큐먼트가 아니다!

1. 중괄호{}로 도큐먼트가 시작하고, 끝나야 한다.
2. 필드와 값이 :콜론으로 분리되어야 하고, 필드와 값의 쌍은 쉼표,로 구분된다.
3. 문자열인 필드도 쌍따옴표""로 감싸야 한다.

⚡️ JSON 형식은 읽기 쉽고, 많은 개발자들이 사용하기 편리한 형태를 가지고 있다. 하지만 JSON 형식도 단점이 존재한다.

💥 텍스트 형식이기 때문에 읽기 쉽지만, 파싱이 느리고 메모리 사용이 비효율적이다.
💥 기본 데이터 타입만 지원하여, 사용할 수 있는 데이터 타입에 제약이 있다.

이러한 문제점을 해결하기 위해 BSON 형식을 도입했다.

📎 BSON (Binary JavaScript Object Notation)

컴퓨터 언어에 가까운 이진법에 기반을 둔 표현법이다. JSON보다 메모리 사용이 효율적이고, 빠르며, 가볍고, 유연하다. 또한 더 많은 데이터 타입을 사용할 수 있다.

MongoDB는 JSON형식으로 작성된 것은 무엇이든 데이터베이스에 추가할 수 있고, 조회가 가능하다. 하지만 내부적으로는 속도, 효율성, 유연성의 장점이 있는 BSON 형식으로 데이터를 저장, 사용하고 있다.

✔️ Atlas Cloud

MongoDB에서는 Atlas로 클라우드에 데이터베이스를 설정한다. GUI와 CLI로 데이터를 시각화, 분석, 내보내기, 빌드 하는데 사용할 수 있다.

아틀라스 사용자는 클러스터를 배포할 수 있고, 클러스터는 그룹화된 서버에 데이터를 저장한다. 이 서버는 레플리카 세트로 구성되어 있다. 이 레플리카 세트는 동일한 데이터를 저장하는 몇 개의 연결된 MongoDB 인스턴스의 모음이다.

도큐먼트나 컬렉션을 변경할 경우, 변경된 데이터의 중복 사본이 레플리카 세트에 저장된다. 이러한 설정 덕분에 레플리카 세트의 인스턴스 중 하나에 문제가 발생하더라도 데이터는 그대로 유지되고, 레플리카 세트의 어플리케이션에서 나머지 작업이 가능하다. 레플리카 세트는 클러스터(서버 그룹)을 배포하면 자동으로 구성된다.

📂 키워드

  • Replica set : 동일한 데이터를 저장하는 소수의 연결된 머신이다. 레플리카 세트 중 하나에 문제가 발생하더라도, 데이터를 그대로 유지하는 것이 가능하다.
  • Instance : 로컬 혹은 클라우드에서 큭정 소프트웨어를 실행하는 단일 머신이다. MongoDB의 경우, 데이터베이스를 이다.
  • Cluster : 데이터를 저장하는 서버그룹이다. 여러 대의 컴퓨터를 네트워크를 통해 연결해 하나의 단일 컴퓨터처럼 동작하도록 제작한 컴퓨터이다.

✔️ 도큐먼트 Importing & Exporting

MongoDB 데이터는 BSON 형태로 저장하고, 보통 JSON 형태로 출력된다.
예를 들어, 단순 백업 저장에는 가볍고 빠른 BSON 형식이 적절하고, 데이터를 내보낸 후 조회나 출력이 필요할 경우에는 사람이 읽기 쉬운 JSON 형식이 알맞다.

사용JSONBSON
가져오기mongoimportmongorestore
내보내기mongoexportmongodump

🛠 Importing 사용하기

삭제옵션 쿼리문(drop)을 선택적으로 적용할 수 있다.

in JSON

적용되는 데이터의 형식은 JSON 뿐 아니라, csv와 같은 데이터 형식일 수도 있다. 또한 컬렉션 이름을 지정하는 등 부가적인 옵션을 적용할 수 있다.

mongoimport --uri"Atlas Cluster URI" --drop=파일이름.json

in BSON

mongorestore --uri"Atlas Cluster URI"  --drop dump

🛠 Exporting 사용하기

in JSON

mongoexport의 경우 내보낼 컬렉션과 파일 이름을 명시해야 한다.

mongoexport --uri"Atlas Cluster URI" --collection=컬렉션 --out=파일이름.json

in BSON

mongodump --uri"Atlas Cluster URI" 
profile
it's me!:)

0개의 댓글