NoSQL과 MongoDB

saewoohan·2024년 10월 24일

MongoDB

목록 보기
1/2
post-thumbnail

회사에서 MongoDB를 사용하는데, 처음 사용해봐서 익숙치 않은 탓에 정리해보는 개념들..

NoSQL

특징

  1. 유연성: 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조이다.
  2. 확장성: Scale-out을 기본적으로 고려하여 탄생했으며 이로 인해 서버 확장이 용이하다.
  3. 고성능: 대용량 데이터를 처리하는 성능이 뛰어나다.
    1. NoSQL은 데이터 중복을 허용하기에 Join 을 사용한 이유가 없으며, 데이터는 필요한 형태로 바로 저장되기에 해당 데이터만 가져오면 되는 특징을 가지고 있기 때문이다.
  4. 가용성: 데이터 저장과 처리에 있어서 분산 시스템을 기반으로 설계 되었기에 가용성이 뛰어난 특징을 가지고 있다.

RDBMS와의 비교

  1. 데이터 처리
    • RDBMS는 데이터의 무결성과 일관성을 중점으로 설계 되었다. 이는 다양한 데이터의 형태와 대규모의 데이터를 처리하는 데에 어려운 점이 존재한다.
    • RDBMS는 단일 서버를 고려해서 설계가 되었기에 Scale-out보다는 Scale-up에 초점이 맞추어져 있다.
      • 물론 현재는 replica, master-slave, 샤딩 등 다양한 기법을 통해서 scale-out이 가능하지만 관계로 인한 구현의 복잡성이 존재한다.
    • NoSQL은 Schema-less한 특징 덕분에 유연한 데이터를 다루기가 좋으며, Scale-out을 고려하여 설계되었기 때문에 대규모의 데이터를 다루기에 유리하다.

  1. ACID, BASE
    • RDBMS는 ACID 를 특징으로 가지며, 데이터의 일관성을 더 중요하게 생각한다.
      • 원자성: 트랜잭션이 모두 반영되거나, 모두 반영되지 않도록 유지하는 성질
      • 일관성: 데이터가 미리 정해진 규칙을 충족해야함
      • 격리성: 트랜잭션들 끼리 작업에 관여할 수 있는 특징
      • 지속성: 반영된 트랜잭션은 영구적으로 적용
    • 하지만, NoSQL은 BASE를 특징으로 가진다.
      • 기본 가용성(Basic Availability): 데이터베이스가 언제든지 접근 가능하다는 것을 의미, 즉 어떠한 서버에 장애가 발생하더라도 무중단 서비스가 가능해야한다.
      • 소프트 상태(Soft State): 데이터의 상태가 항상 일관적이지 않을 수 있다는 것을 의미.
      • 최종 일관성(Eventual Consistency): 시간이 지나면 결국에는 모든 노드가 동일한 데이터 상태로 수렴하게 된다는 개념.
      • 하지만, 최근에는 많은 NoSQL DB에서도 트랜잭션을 제공해서 ACID적인 특징을 보인다. MongoDB를 예로 들면, MongoDB 4.0부터는 Multi-Document Transaction을 제공함으로서 ACID를 충족했다. 이후 MongoDB 4.2에서 Shard Cluster Transacion을 제공하면서 분산 트랜젝션까지 가능해졌다.

MongoDB

특징

  1. 도큐먼트 기반

    • MongoDB는 필드와 값으로 구성된 Document 데이터 구조를 가진다.
      • 그렇기에 JSON 객체와 유사한 형태를 보인다.
      • 하지만 BSON을 사용하는데, BSONBinary JSON의 줄임말로, JSONBinary 형식으로 저장한 데이터 형식이다.
      • 가장 큰 차이는 이진 데이터로 저장하기에, 더 빠르게 데이터 직렬화 및 역직렬화가 가능하고, 저장 시 공간을 절약할 수 있다는 특징을 가진다.
  2. 컬렉션

    • MongoDB는 이러한 문서를 컬렉션에 저장한다. (이는 테이블과 유사한 역할)
  3. CAP 특징

    1. 일관성(Consistency)
      • MongoDB는 단일 마스터 시스템으로, 모든 쓰기 작업을 수신하는 프라이머리 노드가 하나만 존재한다.
      • 보조 노드는 프라이머리 노드의 작업 로그를 복제하여 자신의 데이터 세트에 적용함으로써 데이터의 일관성을 유지한다.
      • 프라이머리 노드가 중단되면, 최근 작업 로그를 가진 보조 노드가 새 프라이머리 노드로 선출되고, 클러스터는 다시 일관성을 유지하게 된다.
    2. 분할 내성(Partition Tolerance)
      • 네트워크 분할이 발생하거나 프라이머리 노드가 접근 불가 상태가 되었을 때, 보조 노드 중 하나가 자동으로 프라이머리 노드로 승격된다.
      • 이 과정에서 일시적으로 쓰기 작업은 불가능해지지만, 새로운 프라이머리 노드가 선출되면서 네트워크 분할 상황을 해결한다.

0개의 댓글