MongoDB

목차


MongoDB란

MongoDB 는 문서 지향(document-oriented) 데이터베이스로, 데이터를 BSON 문서 형태로 저장합니다. 관계형 테이블 구조보다 애플리케이션 객체 구조에 더 가깝게 데이터를 다루기 쉽다는 점이 큰 특징입니다.

MongoDB를 설명할 때 핵심은 다음 두 가지입니다.

  • 문서 중심 모델: 한 문서 안에 관련 데이터를 함께 담는 방식이 자연스럽습니다.
  • 분산 운영 친화성: replica set과 sharding을 통해 고가용성과 수평 확장을 지원합니다.12

MongoDB의 핵심 특징

  • 유연한 스키마: 컬렉션 내 문서 구조가 완전히 동일할 필요는 없습니다. 스키마가 전혀 없는 구조라기보다, 애플리케이션 차원에서 스키마를 관리하는 방식에 가깝습니다.
  • 문서 단위 모델링: 자주 함께 조회되는 데이터를 embedding 형태로 한 문서에 묶는 설계가 잘 맞습니다.
  • 단일 문서 원자성: 한 문서 내부 변경은 원자적으로 처리됩니다.3
  • 다양한 읽기/쓰기 보장 조절: read concern, write concern, read preference 조합에 따라 읽기 일관성과 가용성 특성이 달라집니다.43
  • 조인 지원: MongoDB는 $lookup으로 컬렉션 간 조인을 지원합니다. 다만 조인 중심 모델에 최적화된 시스템으로 보기는 어렵습니다.5

MongoDB의 강점은 관계를 완전히 버리는 것이 아니라, 관계를 자주 조인하기보다 문서 구조로 풀어낼 수 있는 문제에서 강하다는 점입니다.


리플리카 셋

리플리카 셋(Replica Set) 은 같은 데이터를 유지하는 mongod 인스턴스 집합입니다.1

  • Primary: 기본 쓰기 노드
  • Secondary: primary의 oplog를 복제하는 노드
  • Arbiter: 데이터는 저장하지 않고 선거에만 참여하는 노드

리플리카 셋의 목적은 다음과 같습니다.

  • 고가용성: primary 장애 시 새로운 primary를 선출
  • 읽기 분산: secondary 읽기 전략 활용 가능
  • 내구성 향상: 다수 노드 복제를 통한 장애 대응

다만 secondary 읽기를 쓰면 다음을 알아야 합니다.

  • replication lag가 있을 수 있습니다.
  • read preference와 read concern 조합에 따라 최신성이 달라집니다.3

샤딩

샤딩(Sharding) 은 데이터를 여러 샤드에 분산 저장해 저장 용량과 처리량을 확장하는 구조입니다.2

MongoDB 샤딩 구성에서 자주 나오는 요소는 다음과 같습니다.

  • Shard: 실제 데이터가 저장되는 노드 그룹
  • Config Server: 샤딩 메타데이터 저장
  • Mongos: 클라이언트 요청 라우팅

샤딩의 핵심은 샤드 키 선택입니다.

  • 고르게 분산되는가
  • 핵심 조회가 샤드 키를 활용하는가
  • 시간이 지나도 특정 샤드에만 쓰기가 몰리지 않는가

잘못된 샤드 키는 hot shard를 만들고, 결국 “샤딩했는데도 병목”이라는 상황을 만듭니다.


MongoDB와 MySQL 비교

항목 MongoDB MySQL
데이터 모델 문서 지향 관계형 테이블
강점 유연한 모델, 문서 중심 설계, 수평 확장 강한 트랜잭션, 조인, 정형 데이터
확장 방향 샤딩 중심 수평 확장 읽기 복제본과 파티셔닝, 샤딩은 별도 설계
일관성 모델 설정에 따라 조절 InnoDB 기반 강한 트랜잭션 보장
적합한 경우 비정형 데이터, 빠른 스키마 변화, 문서 중심 조회 관계형 무결성, 복잡한 조인, 금융/주문

두 시스템은 모두 배포 구성과 읽기/쓰기 보장 설정에 따라 일관성과 가용성의 균형을 다르게 가져갈 수 있습니다.4

MongoDB를 설명할 때는 다음 흐름이 자연스럽습니다.

  • 문서 모델과 수평 확장성이 강점
  • 강한 일관성도 일부 설정으로 가져갈 수 있지만 비용이 따른다
  • 조인과 다중 문서 트랜잭션이 많아질수록 문서 지향 모델의 장점은 줄어든다

운영 시 주의점

  • 스키마 관리: 유연하다고 해서 무질서하게 두면 안 됩니다. 애플리케이션 레벨 검증이 중요합니다.
  • 문서 크기와 중복: embedding을 과하게 쓰면 문서가 비대해질 수 있습니다.
  • 조인 남용: $lookup은 가능하지만 과도하면 성능이 흔들릴 수 있습니다.5
  • read/write concern 이해: 장애 상황에서 어떤 보장을 원하는지 명확해야 합니다.4
  • 샤드 키 설계: 재샤딩 비용이 크기 때문에 초기에 잘 잡아야 합니다.

적합한 사용 사례

  • 콘텐츠, 프로필, 카탈로그처럼 문서 단위 조회가 자연스러운 도메인
  • 로그, 이벤트, 반정형 데이터 저장
  • 스키마 변화가 잦고 빠른 개발이 중요한 서비스
  • 읽기/쓰기 확장을 유연하게 가져가야 하는 시스템

반대로 다음은 MySQL 같은 관계형 모델이 더 자연스러울 수 있습니다.

  • 조인이 많고 데이터 무결성이 핵심인 시스템
  • 다중 테이블 트랜잭션이 핵심 업무인 도메인

면접 포인트

  • MongoDB의 핵심은 문서 모델과 분산 운영 친화성입니다.
  • 스키마리스는 스키마가 없다는 뜻이 아니라, DB가 강제하지 않는다는 뜻에 가깝습니다.
  • $lookup으로 조인은 가능하지만, 조인 중심 워크로드에 최적화된 것은 아닙니다.
  • 일관성과 가용성은 replica set 구성과 read/write concern 설정까지 함께 설명하는 편이 좋습니다.
  • 답변에서는 문서 모델, replica set, sharding, read/write concern을 하나의 흐름으로 묶어 설명하면 좋습니다.

참고 자료