엔지니어링·런북
데이터스토어 비교 — Postgres vs MongoDB vs DynamoDB
신뢰도 높음비교편집: Cairni · 방금 · AI 생성v1
개요
이 페이지는 ADR-014 — Postgres를 기본 데이터스토어로 채택에서 수행된 데이터스토어 선택 과정을 정리합니다. 팀은 사용자, 노트북, 빌링 등 관계형 데이터를 위한 기본 저장소를 선정할 때 강한 일관성(strong consistency) 과 트랜잭션 및 조인 지원을 핵심 요건으로 삼았습니다. Engineering — Incidents & Decisions.md
후보 비교표
| 항목 | Postgres ✅ | MongoDB ❌ | DynamoDB ❌ |
|---|---|---|---|
| 트랜잭션 | 완전 지원 | 제한적 (멀티 도큐먼트) | 제한적 |
| 조인(JOIN) | 완전 지원 | 미지원 (애플리케이션 레벨) | 미지원 |
| 일관성 모델 | 강한 일관성 | 최종 일관성(기본) | 최종 일관성(기본) |
| 애드혹 쿼리 | SQL로 유연하게 가능 | 제한적 | 취약 |
| 운영 종속성 | 관리형(Managed)으로 낮음 | 낮음 | 높음 (벤더 잠금) |
| 스키마 마이그레이션 | 수동 (Alembic 사용) | 유연(스키마리스) | 유연(스키마리스) |
| 채택 결과 | 채택 | 기각 | 기각 |
Engineering — Incidents & Decisions.md
각 후보 상세
✅ Postgres (채택)
- 채택 이유: 강한 일관성, SQL의 유연성, 트랜잭션과 조인 완전 지원.
- 운영 방식: 관리형(Managed) Postgres 사용.
- 트레이드오프: 스키마 변경 시 수동 마이그레이션이 필요하며, ADR-014에 따라 Alembic으로 이를 관리한다.
- DB 커넥션 풀 관리가 중요하며, 이를 소홀히 할 경우 커넥션 고갈로 인한 장애가 발생할 수 있다 (참고: 포스트모텀 — 2026-05-12 API 장애).
Engineering — Incidents & Decisions.md
❌ MongoDB (기각)
- 기각 이유: 트랜잭션과 조인이 필요한 요건을 충족하지 못함.
- MongoDB는 도큐먼트 스토어로서 스키마리스 유연성을 제공하지만, 팀의 핵심 요건인 관계형 데이터 처리에 적합하지 않다고 판단되었다.
Engineering — Incidents & Decisions.md
❌ DynamoDB (기각)
- 기각 이유: 운영 종속성(벤더 잠금) 문제와 애드혹 쿼리의 취약함.
- 특정 클라우드 벤더에 대한 강한 의존성이 발생하며, 복잡한 쿼리 패턴을 유연하게 처리하기 어렵다고 판단되었다.
Engineering — Incidents & Decisions.md
결정 흐름
관련 페이지
- ADR-014 — Postgres를 기본 데이터스토어로 채택 — 이 비교를 기반으로 한 공식 아키텍처 결정 기록
- 포스트모텀 — 2026-05-12 API 장애 (45분) — Postgres 커넥션 풀 고갈로 발생한 실제 장애 사례
- DB 커넥션 풀 — 커넥션 풀 관리 개념 및 주의사항
- 런북 — 잘못된 배포 롤백 절차 — 장애 발생 시 대응 절차
- 엔지니어링 개요 (홈) — 전체 시스템 및 문서 맵