[Database] NoSQL과 MongoDB

DAUN JO·2021년 12월 2일
0

TIL

목록 보기
15/17
post-thumbnail

NoSQL과 MongoDB

MongoDB를 사용하게 될 수도 있을 것 같아 NoSQLMongoDB에 대해 정리해보았다!


NoSQL이란?

NoSQL은 Not Only SQL, 즉 SQL을 사용하는 RDBMS가 아닌 데이터베이스를 의미한다.
대표적인 RDBMS로는 MySQL, Oracle, PostgreSQL 등이 있고, NoSQL 진영에는 MongDB, Redis, HBase 등이 있다.



왜 RDBMS가 아닌 NoSQL를 사용할까?

보통 서비스들은 RDBMS를 기본으로 사용했지만 소셜 SNS를 비롯한 온라인 서비스들이 등장하면서 비정형 데이터를 쉽게 담아서 처리할 수 있는 DB에 대한 수요가 생겼다.

또한 클라우드, 분산형 컴퓨팅이 주목받고 있는데 SQL은 이에 적합하지 않다. SQL은 강력한 정보 저장 수단이지만 다양한 환경과 분산 컴퓨팅 추세에 따라 SQL의 약점이 나타나게 된 것이다.

그래서 이러한 약점을 보완할 수 있는 NoSQL이 각광을 받게 되었다.


NoSQL은 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID를 지키지 않고, BASE를 선택했다. 뛰어난 확장성이나 성능 등 특성을 갖는 비관계형 데이터 베이스이다.

이는 단순 검색 및 추가 작업에 있어서 매우 최적화된 키 값 저장 기법을 사용하며 응답속도나 처리 효율등에 있어서 매우 뛰어난 성능을 나타낸다.



ACID와 BASE

ACID

DB 트랜잭션이 안전하게 수행됨을 보장한다.

  • 원자성(Atomicity)
    • 트랜잭션과 관련된 작업이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력
  • 일관성(Consistency)
    • 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 DB 상태로 유지하는 것을 의미
  • 고립성(Isolation)
    • 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미
  • 지속성(Durability)
    • 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미한다.

BASE

ACID와 대조적으로 가용성과 성능을 중시하는 분산 시스템의 특성이다

  • Base Available
    부분적인 고장은 있을 수 있으나, 나머지는 사용이 가능하다
    주 서버가 안되더라도 백업 서버는 동작한다

  • Soft State
    노드의 상태는 외부에서 전송된 정보를 통해 결정됨
    분산 노드 간 업데이트는 데이터가 노드에 도달한 시점에 갱신되고
    최신 상태의 데이터로 덮어써진다

  • Eventually Consistent
    일시적으로 비일관적인 상태가 되어도 최적으로는 일관성이 있는 상태가 되는 성질
    시스템 부하, 네트워크 속도 등의 외부 요인으로 인해 일관성이 일시적으로 깨질 수 있음



NoSQL과 RDBMS의 차이

RDBMS

SQL은 각 테이블 간의 관계 지정을 통해 테이블을 접근할 수 있고, 따라서 중복 없이 해당 데이터만을 다룰 수 있다

  • 데이터의 분류, 정렬, 탐색 속도가 비교적 빠르다
  • SQL이라는 구조화 된 질의를 통해 데이터를 다룰 수 있다
  • 스키마 규격에 맞춰 데이터를 다뤄야 한다
  • 스키마가 정해져 있기 때문에, 명확한 데이터 구조를 보장함(데이터 무결성 보장)
  • 데이터를 중복없이 한 번만 저장할 수 있다
  • 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있다

NoSQL

보통 하나의 컬렉션에 관련 데이터를 모두 작성한다. 이 컬렉션 만으로 원하는 데이터를 모두 볼 수 있다. 다만 SQL과 다르게 중복된 데이터가 생기게 된다. 그래서 데이터 업데이트시 주의해야 한다.

  • 테이블 관의 관계(JOIN)가 없다
  • RDBMS보다 복잡하지 않아서 대용량의 데이터를 저장, 관리할 수 있다
  • 스키마가 없어 데이터 저장이 유연하고 자유롭다
  • 스키마가 없어 명확한 데이터 구조를 보장하지 않는다
  • 수평적 확장이 RDBMS보다는 쉬움
  • 데이터 중복이 발생할 수 있고 데이터 변경 시 모든 컬렉션에서 수정을 수행해야 한다



