728x90
마이크로서비스 아키텍처에서 저장소 분리 패턴 (Database per Service Pattern)은 각 마이크로서비스가 독립적인 데이터 저장소를 가지도록 설계하는 원칙이다. 이 패턴은 마이크로서비스의 자율성을 강화하고 서비스 간의 의존성을 줄이며 시스템의 확장성과 유지보수성을 개선하기 위해 사용된다.
저장소 분리 패턴의 핵심 개념
- 독립적 데이터베이스
- 각 마이크로서비스는 자신만의 데이터베이스를 소유하며 다른 서비스와 데이터베이스를 공유하지 않는다.
- 예를 들어, 주문 관리 서비스와 사용자 관리 서비스가 각각 별도의 데이터베이스를 가지게 된다.
- 독립적 데이터 스키마
- 각 서비스는 자신의 데이터 스키마를 독립적으로 정의하고 관리한다.
- 이는 다른 서비스와의 데이터 구조 충돌을 방지하고 각 서비스가 독립적으로 진화(evolution)할 수 있도록 한다.
- 서비스 경계를 통한 데이터 접근
- 한 서비스의 데이터는 다른 서비스가 직접 액세스할 수 없다. 데이터를 필요로 하는 서비스는 API 호출, 메시지 브로커, 혹은 이벤트를 통해 데이터를 교환해야 한다.
- 이는 서비스 간 강한 결합을 방지하고 명확한 경계를 유지하는 데 도움을 준다.
장점
- 서비스 독립성
- 각 서비스는 독립적으로 배포, 스케일링, 유지보수가 가능하며 다른 서비스에 영향을 미치지 않는다.
- 데이터 일관성 관리
- 각 서비스가 자신의 데이터베이스를 관리하므로 데이터 일관성을 서비스 내부적으로 제어할 수 있다.
- 기술 스택의 유연성
- 각 서비스는 자신의 요구사항에 맞는 데이터베이스 기술을 선택할 수 있다. 예를 들어, 하나의 서비스는 관계형 데이터베이스(MySQL)를 다른 서비스는 NoSQL(MongoDB)를 사용할 수 있다.
- 확장성
- 서비스별로 데이터베이스를 독립적으로 확장할 수 있어 시스템의 전체 확장성을 높인다.
단점
- 데이터 중복
- 서비스 간 데이터가 중복될 가능성이 있다. 동일한 데이터를 여러 서비스에서 사용해야 할 경우 이를 각 데이터베이스에 저장해야 할 수도 있다.
- 데이터 일관성 문제
- 분산된 데이터베이스 구조에서는 트랜잭션 관리(예: 분산 트랜잭션)가 어렵다. 데이터 일관성을 보장하기 위해 이벤트 소싱이나 사가 패턴 같은 추가적인 설계가 필요할 수 있다.
- 운영 복잡성 증가
- 각 서비스마다 데이터베이스를 별도로 운영해야 하므로 관리해야 할 데이터베이스가 많아지고 모니터링 및 백업 작업이 복잡해진다.
저장소 분리 패턴의 사용 사례
- 이커머스 플랫폼 : 주문 서비스, 사용자 서비스, 카탈로그 서비스 등이 독립적인 데이터베이스를 가질 수 있다.
- 은행 시스템 : 계좌 관리 서비스, 대출 서비스, 결제 서비스 등이 각기 독립적인 데이터 저장소를 사용해 더 높은 보안성과 확장성을 제공할 수 있다.
구현 시 고려 사항
- 데이터 동기화 및 통합
- 서비스 간 데이터 동기화를 위해 이벤트 기반 아키텍처(Event-driven Architecture)를 사용하는 것이 일반적.
- 복합 쿼리 처리
- 여러 서비스의 데이터를 조합해야 할 경우 API Gateway를 통해 데이터를 수집하거나 데이터 웨어하우스를 사용하여 통합 쿼리를 실행할 수 있다.
- 데이터 보안 및 접근 제어
- 각 데이터베이스에 대해 적절한 보안 정책을 설정하고 데이터 접근을 철저히 제한해야 한다.
이 패턴은 특히 확장성과 독립성이 중요한 시스템에 적합하지만 이를 구현하기 위해서는 설계와 운영상의 복잡성을 수용할 준비가 필요하다.
반응형
'Architecture' 카테고리의 다른 글
CQRS 패턴 (Command and Query Responsibility Segregation) (0) | 2024.12.28 |
---|---|
사가(Saga) 패턴 (1) | 2024.12.28 |
마이크로서비스 통신 패턴 (동기, 비동기) (0) | 2024.12.25 |
서킷 브레이커 패턴(Circuit Breaker Pattern) 이란 (0) | 2024.12.21 |
MSA에서 인증/인가 패턴 (0) | 2024.12.21 |