서비스별 공유 데이터베이스 패턴
서비스별 공유 데이터베이스 패턴에서는 여러 마이크로서비스가 동일한 데이터베이스를 공유합니다. 이 패턴을 채택하기 전에 애플리케이션 아키텍처를 신중히 평가하고, 여러 마이크로서비스가 동시에 쓰기를 수행하는 단일 테이블(핫 테이블)을 피해야 합니다. 또한 모든 데이터베이스 변경 사항은 하위 버전과 호환되어야 합니다. 예를 들어 개발자는 모든 마이크로서비스의 최신 및 이전 버전에서 객체를 참조하지 않는 경우에만 열이나 테이블을 삭제할 수 있습니다.
다음 그림에서 모든 마이크로서비스가 보험 데이터베이스를 공유하고 있으며 IAM 정책은 이 데이터베이스에 대한 액세스를 제공합니다. 이로 인해 개발 시간이 결합됩니다. 예를 들어, ‘판매’ 마이크로서비스를 변경하면 ‘고객’ 마이크로서비스와 스키마 변경을 조정해야 합니다. 이 패턴은 개발 팀 간의 종속성을 줄이지 않으며 모든 마이크로서비스가 동일한 데이터베이스를 공유하기 때문에 런타임 결합을 도입합니다. 예를 들어 장기간 실행되는 ‘판매’ 트랜잭션은 ‘고객’ 테이블을 잠글 수 있으며 이로 인해 ‘고객’ 트랜잭션이 차단될 수 있습니다.
다음과 같은 경우에는 이 패턴을 사용하는 것이 좋습니다.
-
기존 코드베이스를 너무 많이 리팩터링하고 싶지는 않을 것입니다.
-
원자성, 일관성, 격리 및 내구성(ACID)을 제공하는 트랜잭션을 사용하여 데이터 일관성을 유지합니다.
-
데이터베이스를 하나만 유지 관리하고 운영하려고 합니다.
-
서비스별 데이터베이스 패턴을 구현하는 것은 기존 마이크로서비스 간의 상호 종속성 때문에 어렵습니다.
-
기존 데이터 계층을 완전히 재설계하고 싶지는 않습니다.