각 Microservice를 AP만 분리하고 DB는 통합하는 경우
https://microservices.io/patterns/data/database-per-service.html
Microservices Pattern: Database per service
Microservices.io is brought to you by Chris Richardson. Experienced software architect, author of POJOs in Action, the creator of the original CloudFoundry.com, and the author of Microservices patterns. Chris helps clients around the world adopt the micros
microservices.io
위의 내용 발췌 + 첨언
Context 불분명
주문, 처방, 계약, 원장 등 Enterprise 전 영역에서 걸쳐 사용되는 테이블은 대개 수십에서 백여개의 컬럼을 가지고 있음
본인이 테이블 담당자지만 타 파트/서비스의 요청에 의해 추가/변경되는 컬럼도 많고 임의로 Control 할 수 없는 컬럼도 있음
Bounded Context (Microservice) 별 Ubiquitous Language 즉, 언어의 경계가 명확해야 하는데 그 경계가 무너짐을 의미
언어의 경계가 무너졌다는 의미는 용어는 같지만 또는 같은 컬럼이지만 실제 의미나 쓰임새가 다르고, 이로인한 의사소통 혼란
Bounded Context별 데이터 모델 혼란
Bounded Context별 데이터 모델, DB스키마를 구성할 때 Bounded Context안에 존재해야함
해당 Bounded Context의 담당팀이 모델을 책임지고 DB스키마 통제, 설계, 개발, 유지보수
Bounded Context의 담당팀이 DB스키마 Control시 다른팀/서비스/조직이 DB설계/추가/변경에 반대한다면 그 스키마는 Bounded Context안쪽에 둘 수 없음
자기 Bounded Context내에서 Control할 수 없는 DB모델이라면 내 Bounded Context의 것이 아님(테이블이든 컬럼이든)
서비스의 입장에서 데이터는 Private 영역
다른 서비스에 직접 노출할 이유가 없으며(서비스별 DB는 Private 영역) API/PUB/SUB을 통해서만 Communication/Access
서비스별로 스키마를 구성하면 Data Ownership이 명확해짐 (스파게티의 가능성이 낮아짐)
커플링이 낮은 서비스들로 구성할 가능성이 높아짐
하나의 서비스에서 DB 스키마를 변경해도 다른 서비스에는 영향을 미칠 가능성이 낮음
(DB 스키마 변경 시 API/PUB/SUB 의 Input/Output이 달라질수도 있기 때문에 무관하지는 않지만 직접 쿼리에 비해 영향도는 현저히 떨어짐)
Data Ownership 불명확
여러 서비스가 동일한 DB스키마로 통합된다면 타 서비스 데이터를 CRUD하는데 제한이 없어지므로 Data Ownership 불명확
타 서비스에서 쿼리 작성시 조인 등으로 커플링이 높아짐
DB Machine은 공유하면서 Schema(User or Database) 만 분리하는 경우
위에서 언급한 Context, Bounded Context, Data Ownership 등은 명확해지지만
독립적인 개별 확장 X, 서비스 특징에 적합한 DB선정 X, CPU, Memory등 자원 공유로 부하 등 장애발생 시 격리 X
https://microservices.io/patterns/data/shared-database.html
AP만 분리하고 DB를 통합하는 경우
장점
- 개발자는 친숙하고 간단한 ACID 트랜잭션을 사용하여 데이터 일관성 적용 가능
- 단일 데이터베이스는 기존 처럼 간단하게 운영
단점
- 동일한 테이블에 액세스하는 서비스A와 서비스B의 개발팀간의 스키마 변경 시마다 조정이 필요
- 이렇게 서비스와 개발팀간의 커플링이 높아지면 개발 속도가 떨어짐
- 모든 서비스가 동일한 DB에 액세스하기 때문에 잠재적으로 서로 간섭(런타임 커플링)
예 : 특정 서비스의 트랜잭션으로 Lock 되면 다른 서비스도 장애
- 단일DB는 모든 서비스의 데이터 저장 및 액세스 요구 사항을 충족하지 않을 가능성이 높음
예 : 서비스별 특징(대량, CUD/R 전용, 성능 등)에 맞는 DB선정 X