Shared Database

마이크로서비스 아키텍처(MSA)에서 “Shared Database” 패턴은 여러 마이크로서비스가 단일 데이터베이스를 공유하는 접근 방식이다.

Shared Database 패턴은 여러 마이크로서비스가 동일한 데이터베이스 인스턴스를 사용하여 데이터를 저장하고 접근하는 방식이다. 각 서비스는 자유롭게 다른 서비스가 소유한 데이터에 접근할 수 있으며, 로컬 ACID 트랜잭션을 사용하여 데이터 일관성을 유지한다.

Shared Database 패턴은 마이크로서비스 아키텍처의 일반적인 원칙과는 다소 배치되지만, 특정 상황에서는 유용할 수 있다. 그러나 장기적으로는 서비스 간 결합도를 낮추고 확장성을 높이기 위해 Database per Service 패턴으로의 전환을 고려해야 할 수 있다.

주요 특징

  1. 중앙 집중식 데이터 저장소: 모든 서비스가 단일 데이터베이스를 공유한다.
  2. 데이터 일관성: ACID 트랜잭션을 통해 데이터 일관성을 쉽게 유지할 수 있다.
  3. 간단한 쿼리: 복잡한 조인 쿼리를 쉽게 실행할 수 있다.
  4. 단순한 아키텍처: 단일 데이터베이스로 인해 전체 시스템 아키텍처가 단순화된다.

장점

  1. 데이터 일관성: 트랜잭션을 통해 여러 서비스 간 데이터 일관성을 쉽게 유지할 수 있다.
  2. 개발 용이성: 개발자들에게 익숙한 ACID 트랜잭션을 사용할 수 있다.
  3. 단순한 쿼리: 복잡한 조인 쿼리를 쉽게 실행할 수 있어 데이터 분석이 용이하다.
  4. 비용 효율성: 단일 데이터베이스 관리로 인프라 비용을 절감할 수 있다.

단점

  1. 강한 결합: 서비스 간 강한 결합으로 인해 독립적인 개발과 배포가 어려워진다.
  2. 확장성 제한: 데이터베이스가 병목 지점이 될 수 있어 전체 시스템의 확장성이 제한된다.
  3. 장애 전파: 데이터베이스 장애 시 모든 서비스에 영향을 미친다.
  4. 스키마 변경의 어려움: 한 서비스의 스키마 변경이 다른 서비스에 영향을 줄 수 있다.

적용 시나리오

  1. 모놀리식 아키텍처에서 마이크로서비스로의 점진적 마이그레이션
  2. 데이터 일관성이 매우 중요한 시스템
  3. 작은 규모의 애플리케이션이나 프로토타입 개발

구현 시 고려사항

  1. 데이터 접근 제어: 서비스별로 데이터 접근 권한을 명확히 정의해야 한다.
  2. 스키마 관리: 스키마 변경 시 모든 서비스에 미치는 영향을 신중히 고려해야 한다.
  3. 성능 모니터링: 데이터베이스 성능을 지속적으로 모니터링하고 최적화해야 한다.
  4. 백업 및 복구: 중앙 집중식 데이터베이스의 백업 및 복구 전략을 수립해야 한다.

참고 및 출처