[DB] NoSQL MongoDB Basic
DataBase

[DB] NoSQL MongoDB Basic

반응형

NoSQL MongoDB Basic에 대해 공부를 하게 되었는데 거기에대한 배경지식은 이해가 되었지만 MongoDB CRUD 사용하는법, 즉 활용하는것에 대한것은 PPT파일로 보여주고 실습은 없어서 크게 와닿지 않아 감이 없다. 결국 공식문서에 개념을 실행 시키는 것 뿐이고 실습부분은 빠져서 아쉽다.. create, read update, 비교연산자 등 크게 어려운 부분은 아니지만 이 부분은 써야하거나 필요할 상황이 될 때 공부하는 것이 더 효율적이라 생각은 들었다..

이 내용이 연계되어서 코스 도중에 나오면 힘드려나..? 라는 생각이 들지만 눈에만 익히고 넘어가서 공부가 필요하다 싶으면 그 때 뒤이어 작성 하면서 공부를 해야겠다.

 

 

 

NoSQL Database

NoSQL 데이터베이스에서는 데이터를 행과 열이 아닌, 체계적인 방식으로 저장합니다.

NoSQL은 매우 넓은 범위에서 사용하는 용어로, 관계형 테이블의 레거시한 방법을 사용하지 않는 데이터 저장소를 말합니다.

 

MongoDB는 NoSQL 도큐먼트 데이터베이스입니다. MongoDB는 데이터를 도큐먼트의 형태로 저장합니다.
도큐먼트는 컬렉션에 저장되며, 이것이 MongoDB가 NoSQL 도큐먼트 데이터베이스로 분류되는 이유입니다.

 

 

 

NoSQL 기반의 비관계형 데이터베이스 사용하는 경우

 

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

NoSQL 데이터베이스는 관계에 중점을 둔 SQL 데이터베이스보다 자유로운 형태로 데이터를 저장할 수 있으므로 필요에 따라서 새로운 데이터 유형을 추가할 수 있습니다. 소프트웨어 개발에 정형화되지 않은 많은 양의 데이터가 필요한 경우, NoSQL이 효율적일 수 있습니다.

 

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

NoSQL 데이터베이스는 데이터베이스를 클라우드 기반으로 쉽게 분리 할 수 있도록 지원하여, 저장 공간을 효율적으로 사용합니다. 시스템이 커지면서 DB를 증설해야 하는 시점이 오면, SQL 데이터베이스에서는 수직적 확장의 형태로 DB를 증설합니다. 수직적으로 확장된 데이터베이스는 관리가 어려워질 수 있는데에 반해, NoSQL은 수평적 확장의 형태로 증설하므로, 이론상 무한대로 서버를 계속 분산시켜 DB를 증설할 수 있습니다.

 

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

NoSQL 데이터베이스의 경우 스키마를 미리 준비할 필요가 없어서, 개발을 빠르게 해야하는 경우에 매우 적합합니다. 시장에 빠르게 프로토타입을 출시해야 하는 경우나, 소프트웨어 버전별로 많은 다운타임(데이터베이스의 서버를 오프라인으로 전환하여 작업하는 시간) 없이 데이터 구조를 자주 업데이트 해야하는 경우에는 일일이 스키마를 수정해주어야 하는 관계형 데이터베이스 보다 NoSQL 기반의 비관계형 데이터베이스가 더 효율적입니다.

 

 

 

Atlas Cloud

 

MongoDB에서는 아틀라스(Atlas)로 클라우드에 데이터베이스를 설정합니다.
아틀라스는 GUI와 CLI로 데이터를 시각화, 분석, 내보내기, 그리고 빌드하는 데에 사용할 수 있습니다. 아틀라스 사용자는 클러스터를 배포 할 수 있으며, 클러스터는 그룹화된 서버에 데이터를 저장합니다.

 

이 서버는 레플리카 세트(Replica set)로 구성되어 있으며, 레플리카 세트는 동일한 데이터를 저장하는 몇 개의 연결된 MongoDB 인스턴스의 모음입니다.

 

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

더보기

