핵심 인사이트 (3줄 요약)
- 각 마이크로서비스가 고유한 데이터베이스를 소유하며, 다른 서비스의 DB에 직접 접근하는 것을 원천 차단하여 데이터 독립성과 캡슐화를 보장함.
- 서비스 간의 **런타임 결합도(Runtime Coupling)**를 제거하여, 특정 서비스의 DB 장애나 스키마 변경이 다른 서비스에 영향을 주지 않도록 격리함.
- 각 서비스의 특성에 맞는 최적의 DB(Polyglot Persistence)를 선택할 수 있는 자율성을 제공하며, 독립적인 배포와 확장을 가능하게 함.
Ⅰ. 개요 (Context & Background)
- 모놀리식 아키텍처의 '공유 데이터베이스(Shared Database)'는 데이터 정합성 유지에는 유리하나, 서비스 확장에 따라 DB 병목(SPOF)과 스키마 변경의 두려움을 유발함.
- MSA의 핵심인 '독립적 배포'를 달성하기 위해 데이터 계층의 강결합을 해소하는 것이 이 패턴의 핵심 목적임.
Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)
[ Database per Service Architecture ]
/-------------\ /-------------\ /-------------\
| Order Svc | | Product Svc | | Customer Svc|
\-------------/ \-------------/ \-------------/
| | |
/------v------\ /------v------\ /------v------\
| [Order DB] | | [Product DB]| | [Customer DB]| <--- DB 격리
| (MySQL) | | (MongoDB) | | (PostgreSQL) |
\-------------/ \-------------/ \-------------/
* 데이터 교환: 서비스 간 직접 DB 접근 불가, 오직 API나 Message를 통해서만 교환
- 개별 오너십: 서비스는 자신이 소유한 DB의 스키마를 자유롭게 변경할 수 있으며, 데이터는 반드시 서비스 API를 통해서만 외부에 노출됨.
- 데이터 격리: 물리적 DB 서버를 분리하거나, 논리적 스키마/데이터베이스를 분리하여 자원을 격리함.
- 분산 데이터 관리: 조인(Join) 연산이 불가능하므로, API 조합(Composition)이나 CQRS, Saga 패턴을 통한 데이터 통합 전략이 수반되어야 함.
Ⅲ. 융합 비교 및 다각도 분석 (Comparison & Synergy)
| 비교 항목 | 공유 데이터베이스 (Shared DB) | 서비스별 데이터베이스 (DB per Svc) |
| 데이터 정합성 | ACID 트랜잭션으로 보장 용이 | 결과적 일관성 (Eventual Consistency) |
| 스키마 변경 | 모든 서비스에 영향 (변경 어려움) | 서비스 단독 변경 가능 (유연성 높음) |
| 기술 선택 | 단일 DB 스택에 종속 | 폴리글랏 퍼시스턴스 가능 |
| 운영 복잡도 | 상대적으로 낮음 | DB 모니터링/백업 대상 증가 (높음) |
Ⅳ. 실무 적용 및 기술사적 판단 (Strategy & Decision)
- 판단 지표: 서비스가 도메인별로 명확히 분리(Bounded Context)되어 있고, 시스템의 규모가 커서 독립적인 확장과 빠른 배포가 생존 전략일 때 도입함.
- 적용 전략: 초기에는 논리적 스키마 분리로 시작하여 필요에 따라 물리적 DB를 분리하는 전략(Evolutionary Design)을 취하며, 데이터 중복을 일정 부분 허용(Denormalization)하여 성능을 확보함.
Ⅴ. 기대효과 및 결론 (Future & Standard)
- 데이터 계층의 **유연성(Agility)**과 **확장성(Scalability)**을 극대화하여 진정한 의미의 클라우드 네이티브 MSA를 완성함.
- 분산 트랜잭션의 어려움은 Saga 패턴이나 **이벤트 주도 아키텍처(EDA)**와 결합하여 해결하는 것이 글로벌 표준 아키텍처 방향임.
📌 관련 개념 맵 (Knowledge Graph)
- 상위 개념: 마이크로서비스 아키텍처 (MSA), 바운디드 컨텍스트
- 해결 패턴: API 컴포지션, CQRS, Saga 패턴
- 기술 기반: 폴리글랏 퍼시스턴스, 결과적 일관성
👶 어린이를 위한 3줄 비유 설명
- 친구들과 일기장을 하나로 같이 쓰는 게 아니라, 각자 자기만의 비밀 일기장을 갖는 것과 같아요.
- 내 일기장에 마음대로 그림을 그려도 친구 일기장은 깨끗하니까 싸울 일이 없어요.
- 친구의 일기 내용이 궁금하면 직접 훔쳐보는 게 아니라, 친구에게 물어봐서 답을 듣는 것과 같은 규칙이에요.