Postgres (관리형 데이터스토어)
개요
Postgres는 이 시스템의 기본 관계형 데이터스토어로, 사용자, 노트북, 빌링 데이터를 저장합니다. ADR-014에서 공식적으로 채택이 결정되었으며, 관리형(managed) 형태로 운영됩니다. Engineering — Incidents & Decisions.md
채택 배경 및 결정 근거
ADR-014 — Postgres를 기본 데이터스토어로 채택에 따르면, 강한 일관성(strong consistency)과 관계형 데이터(트랜잭션 및 조인)가 필요한 주요 데이터를 저장하기 위해 Postgres가 선택되었습니다. Engineering — Incidents & Decisions.md
고려된 대안
| 대안 | 거부 이유 |
|---|---|
| MongoDB | 트랜잭션 및 조인 지원 부족 |
| DynamoDB | 운영 종속성(lock-in), 임시 쿼리(ad-hoc query) 취약 |
자세한 비교는 데이터스토어 비교 — Postgres vs MongoDB vs DynamoDB 페이지를 참고하세요. Engineering — Incidents & Decisions.md
주요 특성
- 강한 일관성: 트랜잭션 보장 및 SQL 유연성 제공
- 스키마 마이그레이션: 수동 스키마 마이그레이션 필요 — Alembic으로 관리
- 커넥션 풀: 모든 요청은 DB 커넥션 풀을 통해 연결해야 함 (풀 우회 시 장애 위험)
Engineering — Incidents & Decisions.md
아키텍처 내 위치
관련 장애 이력
포스트모텀 — 2026-05-12 API 장애 (45분)에서 Postgres가 핵심 장애 원인과 직결되었습니다. 신규 엔드포인트가 DB 커넥션 풀을 사용하지 않고 요청마다 직접 DB 커넥션을 열어 Postgres의 최대 커넥션 수가 소진되었고, 결과적으로 API 타임아웃이 발생했습니다. Engineering — Incidents & Decisions.md
장애 후속 조치 (Postgres 관련)
- 최대 커넥션의 80% 도달 시 알림 추가
- 풀 외부 임시 커넥션 생성을 금지하는 린트(lint) 규칙 도입
- 신규 엔드포인트 릴리스 전 부하 테스트 의무화
Engineering — Incidents & Decisions.md
운영 주의사항
배포 롤백 시 데이터베이스 스키마가 변경된 경우 앱만 단순 롤백해서는 안 됩니다. 반드시 마이그레이션 상태를 먼저 확인해야 합니다. 자세한 절차는 런북 — 잘못된 배포 롤백 절차를 참고하세요. Engineering — Incidents & Decisions.md