[DB] MongoDB와 Atlas Cloud

somin·2021년 9월 3일
2

Database

목록 보기
7/8

MongoDB

  • 대표적인 NoSQL 도큐먼트 데이터베이스로, 데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스
    *NoSQL : 매우 넓은 범위에서 사용하는 용어로, 관계형 테이블의 레거시한 방법을 사용하지 않는 데이터 저장소를 의미
  • JSON 유사 형식으로 데이터를 문서화
  • 각각의 도큐먼트는 데이터를 필드-값 의 형태로 가지고 있고, 컬렉션이라고 하는 그룹으로 묶어서 관리

1. MongoDB Document

  • 도큐먼트는 객체와 같이 데이터를 필드-값 쌍(Field - Value pair)으로 저장하고 구성
  • 도큐먼트에서 필드는 데이터의 고유한 식별자이고, 값은 주어진 식별자와 관련된 데이터를 의미
  • 모든 도큐먼트는 _id 필드를 기본값으로 반드시 가지고 있어야 함
  • _id 필드의 값은 각 도큐먼트를 구별하는 역할을 하며 도큐먼트 내 필드와 값이 똑같다 할지라도, _id 값이 다르면 서로 다른 도큐먼트로 간주
  • 도큐먼트 내 필드와 값이 다르다고 하더라도, _id값이 같으면 서로 같은 도큐먼트로 여겨 에러를 발생
  • 데이터베이스는 여러개의 컬렉션으로 구성됨

    관련 용어

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

2. MongoDB의 데이터

  • MongoDB의 데이터는 BSON의 형태로 저장이 되고, 보통 읽기 쉬운 JSON의 형태로 출력
    *JSON형식으로 작성된 것은 무엇이든 데이터베이스에 추가할 수 있고, 쉽게 조회할 수 있으나 그 내부에서는 속도, 효율성, 유연성의 장점이 있는 BSON으로 데이터를 저장 및 사용
  • 단순히 백업 저장을 하기 위해서라면 가볍고 빠른 BSON의 형태를 사용하는 것이 유리하지만, 데이터를 내보낸 후 조회를 하거나 출력을 해야한다면 사람이 읽기 쉬운 JSON의 형식이 바람직
    *import, export 명령어가 각기 존재

1) JSON

JSON 형식으로 도큐먼트를 작성하기 위한 조건

  • {} 중괄호로 도큐먼트가 시작하고, 끝나야 함
  • 필드와 값이 콜론(:)으로 분리되어야 하며, 필드와 값을 포함하는 쌍은 쉼표(,)로 구분
  • 문자열인 필드도 쌍따옴표("")로 감싸야 함
{
  "name":"KKAKKA",
  "age":7
}
  • mongo shell을 이용하여 도큐먼트를 조회하거나 업데이트 할 때, 도큐먼트는 JSON(JavaScript Object Notation) 형식으로 출력
    *mongo shell : GUI(Graphical User Interface) 사용 없이 MongoDB 아틀라스 클러스터와 상호작용할 수 있으며, 자바스크립트 인터프리터로 작동
  • JSON 형식은 읽기 쉽고 사용하기 편리하지만, 텍스트 형식이기에 파싱이 느리고 메모리 사용이 비효율적이며 JSON은 기본 데이터 타입만을 지원하기에 사용 할 수 있는 데이터 타입이 제한적
    *이런 문제점을 해결하기 위한 방안으로 BSON(Binary JSON) 형식을 도입

2) BSON

  • 컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현법
  • JSON 보다 메모리 사용이 효율적이고 유연하며 BSON의 사용으로 더 많은 데이터 타입을 사용할 수 있게 됨

3) export 명령어

  • export 명령어를 사용하려면 Atlas Cluster URI가 필요
  • 해당 URI는 일반 웹의 URI와 형식이 같고, username, password, cluster 주소로 이루어져 있음

(1) JSON : mongoexport

mongoexport --uri "Atlas Cluster URI"
	    --collection=collection_name
	    --out=filename.json
  • JSON 형식의 데이터를 아틀라스 클러스터에서 내보낼 때 사용
  • 내보낼 때 아틀라스 클러스터에 컬렉션을 더하는 대신, 아틀라스 클러스터 외부에 데이터 복사본을 만듦
  • 해당 데이터베이스의 컬렉션 이름, 파일 이름까지 정확하게 작성해줘야 함

(2) BSON : mongodump

