MongoDB / DocumentDB가 뭔데? — 10분 가이드
MongoDB와 AWS DocumentDB의 이름은 자주 들리지만, 둘이 정확히 무엇이고 어떻게 다른지 한 번에 잡기 어렵습니다. 이 글은 관계형 DB 경험은 있지만 문서 지향 NoSQL은 낯선 독자를 위해, Document란 무엇인지부터 MongoDB·DocumentDB의 역할, API 호환의 한계와 선택 기준, Collection·Document·BSON·임베드/참조 모델링까지 약 10분 안에 훑습니다. 과장 없이 일반적인 이해의 틀을 잡는 데 집중했고, 읽은 뒤에는 공식 문서나 로컬 실습으로 넘어갈 때 무엇을 보면 되는지 감을 잡도록 구성했습니다.
RDB는 써 봤는데 MongoDB·DocumentDB는 아직 낯선 분을 위한 큰 그림입니다. 약 10분 안에 개념과 선택 기준을 정리해 보세요.
목차
- 들어가며 — "Document"가 뭔가요?
- 관계형 DB vs Document DB — 핵심 차이
- MongoDB란?
- AWS DocumentDB란? (MongoDB API 호환)
- MongoDB vs AWS DocumentDB — 뭘 써야 하나?
- 기본 개념 훑기 — Collection, Document, BSON
- 데이터 모델링 한눈에 — Embed vs Reference
- 자주 쓰는 기본 쿼리 치트시트
- 언제 Document DB를 쓰면 좋을까?
- 마치며 — 10분 요약
1. 들어가며 — "Document"가 뭔가요?
우리가 흔히 아는 데이터베이스(MySQL, PostgreSQL)는 행(Row)과 열(Column) 으로 이루어진 표 형태입니다.
그런데 현실 데이터는 표처럼 딱 떨어지지 않을 때가 많습니다.
예를 들어, 사용자 프로필을 저장한다고 합시다.
- 어떤 유저는 전화번호가 1개
- 어떤 유저는 전화번호가 3개
- 어떤 유저는 아예 없음
관계형 DB에서는 이런 경우 테이블을 따로 만들거나 NULL로 채워야 합니다.
Document DB는 그냥 있는 그대로 저장합니다.
{
"name": "홍길동",
"phones": ["010-1234-5678", "02-999-0000"],
"address": {
"city": "서울",
"district": "강남구"
}
}
이게 "Document"입니다. JSON처럼 생겼죠.
2. 관계형 DB vs Document DB — 핵심 차이
| 비교 항목 | 관계형 DB (MySQL 등) | Document DB (MongoDB 등) |
|---|---|---|
| 데이터 구조 | 고정된 스키마 (표) | 유연한 스키마 (JSON/BSON) |
| 관계 표현 | JOIN으로 연결 | 중첩(Embed) 또는 참조(Reference) |
| 확장 방식 | 일반적으로 수직 확장(Scale-up) 중심으로 설계되는 경우가 많음 | 수평 확장(Scale-out)에 친숙한 사례가 많음 |
| 트랜잭션 | 강한 ACID 지원 | 지원하나 설계·버전·토폴로지에 따라 범위를 확인해야 함1 |
| 적합한 데이터 | 정형 데이터, 복잡한 관계 | 비정형에 가까운 데이터, 빠른 변화 |
참고: PostgreSQL·MySQL도 읽기 복제, 샤딩 솔루션 등으로 수평 확장을 구성할 수 있습니다. 위 표는 흔히 이야기되는 성향을 빠르게 비교한 것이며, 제품·버전·아키텍처마다 달라집니다.
핵심 한 줄: 데이터 구조가 자주 바뀌거나, 중첩된 데이터가 많다면 Document DB가 편한 경우가 많습니다.
3. MongoDB란?
MongoDB는 2009년에 오픈소스로 공개된 Document DB의 대표 주자입니다(회사 MongoDB의 전신 10gen은 2007년 창립).
핵심 특징
- 스키마 유연성: 컬럼을 미리 엄격히 정의하지 않아도 되는 편이라, 초기 프로토타입에 잘 맞습니다.
- BSON: JSON과 유사한 문서를 바이너리 형태로 다룹니다. 타입 표현·파싱 측면의 장점이 있지만, 실제 응답 속도와 비용은 인덱스·쿼리 패턴·네트워크·스토리지 조건에 더 크게 좌우됩니다.
- 수평 확장(Sharding): 데이터가 커지면 샤딩 등으로 서버를 늘리는 전략을 쓸 수 있습니다.
- Replica Set: 복제를 통한 고가용성 구성이 일반적입니다.
- 쿼리·집계: 집계 파이프라인, 지리 검색 등 풍부한 기능을 제공합니다(버전·배포에 따라 다름). Atlas Search 같은 전문 검색은 MongoDB Atlas 전용입니다.
어디서 실행하나?
| 방식 | 설명 |
|---|---|
| 로컬 설치 | 직접 서버에 설치 |
| MongoDB Atlas | MongoDB 공식 클라우드 서비스 (AWS/GCP/Azure) |
| Docker | 컨테이너로 간편하게 실행 |
4. AWS DocumentDB란? (MongoDB API 호환)
AWS DocumentDB는 Amazon이 제공하는 완전관리형 Document 데이터베이스 서비스입니다.
MongoDB 호환 API를 목표로 설계되어, 애플리케이션에서는 MongoDB 드라이버와 비슷한 방식으로 접근할 수 있는 경우가 많습니다. 다만 MongoDB 서버와 100% 동일한 기능·버전 호환을 보장하는 제품은 아닙니다. 운영 환경으로 옮길 때는 기능별로 동작을 검증하는 편이 안전합니다(집계 연산자, 특정 인덱스·검색 기능 등은 제한되거나 다를 수 있습니다).
핵심 특징
- 완전관리형(Managed): 패치, 백업, 복구를 AWS가 담당하는 형태로 제공됩니다.
- MongoDB 호환 API: 기존 MongoDB 기반 코드를 이식하기 쉽도록 맞춰져 있으나, 호환 범위는 문서로 확인해야 합니다.
- 스토리지·가용성: 스토리지 사본을 3개 가용 영역(AZ) 에 걸쳐 6개로 유지하는 모델로 설명됩니다(How It Works — Amazon DocumentDB).
- VPC 내부 운영: 네트워크 보안을 AWS 네트워크 모델에 맞게 잡기 쉬운 편입니다.
5. MongoDB vs AWS DocumentDB — 뭘 써야 하나?
| 비교 항목 | MongoDB (예: Atlas) | AWS DocumentDB |
|---|---|---|
| 운영 주체 | MongoDB Inc. | Amazon Web Services |
| 기능·버전 | MongoDB 제품 기준 | MongoDB 호환 — 최신 기능이 항상 동일하게 오지는 않을 수 있음 |
| 멀티 클라우드 | 여러 클라우드 옵션 | AWS 안에서 사용 |
| 비용 | 요금 모델·인스턴스에 따름 | 인스턴스·스토리지·I/O 등 AWS 요금 체계 |
| 운영 부담 | 관리형 서비스로 낮출 수 있음 | AWS 생태계에 묶인 관리형 운영에 유리 |
언제 뭘 쓸까?
- AWS 인프라에 집중하고, RDS·VPC·IAM 등과 맞춘 관리형 운영을 원한다 → AWS DocumentDB 후보
- MongoDB 최신 기능·도구(예: Atlas 전용 기능) 이 필요하거나 멀티 클라우드를 열어 두고 싶다 → MongoDB Atlas 등 공식 MongoDB 쪽을 검토
- 사이드 프로젝트·로컬 개발 → MongoDB Community Edition(또는 Docker 이미지)로 시작하기 쉽습니다
6. 기본 개념 훑기 — Collection, Document, BSON
용어 대응표
| 관계형 DB | Document DB |
|---|---|
| Database | Database |
| Table | Collection |
| Row | Document |
| Column | Field |
| Primary Key | _id (컬렉션 내 고유, 기본값은 보통 ObjectId) |
| JOIN | Embed / $lookup 등 |
Document 예시
{
"_id": "64a1f2e3b5c6d7e8f9a0b1c2",
"title": "MongoDB 10분 가이드",
"author": {
"name": "홍길동",
"email": "hong@example.com"
},
"tags": ["database", "nosql", "mongodb"],
"views": 1024,
"published": true,
"createdAt": "2024-07-01T09:00:00Z"
}
중첩 객체(author)와 배열(tags)이 하나의 Document 안에 자연스럽게 들어갑니다.
BSON은 이런 문서를 저장·전송할 때 쓰는 포맷으로 이해하면 됩니다. "BSON이라서 무조건 빠르다"보다는, 스키마와 쿼리를 어떻게 잡았는지가 체감 성능을 가른다고 보는 편이 안전합니다.
구조 한눈에 보기
위 도식은 Database 아래에 Collection이 붙고, Document가 모이며, Embed·Reference 전략이 어디에 대응하는지 정리한 것입니다.
7. 데이터 모델링 한눈에 — Embed vs Reference
문서 DB에서 관계를 표현할 때 자주 쓰는 판단 기준입니다.
- Embed(중첩): 함께 조회·같이 수정되는 데이터가 많고, 한 문서 안에 넣어도 크기·일관성 문제가 없을 때 유리합니다.
- Reference(참조): 엔티티가 독립적으로 자주 바뀌거나, 여러 문서에서 같은 데이터를 참조해 중복이 폭발할 때는 별도 컬렉션에 두고
_id로 연결하는 편이 낫습니다.
실무에서는 둘을 섞어 쓰는 경우가 많고, 조회 패턴(한 번에 어떤 화면에 무엇을 보여줄지) 을 먼저 정리한 뒤 모델을 잡는 것이 좋습니다.
8. 자주 쓰는 기본 쿼리 치트시트
연결 (Node.js 예시)
const { MongoClient } = require('mongodb');
async function main() {
const client = new MongoClient('mongodb://localhost:27017');
try {
await client.connect();
const db = client.db('myDatabase');
const col = db.collection('articles');
// 여기서 CRUD를 실행합니다.
} finally {
await client.close();
}
}
main().catch(console.error);
CRUD 기본
const col = db.collection('articles');
// Create — 문서 삽입
await col.insertOne({ title: '첫 번째 글', views: 0 });
// Read — 조회
const doc = await col.findOne({ title: '첫 번째 글' });
const docs = await col.find({ published: true }).toArray();
// Update — 수정
await col.updateOne(
{ title: '첫 번째 글' },
{ $set: { views: 100 } }
);
// Delete — 삭제
await col.deleteOne({ title: '첫 번째 글' });
자주 쓰는 쿼리 패턴
// 조건 필터
await col.find({ views: { $gte: 100 } }).toArray(); // views >= 100
await col.find({ tags: { $in: ['nosql'] } }).toArray(); // tags 배열에 "nosql" 포함
// 정렬 & 페이징
await col.find({}).sort({ createdAt: -1 }).skip(0).limit(10).toArray();
// 집계 (Aggregation)
await col.aggregate([
{ $match: { published: true } },
{ $group: { _id: '$author.name', total: { $sum: 1 } } },
{ $sort: { total: -1 } },
]).toArray();
9. 언제 Document DB를 쓰면 좋을까?
적합한 경우
- 스키마가 자주 바뀌는 서비스 — 스타트업 초기, 빠른 기능 변경
- 중첩 구조 데이터 — 상품 옵션, 유저 프로필, 설정값 등
- 대용량 읽기 중심 — 콘텐츠 플랫폼, 카탈로그 등(설계·인덱스 전제)
- 이벤트 로그·IoT 등 반복적 삽입·집계 패턴(요구사항에 맞을 때)
신중히 고려할 경우
- 복잡한 다중 테이블 JOIN이 항상 중심인 도메인 모델
- 강한 트랜잭션·일관성이 최우선인 금융·결제 코어(요구 수준을 DB가 충족하는지 검증 필요)
- 데이터 구조가 매우 고정적이고 정형화되어 RDB가 더 단순한 경우
10. 마치며 — 10분 요약
| 키워드 | 한 줄 정리 |
|---|---|
| Document DB | JSON/BSON 형태의 유연한 문서를 저장하는 NoSQL 계열 |
| MongoDB | Document DB를 대표하는 오픈소스 제품·생태계 |
| AWS DocumentDB | AWS의 관리형 MongoDB 호환 API 서비스 — 기능은 문서로 검증 |
| Collection / Document | Table·Row에 대응하는 개념으로 이해하면 쉬움 |
| 쓸 때 | 스키마 변화·중첩 데이터·수평 확장 시나리오를 검토할 때 |
| 안 쓸 때 | 복잡한 관계·엄격한 트랜잭션이 핵심인지 먼저 판단 |
다음 단계로
- MongoDB 공식 학습: MongoDB University
- 로컬 실행 예(공식 커뮤니티 서버 이미지):
docker run -d -p 27017:27017 mongodb/mongodb-community-server:latest— 세부 옵션은 Docker Hub — mongodb-community-server를 참고하세요. - GUI: MongoDB Compass
참고 (공식 문서)
- MongoDB Manual
- BSON 타입 · bsonspec.org
- 문서(Document) 개요
- 트랜잭션
- 데이터 모델링 소개
$lookup- MongoDB Atlas
- Amazon DocumentDB — 지원 API
- Amazon DocumentDB — 동작 방식
Footnotes
-
MongoDB의 멀티 문서 ACID 트랜잭션은 4.0에서 Replica Set, 4.2에서 Sharded Cluster까지 확대되었습니다. 세부 조건은 Transactions — MongoDB Manual을 확인하세요. ↩