반응형
MSA에서 어떤 경우에 데이터베이스를 분리를 해야하는지?(분해인), 또 어떤 경우에 데이터베이스 통합을 고려해야하는지?(통합인)를 살펴본다.
데이터베이스 분해인
- 데이터베이스를 분해해야하는 명분(어떤 경우, 어떤 이유로 데이터베이스 분리를 하는가?)
- 데이터베이스를 분리하면 아래 표의 분해인 항목에 대한 장점을 가질 수 있다.
분해인 | 설명 |
변경관리 | - 테이블,컬럼 등 변경 시 얼마나 자주 변경되고, 얼마나 많은 서비스가 영향을 받는가? (데이터베이스 변경에 따른 서비스 변경, 테스트, 재배포 등의 범위와 영향도 줄일 수 있음) |
커넥션 관리 | - 데이터베이스가 여러 분산된 서비스와 커넥션을 맺을 수 있는가? (데이터베이스의 최대 가용 커넥션 수에 도달 및 초과할 수 있는가?) - 서비스마다 자체 커넥션 풀을 가지고 있고, 서비스 증가에 따라 커넥션 풀 빠르게 소진될 수 있음 - 서비스가 커넥션 대기 현상이 발생하면 이미 최대 커넥션 수에 도달했다는 증거 |
확장성 | - 엑세스하는 서비스 수요에 맞게 데이터베이스를 확장할 수 있는가? (데이터베이스의 커넥션, 용량, 처리량, 성능, 확장이유 등에 따른 확장) |
내고장성/가용성 | - 데이터베이스 장애 및 수리 등의 사유로 가동 중단 시 얼마나 많은 서비스가 영향을 받는가? (내고장성이 필요한 영역은 데이터베이스 분리 고려 필요) |
아키텍처 퀀텀 | - 단일 공통 데이터베이스가 바람직하지 않은 단일 아키텍처 퀀텀을 유발하는가? * 아키텍처 퀀텀: 높은 기능응집도, 정적 커플링, 동기적 커플링을 가진 독립 배포 가능한 아태팩트 (분해 시 다중 아키텍처 퀀텀으로 구성되어 응집도 증가 및 결합도 축소,영향도 범위 축소 가능) |
데이터베이스 유형 최적화 | - 여러 종류의 데이터베이스를 사용해서 데이터를 최적화 할 여지가 있는가? (분해 시 데이터 특성에 최적화된 데이터 베이스 활용 가능) |
데이터베이스 통합인
- 데이터베이스를 통합해야하는 명분(어떤경우, 어떤 이유로 데이터베이스를 통합 하는가?)
통합인 | 설명 |
데이터 관계 | - 테이블 간 외래 키 등 데이터 관계를 유지하는 것이 MSA 서비스 분해인보다 더 중요한 경우 * MSA에서 바운디드 컨텍스트를 견고하게 설계하려면 데이터베이스를 분해해야 하며 다른 서비스 스키마의 기존 참조 외래키, 뷰 등은 모두 제거해야 한다 |
데이터베이스 트랜잭션 | - 트랜잭션 처리가 ACID를 반드시 보장이 되어야 하는 경우 * 데이터베이스를 분해하면 단일 트랜잭션으로 묶을 수가 없다. |
다시 한번 정리해보면 데이터베이스 분리가 필요한 이유는 아래와 같다.
- 데이터베이스 변경에 따른 서비스들의 변경관리의 어려움
- 서비스들에 따른 DB커넥션 관리가 어려움
- 데이터베이스 확장성 및 내고장성/가용성 필요
- 데이터 성격에 따른 최적화된 데이터베이스 적용 필요
반대로 데이터베이스 통합이 필요한 이유는 다음과 같다.
- 데이터 관계의 무결성, 정합성 등이 필수인 경우
- ACID 트랜잭션 처리가 필수인 경우
관련글:
반응형
'개발 > MSA' 카테고리의 다른 글
[MSA] 데이터베이스 종류와 데이터베이스 선택 평가 항목 (0) | 2024.08.25 |
---|---|
[MSA] 모놀리식 데이터베이스 분해 과정 (0) | 2024.08.24 |
[MSA] 모놀리식 어플리케이션 분해 전략(서비스 분리) (1) | 2024.08.17 |
[MSA] 모듈화와 아키텍처 퀀텀 (0) | 2024.08.15 |
[MSA] 분산 트랜잭션 최종 일관성(Eventual Consistency) 구현 방법 비교 (0) | 2024.08.11 |
댓글