NoSQL의 특징

  • 유연성 : 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조다.
  • 확장성 : 스케일 아웃에 의한 서버 확장이 용이하다.
  • 고성능 : 대용량 데이터를 처리하는 성능이 뛰어나다.
  • 가용성 : 여러 대의 백업 서버 구성이 가능하여 장애 발생 시에도 무중단 서비스가 가능하다.



NoSQL의 종류

  1. Key-Value DB
    데이터가 Key-Value 쌍으로 저장되고 Key에는 어떠한 형태의 데이터도 담을 수 있다.
    간단한 API를 제공하는 만큼 속도가 빠르다.
    ex) Redis, Riak, Amazon Dynamo DB

  2. Document DB
    데이터가 Key-Document 형태로 저장된다.
    Value가 계층적인 형태인 Document로 저장된다. 이는 객체 지향의 객체와 비슷하며 하나의 단위로 취급된다. 즉, 하나의 객체를 여러 테이블에 나눠 저장할 필요가 없어진다.
    검색에 최적화 되어있고 단점은 사용이 번거롭고 쿼리가 SQL과 다르다.
    ex) MongoDB, CouthDB

  3. Wide Column DB
    Column-family Model 기반의 DB이다
    이는 키에서 필드를 결정한다. 키가 Row(키 값)와 Column-family, Column-name을 가진다. 연관된 데이터는 같은 Column-family안에 속하며 각자의 Column name을 가진다. 이렇게 저장 된 데이터는 커다란 하나의 Table로 표현이 가능하고 질의는 Row, Column-family, Column-name을 통해 수행된다.
    ex) HBase, Hypertable

  4. Graph DB
    데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 표현하고 저장하는 DB이다.



=> RDBMS는 DB 구조가 변경될 여지가 없으며 명확한 스키마가 중요한 경우 사용한다. 또한 관계를 맺고 있는 데이터가 자주 변경되는 시스템에 적합하다.
=> NoSQL는 정확한 데이터 구조를 알 수 없는 경우나 Scale-out이 가능하므로 막대한 데이터를 저장해야 하는 시스템에 적합하다.



mongoDB

mongoDBNoSQL DB로 Document 기반으로 구성되어 있다. 또한 오픈 소스이기 때문에 무료로 이용이 가능하다.

대표적인 특징은 다음과 같다

1. Document Database

Document는 HTML과 같은 특정 형식의 태그 구조를 의미하며 mongoDB는 JSON 형식으로 데이터를 관리하므로 NoSQL DB중 Document Database로 분류된다. 또한 이는 mongoDB가 데이터를 저장하는 최소 단위이기도 하다.


Document는 필드와 값의 쌍으로 구성되며, 관계를 갖는 데이터를 중첩 Document와 배열을 사용하여 1개의 Document로 표현할 수 있다.


데이터 입출력 시에는 JSON 형식의 Document를 사용하나 DB 저장시 시에는 Binary 포맷으로 인코딩한 BSON(Binary JSON) 형식의 Document로 변환되어 저장된다.


2. 유연한 스키마

스키마의 선언 없이 필드의 추가와 삭제가 자유로운 Schema-less 구조이다.
관계형 DB는 테이블 내 모든 Row의 칼럼 집합이 동일하고 같은 칼럼은 동일한 데이터 타입을 가지는 정형 스키마이지만, mongoDB는 컬렉션 내 모든 Document들의 필드 집합이 동일하지 않고 같은 필드라도 데이터 타입이 다를 수 있는 비정형 스키마이다.


3. 비 관계형 Database

mongoDB는 관계 개념이 없는 비관계형 DB이다. 따라서 Join을 지원하지 않으며 임베디드 방식의 Document 구조를 사용하거나 레퍼런스 방식의 Document 구조를 사용한 후 애플리케이션 단에서 Join 해야 한다.


4. 비 트랜잭션

mongoDB는 트랜잭션을 지원하지 않고 각각의 Document 단위로 처리된다. 따라서 Commit과 Rollback 개념이 없으며 모두 Auto Commit으로 처리된다.



mongoDB 데이터 모델링

https://meetup.toast.com/posts/276



Ref

https://aws.amazon.com/ko/nosql/
https://www.samsungsds.com/kr/insights/1232564_4627.html
https://kciter.so/posts/about-mongodb
https://pythontoomuchinformation.tistory.com/528
https://atin.tistory.com/624
https://meetup.toast.com/posts/274

profile
🍕

0개의 댓글