서비스별 데이터베이스 패턴
IT위키
더 많은 작업
서비스별 데이터베이스 패턴(Database per Service)은 마이크로서비스 아키텍처에서 각 서비스가 자기 데이터를 전용 데이터베이스(또는 전용 스키마)에 두고, 다른 서비스는 그 데이터에 직접 접근하지 못하고 해당 서비스의 API 나 메시지를 통해서만 쓰게 하는 데이터 관리 패턴이다.
여러 서비스가 한 데이터베이스를 같이 쓰면 한 서비스가 테이블 구조를 바꿀 때 그 테이블을 쓰는 모든 서비스를 함께 고치고 배포해야 한다. 서비스를 따로 배포하고 따로 확장한다는 마이크로서비스의 장점이 데이터 계층에서 무너지는 것이다. 이 패턴은 서비스의 영속 데이터를 그 서비스의 구현 일부로 보고 감춘다. 한 서비스의 트랜잭션은 자기 데이터베이스만 건드린다.[1] 마이크로소프트도 두 서비스가 데이터 저장소를 공유하지 않아야 하며, 각 서비스가 자기 전용 저장소를 관리해 스키마 변경의 영향 범위를 그 서비스 안으로 한정해야 한다고 권한다.[2]
데이터베이스 서버를 서비스마다 따로 둘 필요는 없다. 관계형 데이터베이스라면 다음 가운데 고른다.[1]
- 서비스별 전용 테이블 - 같은 스키마 안에서 테이블 소유를 나누고 접근 권한으로 막는다. 가장 약한 분리
- 서비스별 스키마 - 서비스마다 스키마와 계정을 따로 둔다
- 서비스별 데이터베이스 서버 - 처리량이 크거나 다른 종류의 데이터베이스가 필요할 때
서비스마다 맞는 저장소를 고를 수 있다(폴리글랏 저장). 검색 서비스는 검색 엔진을, 관계망 서비스는 그래프 데이터베이스를, 주문 서비스는 관계형 데이터베이스를 쓰는 식이다.
| 장점 | 대가 |
|---|---|
| 서비스 간 결합이 느슨해진다. 한 서비스의 스키마 변경이 다른 서비스에 영향을 주지 않는다 | 여러 서비스에 걸친 업무 트랜잭션을 하나의 ACID 트랜잭션으로 묶기 어렵다 |
| 서비스마다 알맞은 데이터베이스 종류를 고를 수 있다 | 여러 데이터베이스에 흩어진 데이터를 조인하는 조회가 어렵다 |
| 서비스별로 저장소를 따로 확장할 수 있다 | 여러 종류의 데이터베이스를 운영하는 부담이 늘어난다 |
- 여러 서비스에 걸친 쓰기 - 분산 트랜잭션(2단계 커밋) 대신 Saga 패턴을 쓴다. 각 서비스가 지역 트랜잭션을 수행하고, 중간에 실패하면 앞 단계를 되돌리는 보상 트랜잭션을 실행한다
- 여러 서비스에 걸친 조회 - API 조합(조회 서비스나 API 게이트웨이가 여러 서비스를 불러 결과를 합침)이나 CQRS(각 서비스가 발행하는 이벤트를 구독해 조인된 읽기 전용 뷰를 따로 유지)를 쓴다[1]
- 서비스 간 통신 - 메시지 브로커를 통한 비동기 이벤트로 다른 서비스의 변경을 전달받는다. 요청 흐름을 추적할 때는 상관관계 ID를 붙여 로그를 잇는다
| 구분 | 서비스별 데이터베이스 | 공유 데이터베이스 |
|---|---|---|
| 데이터 소유 | 서비스마다 자기 데이터 소유 | 여러 서비스가 같은 테이블을 읽고 씀 |
| 다른 서비스 데이터 접근 | API·메시지로만 | SQL 로 직접 |
| 조인 조회 | 어렵다(API 조합, CQRS 필요) | 쉽다 |
| 트랜잭션 | 서비스 내부만 ACID, 서비스 간은 Saga | 하나의 ACID 트랜잭션 가능 |
| 스키마 변경 영향 | 그 서비스 안 | 모든 사용 서비스 |
마이크로서비스 문헌은 공유 데이터베이스를 서비스 간 결합을 만드는 안티패턴으로 본다.[1]
- ↑ 1.0 1.1 1.2 1.3 Chris Richardson, 「Pattern: Database per service」, Microservices.io, https://microservices.io/patterns/data/database-per-service.html, 확인일: 2026-11-04.
- ↑ 「Data considerations for microservices」, Azure Architecture Center, Microsoft Learn, https://learn.microsoft.com/en-us/azure/architecture/microservices/design/data-considerations, 확인일: 2026-11-04.