mongodump --uri "Atlas Cluster URI"
  • BSON 형식의 데이터를 내보낼 때 사용
  • 별다른 쿼리가 없음

4) import 명령어

  • URI를 사용해서 작성되며, 기존에 있는 데이터를 삭제하기 위한 옵션인 drop 쿼리문은 선택적으로 사용

(1) JSON : mongoimport

mongoimport --uri "Atlas Cluster URI"
	    --drop=filename.json
  • 데이터베이스를 다시 아틀라스 클러스터로 가져올 수 있게 함
    *저장된 컬렉션을 아틀라스 클러스터(Atlas Cluster)에 추가
  • 적용되는 데이터의 형식은 JSON 뿐 아니라, csv와 같은 데이터 형식일 수도 있음
  • 컬렉션 이름을 지정하는 등의 부가적인 옵션을 추가 할 수 있음

(2) BSON : mongorestore

mongorestore --uri "Atlas Cluster URI"
	     --drop dump
  • mongodump가 생성한 BSON 형식의 데이터를 가지고 옴
  • 아틀라스 클러스터 입장에서는 로컬 머신으로 내보냈던 dump 파일을 다시 가져가는 개념
  • 터미널에 done이라고 표시 되면서 mongorestore가 완료된 것

2. Atlas Cloud

1) 개념

  • MongoDB에서는 아틀라스(Atlas)로 클라우드에 데이터베이스를 설정
  • 아틀라스 : GUI와 CLI로 데이터를 시각화, 분석, 내보내기, 그리고 빌드하는 데에 사용
  • 아틀라스 사용자는 클러스터를 배포 할 수 있으며, 클러스터는 그룹화된 서버에 데이터를 저장
  • 해당 서버는 레플리카 세트(Replica set)로 구성되어 있으며, 레플리카 세트는 동일한 데이터를 저장하는 몇 개의 연결된 MongoDB 인스턴스의 모음을 의미
  • 인스턴스 : 특정 소프트웨어를 실행하는 로컬 또는 클라우드의 단일 머신
  • 이 경우에 인스턴스는 클라우드에서 실행되는 MongoDB 데이터베이스를 의미

클러스터 배포

  • 클러스터 : 인스턴스들의 모임(데이터를 저장하는 서버 그룹)으로, 여러 대의 컴퓨터를 네트워크를 통해 연결하여 하나의 단일 컴퓨터처럼 작동
    *클러스터를 이용하여 배포할 경우, 이는 자동으로 레플리카 세트를 생성
  • 레플리카 세트 : 데이터의 사본을 저장하는 인스턴스의 모음으로, 인스턴스 중 하나에 문제가 발생하더라도 데이터는 유지되며 나머지 레플리카 세트의 인스턴스에 저장된 데이터로 작업 가능
    *도큐먼트나 컬렉션을 변경할 경우, 변경된 데이터의 중복 사본이 레플리카 세트에 저장됨

2) Atlas Cluster 생성하기

(1) Create an Organization 선택

(2) 원하는 Organization 이름을 입력

  • Cloud Service가 MongoDB Atlas로 되어 있는 지 확인하고 다음으로 넘어감

(3) Create Organization 클릭

(4) New Project 클릭

(5) 프로젝트의 이름을 지정

(6) Create Project 클릭

(7) Build a Cluster 클릭

(8) Create a cluster 클릭

  • FREE라고 써진 옵션의 Create a cluster 선택

(9) 가장 가까운 지역 선택

  • Cloud Provider & Region에서 현재 위치에서 가장 가까운 지역을 선택

(9) Create Cluster 클릭

  • Atlas 클러스터가 생성되었으니 IP 주소에 대한 액세스 권한을 부여하고 데이터베이스의 유저를 생성해야 함

    Atlas 클러스터가 생성 완료 후

    1. 클러스터 화면에서 Connect를 선택하여 클러스터 연결을 완료
    2. 오른쪽에 Allow Access from Anywhere을 선택한 후 Add IP Address를 클릭하여 선택 사항을 확인
      *Allowing access from anywhere는 보안상 위험할 수 있으므로 프로덕션 단계에서 사용되는 클러스터는 이 기능이 활성화되어있지 않아야함
    3. 데이터베이스에서 사용할 유저네임과 비밀번호를 입력한 뒤 Create Database User 클릭
    4. Connect with the mongo shell을 클릭하여 아래에 적힌 순서대로 명령을 실행
      *터미널에서 해당 데이터베이스에 접근 가능

profile
✏️

0개의 댓글