MongoDB vs RDB

MongoDB란? RDB와 비교를 곁들인

Posted by Yan on April 13, 2025

MongoDB

  • Document 지향 데이터베이스
  • 고성능, 고가용성 및 쉬운 확장성을 제공하는 NoSQL
  • Document를 사용하면 단일 레코드로 복잡한 계층적 관계를 표현할 수 있어 RDBMS의 row보다 유연하다
  • 미리 정의된 스키마를 필요로 하지 않는다.

Data format

  • BSON : Binary JSON
    • 이진 직렬화 형식으로, 원격 프로시저 호출(RPC)과 같은 분산 시스템에서 데이터를 저장하고 전송하기 위해 만들어졌다.
    • 이진 형식이기 때문에 텍스트 형식보다 적은 용량을 사용하고 처리속도가 빠르다.
    • 길이 정보가 포함되어 있어 데이터 트래버스(데이터 구조를 순회하거나 탐색하는 것)를 용이하게 한다. 길이정보가 있으면 데이터의 시작과 끝을 쉽게 파악할 수 있다.
    • 데이터를 바르게 찾고 처리할 수 있다.

RPC: 한 시스템에서 다른 시스템의 프로시저(함수)를 호출할 수 있게 해주는 프로토콜. 분산 시스템에서는 시스템 간의 상호 작용이 필요하기 때문에 RPC가 자주 사용된다.

  • Document: 데이터를 BSON document로 저장

alt text

  • Collection: document의 집합 (document가 rdb의 row라면 collection은 table의 개념)
    • 여러가지 형태를 가진 문서가 포함될 수 있다. 아래처럼 필드가 달라도 된다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    {
        title: "MongoDB Tutorial",
        published_date: new Date('June 01, 2020')
    }
    
    {
        title: "MongoDB Basics",
        published_date: new Date('Jan 01, 2021'),
        isbn": "978-4-7766-7944-8"
    }
    

alt text

  • Database : 컬렉션을 데이터베이스에 저장
    • MongoDB 인스턴스는 여러 개의 데이터베이스를 호스트할 수 있으며 각각의 데이터베이스는 컬렉션의 컨테이너로 작용한다.
    • 데이터베이스는 디스크의 별도 파일에 데이터를 저장하며 각 데이터베이스에는 고유한 이름 공간이 있다.

alt text

BSON이 빠른 이유

서로 다른 db(MongoDB, PostgresSQL 등)를 사용하는 서비스가 통신하려면 각 서비스의 데이터를 직렬화하고 이해할 수 있는 형식으로 전송해야 한다.

  1. 이진 직렬화: BSON은 이진 형식으로 데이터를 직렬화하므로, 데이터의 크기가 작아진다. 이로 인해 데이터 전송 시 소요되는 시간이 줄어들어 시스템 간의 통신이 빠르게 이루어질 수 있다. 이는 특히 대용량 데이터를 전송해야 하는 경우에 유리하다.

  2. 처리 속도: BSON은 이진 형식으로 인해 처리 속도가 빠르다. 서로 다른 시스템 간의 통신에서 데이터를 받아들이고 처리하는 속도가 빠르다면 전체 응답 시간이 감소하게 된다.

  3. 다양한 데이터 유형 지원: BSON은 문자열, 숫자(정수, 부동 소수점, 십진수), 날짜, 이진 데이터, ObjectId 등 다양한 데이터 유형을 지원한다. 이로 인해 서로 다른 시스템 간에 다양한 데이터 유형을 쉽게 전송하고 저장할 수 있다.

MongoDB vs RDBMS

MongoDB vs RDBMS 기본 개념 비교

alt text

항목 MongoDB (NoSQL) RDBMS (MySQL, Oracle 등)
구조 Document 기반 (BSON/JSON) Table 기반 (행/열)
스키마 스키마 유연 (Schema-less) 스키마 고정 (Schema-on-write)
확장성 수평 확장에 강함 (Sharding) 수직 확장 위주
트랜잭션 과거에는 제한적, 4.0 이후 멀티도큐먼트 지원 강력한 ACID 트랜잭션
쿼리 유연한 Document 쿼리 복잡한 JOIN, 집계에 강함
사용 사례 비정형 데이터, 빠른 개발 정형 데이터, 정합성 요구

