[TIL] Day55- NoSQL

공부중인 개발자·2021년 6월 25일
0

TIL

목록 보기
55/64
post-thumbnail

NoSQL

NoSQL 데이터베이스란?

NoSQL 데이터베이스는 특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 데이터베이스
현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖추고 있다.
기존의 관계형 DBMS가 갖고있는 특성 뿐만 아니라 다른 특성들을 부가적으로 지원한다는 것을 의미
RDBMS가 클라이언트/서버 환경에 맞는 데이터 저장기술이라면, NoSQL은 클라우드 환경에 맞는 저장 기술

NoSQL 데이터베이스를 사용해야 하는 이유

NoSQL 데이터베이스는 탁월한 사용자 경험을 제공하기 위하여 유연성과 확장성을 비롯해 고성능의 매우 기능적인 데이터베이스를 필요로 하는 모바일, 웹이나 게이밍과 같은 다양한 현대적인 애플리케이션에 적합

  • 유연성: NoSQL 데이터베이스는 일반적으로 유연한 스키마를 제공하여, 보다 빠르고 반복적인 개발을 가능
    유연한 데이터 모델은 NoSQL 데이터베이스를 반정형 및 데이터에 이상적으로 만들어 줌

  • 확장성: NoSQL 데이터베이스는 일반적으로 고가의 강력한 서버를 추가하는 대신 분산형 하드웨어 클러스터를 이용해 확장하도록 설계
    일부 클라우드 제공자들은 완전 관리형 서비스로서 이런 운영 작업을 보이지 않게 처리

  • 고성능: NoSQL 데이터베이스는 특정 데이터 모델(문서, 키 값, 그래프 등) 및 엑세스 패턴에 대해 최적화되어 관계형 데이터베이스를 통해 유사한 기능을 충족하려 할 때보다 뛰어난 성능을 얻게 됨

  • 고기능성: NoSQL 데이터베이스는 각 데이터 모델에 맞추어 특별히 구축된 뛰어난 기능의 API와 데이터 유형을 제공

NoSQL의 특징

  • NoSQL은 RDBMS와는 달리 데이터 간의 관계를 정의 X

계형 데이터 베이스인 RDBMS가 데이터의 관계를 Foreign Key 등으로 정의하고 이를 이용해 Join 등의 관계형 연산을 한다고 하면, NoSQL은 데이터 간의 관계를 정의하지 않는다.
데이터 테이블은 그냥 하나의 테이블이며 각 테이블 간의 관계를 정의하지 않고 일반적으로 테이블 간의 Join도 불가능

  • RDBMS에 비해 훨씬 더 대용량의 데이터를 저장할 수 있다.

RDBMS의 복잡도와 용량의 한계를 극복하기 위한 목적으로 등장한 만큼 페타바이트급의 대용량 데이터를 저장할 수 있다.

  • 분산형 구조

기존 RDBMS와는 다르게 하나의 고성능 머신에 데이터를 저장하는 것이 아니라 일반적인 서버 수십 대를 연결해 데이터를 저장 및 처리하는 구조
분산형 구조를 통해 데이터를 여러 대의 서버에 분산해 저장하고 분산 시에 데이터를 상호 복제해 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 구조의 형태

  • 고정되지 않은 테이블 스키마

RDBMS와는 다르게 테이블의 스키마가 유동적, 데이터를 저장하는 컬럼은 각기 다른 이름과 다른 데이터 타입을 갖는 것이 허용

스키마란? 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합

참조사이트
https://lygggg.github.io/blog/NoSql/


MongoDB

MongoDB는 NoSQL 데이터베이스
MongoDB 데이터베이스는 NoSQL 도큐먼트 데이터베이스

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

  • 레플리카 세트
    동일한 데이터를 저장하는 소수의 연결된 머신은 그 중 하나에 문제가 발생하더라도, 데이터를 그대로 유지합니다.

  • 인스턴스
    로컬 또는 클라우드에서 특정 소프트웨어를 실행하는 단일 머신, MongoDB에서는 데이터베이스입니다.

  • 클러스터
    데이터를 저장하는 서버 그룹

MongoDB Document

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

  • 도큐먼트(Document)
    필드 - 값 쌍으로 저장된 데이터

  • 필드(Field)
    데이터 포인트를 위한 고유한 식별자

  • 값(Value)
    주어진 식별자와 연결된 데이터

  • 컬렉션(Collection)
    MongoDB의 도큐먼트로 구성된 저장소
    일반적으로 도큐먼트 간의 공통 필드가 있다.
    데이터베이스 당 많은 컬렉션이 있고, 컬렉션 당 많은 도큐먼트가 있을 수 있다.

Importing & Exporting

데이터를 가져오거나(import), 내보내는(export) 경우에 따라 효율적인 데이터 형식이 존재

MongoDB의 데이터는 BSON의 형태로 저장이 되고, 보통 읽기 쉬운 JSON의 형태로 출력
JSON은 기존에 사용하던 문자열 방식이고 BSON은 이진법형식으로 데이터를 전송

단순히 백업 저장을 하기 위해서라면 가볍고 빠른 BSON의 형태

데이터를 내보낸 후, 조회를 하거나 출력을 해야한다면 사람이 읽기 쉬운 JSON의 형식

조건에 따라, 가져오거나 내보낼 때 사용 가능한 명령어가 각각 존재

JSON 형식으로 데이터를 가져오고 내보내기 위한 명령어인 mongoimport와 mongoexport
BSON 형식으로 가져오고 내보내기 위한 명령어 mongorestore와 mongodump

  • Export

BSON 과 JSON으로 데이터를 내보내기 위해선 Atlas Cluster 가 필요함
해당 URI는 일반 웹의 URI와 형식이 같고, username, password, cluster 주소로 이루어짐

mongodump 의 경우(BSON)

mongodump --uri "monggodb+srv://<username>:<userpassword>@<cluster>.mongodb.net/database_name"

mongoexport 의 경우(JSON)

mongoexport --uri""monggodb+srv://<username>:<userpassword>@<cluster>.mongodb.net/database_name" 
--collections=<collection name> 
--out=<filename>.json

이렇게 작성하면 dump라는 폴더에 데이터베이스 폴더가 생성되고 그 안에 .bson & .json 파일이 생긴다.

  • Import

import 의 경우도 mongorestore 과 mongoimport로 export와 유사하다.

mongorestore의 경우(BSON)
아틀라스 클러스터 입장에서는 로컬 머신으로 내보냈던 dump 파일을 다시 가져가는 개념
터미널에 done이라고 표시 되면서 mongorestore가 완료

mongodump --uri "monggodb+srv://<username>:<userpassword>@<cluster>.mongodb.net/database_name" 
--drop dump

mongoimport 의 경우(JSON)
mongoimport는 데이터베이스를 다시 아틀라스 클러스터로 가져올 수 있게함

mongoexport --uri""monggodb+srv://<username>:<userpassword>@<cluster>.mongodb.net/database_name" 
--drop=<filename>.json

낯섦이란게 어려움으로 다가가지 않도록 노력하자.

profile
열심히 공부하자

0개의 댓글