본문 바로가기
개발 공부/데이터베이스

NoSQL, MongoDB,MongoDB Document, JSON vs. BSON 개념 정리

by 크롱이크 2021. 8. 5.

NoSQL이란?

접근방식이 SQL과는 상반되는 데이터베이스 형식을 얘기하거나 또는 관계형데이터베이스 뿐만아니라

다른 특성 까지도 갖는 (Not only SQL) 으로 정의할 수 있다.

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

 

다음과 같은 특징을 같는다.

nosql 특징

1) RDBMS 처럼 고정된 스키마 및 JOIN이 존재하지 않는다.

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

2) 스키마 변경(ALTER)가 필요없다.

-스키마를 미리 준비할 필요가 없어서, 개발을 빠르게 해야하는 경우에 매우 적합하다.

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

3) 빅데이터 특화

시스템이 커지면서 DB를 증설해야 하는 시점이 오면, SQL 데이터베이스에서는 수직적 확장의 형태로 DB를 증설한다. 수직적으로 확장된 데이터베이스는 관리가 어려워질 수 있는데에 반해, NoSQL은 수평적 확장의 형태로 증설하므로, 이론상 무한대로 서버를 계속 분산시켜 DB를 증설할 수 있다.

 

nosql의 종류

1) Document

Document종류엔 대표적으로 MongoDB, CouchDB가 있다. 특징은 데이터를 Document라는 스토어에 json 형태로 저장한다.

형태만 지켜진다면 어떤 종류, 어떤 모양의 데이터든 저장이 가능하여 굉장히 유연하다고 볼 수 있다.

 

2) Key-valueDB

Key valueDB의 대표적인 예로는 CassandraDB(column wide database 유형), Redis, Riak가 있는데 key, value 형태의 데이터인 만큼 읽고 쓰기가 굉장히 빠르다. 그러나 문제는 어떤 데이터를 얻을것인가에 대한것에 조금 제한적이다.

 

3) GraphDB

GraphDB는 column이나 document가 필요없을 때, 그러나 각 노드사이의 관계를 알아야할 때 사용하는 데이터베이스이다.

예를 들자면, 인스타그램의 팔로우에 사용 되면 효율적일 것이다.

간략하게 봤듯이 NoSQL은 각각의 특화된 장점들이 존재한다. 그러나 한쪽에 특화 된 만큼 포기한 기능들도 많을 것이다.

상황에 맞게 골라서 쓰면 아주 높은 효율을 볼 수 있고 또 반대로 어떠한 데이터베이스 구조가 유용한지 모르고

첫 시작을 섣불리 NoSQL방식중 하나로 시작하는 것은 매우 위험하다.

 

4)wide-column

데이터는 열에 저장되며 데이터를 끝없이 저장하도록 확장됩니다. Cassandra 데이터베이스는 넓은 열 데이터베이스의 예입니다.

 

 

MongDB

몽고디비란?

nosql에서 가장 대표적인 데이터베이스이다.

 

Atlas Cloud

MongoDB에서는 아틀라스(Atlas)로 클라우드에 데이터베이스를 설정한다.

아틀라스는 GUI와 CLI로 데이터를 시각화, 분석, 내보내기, 그리고 빌드하는 데에 사용할 수 있다.

아틀라스 사용자는 클러스터를 배포 할 수 있으며, 클러스터는 그룹화된 서버에 데이터를 저장한다.

 

레플리카 세트

동일한 데이터를 저장하는 소수의 연결된 머신을 뜻한다.

레플리카 세트 중 하나에 문제가 발생하더라도, 데이터를 그대로 유지할 수 있다.

인스턴스

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

클러스터

데이터를 저장하는 서버 그룹으로 여러 대의 컴퓨터를 네트워크를 통해 연결하여 하나의 단일 컴퓨터처럼 동작하도록 제작한 컴퓨터를 뜻한다.

 

MongoDB Document

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

도큐먼트에서 필드는 데이터의 고유한 식별자이고, 값은 주어진 식별자와 관련된 데이터를 뜻한다.

1) document

필드 - 값 쌍으로 저장된 데이터

2) Field

데이터 포인트를 위한 고유한 식별자

3) Value

주어진 식별자와 연결된 데이터

4) Collection

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

 

JSON vs. BSON

JSON

도큐먼트를 shell을 이용하여 조회하거나 업데이트 할 때, 도큐먼트는 JSON(JavaScript Object Notation)형식으로 출력된다.
JSON 형식으로 도큐먼트를 작성하기 위해서는 아래와 같은 조건을 만족해야 한다.

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

올바른 JSON 형식으로 작성된 예시

 

JSON 형식의 단점 

1. 텍스트 형식이라서 읽기 쉬우나 파싱이 매우 느리고 메모리 사용이 비효율적이다.
2. JSON이 기본 데이터 타입만을 지원하기 때문에 사용 할 수 있는 타입에 제한이 있다.

 

BSON

JSON의 단점을 해결하기 위한 방안으로 풀네임은 Binary JavaScript Object Notation.
컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현법이다.

3가지 특성 : 경량, 순회가능, 효율성 

특성확인하: https://bsonspec.org/

 

BSON은 컴퓨터의 언어에 가까운 이진법에 기반을 둔 표현법이다.

따라서 JSON 보다 메모리 사용이 효율적이며 빠르고, 가볍고, 유연하다
뿐만 아니라, BSON의 사용으로 더 많은 데이터 타입을 사용할 수 있다.

 

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

 

 

반응형

댓글