용어 정리

  • 레플리카 세트
    동일한 데이터를 저장하는 소수의 연결된 머신을 뜻합니다. 레플리카 세트 중 하나에 문제가 발생하더라도, 데이터를 그대로 유지할 수 있습니다.
  • 인스턴스
    로컬 또는 클라우드에서 특정 소프트웨어를 실행하는 단일 머신, MongoDB에서는 데이터베이스입니다.
  • 클러스터
    데이터를 저장하는 서버 그룹으로 여러 대의 컴퓨터를 네트워크를 통해 연결하여 하나의 단일 컴퓨터처럼 동작하도록 제작한 컴퓨터를 뜻합니다.

 

Atlas Cluster 생성하기

더보기

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. 맨 오른쪽 FREE라고 써진 옵션의 Create a cluster를 누릅니다.
  9.  Cloud Provider & Region에서 현재 위치에서 가장 가까운 지역을 선택한 뒤 Create Cluster를 누릅니다. 이 작업은 1-2분 정도 소요될 수 있습니다.
  10. 현재 위치에서 가장 가까운 지역을 선택, Create Cluster 선택

 

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

 

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

 

 

MongoDB Document

 

MongoDB에서 도큐먼트가 무엇인지, 도큐먼트로 데이터를 어떻게 체계적인 방법으로 저장하는지

도큐먼트는 객체와 같이 데이터를 필드-값 쌍(Field - Value pair)으로 저장하고 구성합니다.
도큐먼트에서 필드는 데이터의 고유한 식별자이고, 값은 주어진 식별자와 관련된 데이터를 뜻합니다.

name이란 필드의 값은 kimcoding입니다. 이러한 도큐먼트의 모음을 컬렉션이라고 합니다. 그리고 데이터베이스는 여러개의 컬렉션으로 구성됩니다.

더보기

용어 정리

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

 

 

JSON <-> BSON

도큐먼트(Document)를 올바르게 작성하는 방법과 표현 되는 방법

 

shell을 이용하여 도큐먼트를 조회하거나 업데이트 할 때, 도큐먼트는 JSON(JavaScript Object Notation) 형식으로 출력됩니다.

JSON 형식으로 도큐먼트를 작성하기 위해서는, 다음과 같은 조건을 만족해야 합니다.

  1. {} 중괄호로 도큐먼트가 시작하고, 끝나야 합니다.
  2. 필드와 값이 콜론(:)으로 분리되어야 하며, 필드와 값을 포함하는 쌍은 쉼표(,)로 구분됩니다.
  3. 문자열인 각 필드는 쌍따옴표("")로 감싸야 합니다.


이 조건 중 어느 하나라도 충족되지 않는다면, 이는 유효한 도큐먼트가 아닙니다.

 

JSON 형식은 읽기 쉽고, 많은 개발자들이 사용하기 편리한 형태를 가지고 있어서 JSON 형식은 데이터를 저장하는 좋은 방법 중 하나입니다. 하지만 데이터를 저장할 때 단점도 존재합니다.

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

항상 이에 대한 해결점은 항상 존재 하는 듯합니다. 그 해결 방안이 BSON(Binary JSON) 형식을 도입하였습니다.

BSON은 컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현법입니다. 따라서 JSON 보다 메모리 사용이 효율적이며 빠르고, 가볍고, 유연합니다. BSON의 사용으로 더 많은 데이터 타입을 사용할 수 있습니다.

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

 

 

Importing & Exporting

mongoimport는 데이터베이스를 아틀라스 클러스터로 가져올 수 있도록 합니다. 이 때 데이터는 JSON 일 수도 있고, 지원되는 다른 데이터 형식일 수도 있습니다.

 

mongoexport는 JSON 형식의 데이터를 아틀라스 클러스터에서 내보낼 때 사용합니다. 단, 내보낼 때 아틀라스 클러스터에 컬렉션을 더하는 대신, 아틀라스 클러스터 외부에 데이터 복사본을 만듭니다.

 

 

반응형

'DataBase' 카테고리의 다른 글

[ORM] TypeOrm setting  (0) 2022.03.25
[ORM] Sequelize 사용과제 (Node.js ORM)  (0) 2021.07.29
[DB] ORM, MVC에 대해서  (0) 2021.07.29
[DB] SQL 정리  (0) 2021.07.27
[DB] 설계 (Schema & Query Design) / SQL 함수, 실행순서  (0) 2021.07.23