Architecture

저장소 분리 패턴

TedDev 2024. 12. 25. 23:26
728x90

마이크로서비스 아키텍처에서 저장소 분리 패턴 (Database per Service Pattern)은 각 마이크로서비스가 독립적인 데이터 저장소를 가지도록 설계하는 원칙이다. 이 패턴은 마이크로서비스의 자율성을 강화하고 서비스 간의 의존성을 줄이며 시스템의 확장성과 유지보수성을 개선하기 위해 사용된다.

 

저장소 분리 패턴의 핵심 개념

  1. 독립적 데이터베이스
    • 각 마이크로서비스는 자신만의 데이터베이스를 소유하며 다른 서비스와 데이터베이스를 공유하지 않는다.
    • 예를 들어, 주문 관리 서비스와 사용자 관리 서비스가 각각 별도의 데이터베이스를 가지게 된다.
  2. 독립적 데이터 스키마
    • 각 서비스는 자신의 데이터 스키마를 독립적으로 정의하고 관리한다.
    • 이는 다른 서비스와의 데이터 구조 충돌을 방지하고 각 서비스가 독립적으로 진화(evolution)할 수 있도록 한다.
  3. 서비스 경계를 통한 데이터 접근
    • 한 서비스의 데이터는 다른 서비스가 직접 액세스할 수 없다. 데이터를 필요로 하는 서비스는 API 호출, 메시지 브로커, 혹은 이벤트를 통해 데이터를 교환해야 한다.
    • 이는 서비스 간 강한 결합을 방지하고 명확한 경계를 유지하는 데 도움을 준다.

 

장점

  1. 서비스 독립성
    • 각 서비스는 독립적으로 배포, 스케일링, 유지보수가 가능하며 다른 서비스에 영향을 미치지 않는다.
  2. 데이터 일관성 관리
    • 각 서비스가 자신의 데이터베이스를 관리하므로 데이터 일관성을 서비스 내부적으로 제어할 수 있다.
  3. 기술 스택의 유연성
    • 각 서비스는 자신의 요구사항에 맞는 데이터베이스 기술을 선택할 수 있다. 예를 들어, 하나의 서비스는 관계형 데이터베이스(MySQL)를 다른 서비스는 NoSQL(MongoDB)를 사용할 수 있다.
  4. 확장성
    • 서비스별로 데이터베이스를 독립적으로 확장할 수 있어 시스템의 전체 확장성을 높인다.

 

단점

  1. 데이터 중복
    • 서비스 간 데이터가 중복될 가능성이 있다. 동일한 데이터를 여러 서비스에서 사용해야 할 경우 이를 각 데이터베이스에 저장해야 할 수도 있다.
  2. 데이터 일관성 문제
    • 분산된 데이터베이스 구조에서는 트랜잭션 관리(예: 분산 트랜잭션)가 어렵다. 데이터 일관성을 보장하기 위해 이벤트 소싱이나 사가 패턴 같은 추가적인 설계가 필요할 수 있다.
  3. 운영 복잡성 증가
    • 각 서비스마다 데이터베이스를 별도로 운영해야 하므로 관리해야 할 데이터베이스가 많아지고 모니터링 및 백업 작업이 복잡해진다.

 

저장소 분리 패턴의 사용 사례

  • 이커머스 플랫폼 : 주문 서비스, 사용자 서비스, 카탈로그 서비스 등이 독립적인 데이터베이스를 가질 수 있다.
  • 은행 시스템 : 계좌 관리 서비스, 대출 서비스, 결제 서비스 등이 각기 독립적인 데이터 저장소를 사용해 더 높은 보안성과 확장성을 제공할 수 있다.

 

구현 시 고려 사항

  1. 데이터 동기화 및 통합
    • 서비스 간 데이터 동기화를 위해 이벤트 기반 아키텍처(Event-driven Architecture)를 사용하는 것이 일반적.
  2. 복합 쿼리 처리
    • 여러 서비스의 데이터를 조합해야 할 경우 API Gateway를 통해 데이터를 수집하거나 데이터 웨어하우스를 사용하여 통합 쿼리를 실행할 수 있다.
  3. 데이터 보안 및 접근 제어
    • 각 데이터베이스에 대해 적절한 보안 정책을 설정하고 데이터 접근을 철저히 제한해야 한다.

이 패턴은 특히 확장성과 독립성이 중요한 시스템에 적합하지만 이를 구현하기 위해서는 설계와 운영상의 복잡성을 수용할 준비가 필요하다.

반응형