MongoDB 도입 장단점

📌 장점 (특정 상황에 따라 고려 가능)

  1. 스키마-리스 디자인 = 비정형/반정형 데이터 구조에 적합
    • 몽고디비의 유연한 스키마 디자인은 데이터 요구 사항이 변경될 때 매끄럽게 적응할 수 있도록 한다.
    • 예: 금융상품에 따라 필드 구조가 매번 바뀌는 경우
    • Mongo는 JSON 기반으로 필드 추가/삭제가 자유로움
  2. 빠른 개발 & 유연한 모델링
    • 초기 모델이 자주 바뀌는 MVP 환경에서 유리
    • 스키마를 변경하지 않고 필드를 추가 가능
  3. 수평 확장성 (Sharding)
    • 몽고디비는 read 기능에 대한 확장을 위한 레플리카 세트와 write 확장을 위한 샤딩을 제공하여 수평적 확장에서 뛰어나다.
    • 대량의 로그, 거래 이력, 실시간 수집 데이터 처리 등에서 적합 - 반면 RDBMS 솔루션은 비슷한 수준의 확장성을 달성하기 위해 비싼 하드웨어 업그레이드를 필요로 한다.
  4. Document 단위의 조회 성능 우수
    • 사용자의 단일 대출 이력 전체를 한번에 조회하는 등의 use case에 강점

⚠️ 단점

  1. 정합성 요구가 강한 도메인에 불리
    • Mongo는 기본적으로 eventual consistency (최종적 일관성) 모델
    • 트랜잭션은 RDB만큼 엄격하지 않고, 다소 복잡하게 구현됨
    • 트랜잭션 처리는 ACID가 아닌 BASE 기반 Basically Available, Soft state, Eventual consistency
      • 느슨한 일관성 모델, 높은 가용성과 분산 시스템에 적합한 성능을 목표로 함
        1. 기본적으로 사용 가능(Basically Available): 시스템은 항상 응답을 제공하며, 일시적인 고장이나 네트워크 지연에도 높은 가용성을 유지
        2. 소프트 상태(Soft state): 시스템의 상태는 시간에 따라 변할 수 있으며, 일관성이 항상 보장되지 않음
        3. 최종 일관성(Eventual consistency): 시스템은 일정 시간이 지난 후에야 최종적으로 일관된 상태를 달성
  2. 복잡한 JOIN 불가능
    • 네이티브 조인을 지원하지 않음
    • 고객, 계좌, 상품, 계약, 이력 등 여러 테이블 간 복잡한 조인이 많은 금융 서비스에서는 비효율
    • 그러나 집계 파이프라인에서 LeftOuterJoin을 수행하는 $lookup 연산자를 제공하며, 전통적인 조인에 비해 효율성이 떨어질 수 있다.
  3. 감사로그, 거래추적 등 컴플라이언스 대응 어려움
    • 금융에서는 변경이력 관리, 변경불가 보장 등이 중요 → RDB가 우세
  4. 운영 관리 및 안정성 측면에서 아직 보수적
    • Mongo 특유의 WriteConcern, ReadConcern 설정을 잘못하면 데이터 유실 위험
    • 장애 시 복구 경험이 적은 조직에서는 리스크

✅ 금융에서 MongoDB를 고려할 수 있는 예제

  • 대출 비교 서비스의 금융사 응답 파싱 저장소
    → 금융사마다 JSON 구조가 다르기 때문에 Mongo에 저장하고, 이후 RDB로 ETL 가능

  • 비동기 메시지 저장소 (Kafka Consumer의 Raw Data 저장 등)

  • 대시보드 조회용 데이터 마트
    → 정합성이 절대적으로 중요하지 않고, 빠른 응답성과 유연한 구조가 필요한 경우


Refernce

[MongoDB] MongoDB란? 특징과 장단점을 예제로 확인해보자.