5장 : 마이크로서비스 설계

2023. 5. 22. 15:51북리뷰/도메인 주도로 설계하는 마이크로서비스 개발

728x90

MSA에서 가장 중요한 관심사 :  기능적 응집성을 높이는 것, 타 서비스 간 의존도 낮추는 것

 

# 마이크로 서비스를 도출하는 방법

 

## 비즈니스 능력에 근거한 도출

업무 기능 분해 : 업무 흐름에 따라 업무를 최상위에서 하위까지 대,중,소의 크기로 분리하고 수행하는 일을 체계적으로 정렬

전체적인 비즈니스를 이해할 때는 유용하나, 서비스 간 관계 파악 및 구체기능과 연관된 서비스 관리할 독립적인 데이터 식별을 어려움

 

## DDD의 바운디드 컨텍스트 기반 도출

DDD에서는 하나의 큰 도메인을 중요도에 따라 도메인을 나누고 각 도메일을 하나씩 해결

 

### 서브 도메인

비즈니스 도메인을 논리적으로 구분/분리되는 여러 하위 도메인

- 핵심 서브도메인 : 높은 우선순위 영역, 전략적으로 가장 큰 투자가 필요한 영역

- 지원 서브도메인: 비즈니스에 필수적이지만 핵심은 아님, 핵심 도메인을 성공시키기 위해서는 반드시 필요함

- 일반 서브도메인 : 전체 비즈니스 솔루션에는 필요한 부분, 기존 제품을 구매해서 대체 가능

 

바운디드 컨텍스트 : 도메인의 주요 개념을 정의, 도메인 간 경계 식별

유비쿼터스 언어 : 바운디드 컨텍스트 내의 도메인 주요 개념을 표현하기 위해 도메인 내에서 공통으로 사용하는 언어

 

## 컨텍스트 매핑

- 비즈니스 수행을 위해 여러 개의 컨텍스트가 연계해야 하는 경우가 발생

### 주요 컨텍스트 매핑 관계

- 공유 커널 : 바운디드 컨텐스트 사이에 공통적인 모델 공유. 각 팀은  공유하는 모델에 서로 합의. 공통 부분이 변경되면 관련 컨텍스트에 영향을 미치므로 모델 간 합의 필요

- 소비자와 공급자 : 공급하는 콘텍스트는 상류, 소비하는 컨텍스트는 하류. 반대는 불가. 상류의 변화가 있으면 하류에서 변화를 따라야

- 준수자 : 소비자와 공급자와 유사하나, 상류 팀이 하류 팀의 요구를 지원하지 않거나 못하는 경우 사용

- 충돌 방지 계층(ACL) : 하류 팀이 상류 팀의 모델에 영향을 받을 때 하류 팀의 고유 모델을 지키기 위에 변역 계층을 만드는 것. 하류 모델의 독립성을 유지 : 레거시 시스템 전체를 MSA 환경으로 변경하는 위험을 줄이고자 하는 단계적 전환 방식에 많이 사용

- 공개 호스트 서비스 : 바운디드 컨텍스트에 대한 접근을 제공하는 프로토콜이나 인터페이스를 정의

- 발행된 언어 : 하루 컨텍스트가 상류 컨텍스트가 제공하는 기능을 사용하기 위해 간단한 사용과 번역을 가능케 하는 문서화된 정보(JSON, XML) 교환 언어. 주로 공개 호스트 서비스와 짝을 이뤄 사용

 

# 이벤트 스토밍

이벤트 중심으로 이해관계자들이 모여 브레인 스토밍을 하는 워크숍 

- 도메인 이벤트 : 시간의 흐름에 따라 시스템의 동작을 의믜

- 커멘드 : 도메인 이벤트를 동작하게 하는 명령

- 엑터 : 사용자, 조직, 역할자

- 애그리거트 : 커멘드와 도메인 이벤트가 영향을 주는 데이터 요소 

 

## MSA 정의 질문 사항

- 비즈니스 측면 : 비즈니스 프로세스를 수행하기 위한 하나의 맥락의 단위로 구분될 수 있는가?

- 데이터 관점 : 마이크로서비스별로 분리된 데이터를 정의할 수 있는가?

- 운영 조직 측면 : 하나의 팀이 독립적으로 운영 가능한 단위인가?

- 베포 측면 : 독립적으로 배포 가능한 단위인가?

- 변경 영향도 : 변경 시 영향을 받는 마이크로서비스가 존재하는가?

- 클라우드/MSA 도입 목적 측면 : 도입을 통한 기대효과를 충분히 활용할 수 있는가?

위 질문을 모두 만족한다면 바운디드 컨텍스트를 최종 마이크로서비스로 식별,

만족하지 못한다면 각 질문의 결과에 따라 바운디드 컨텍스트를 분리하거나 통합해서 마이크로서비스로 식별

 

### DDD의 도메인 모델링 구성 요소

- 엔티티 : 식별자를 가진 도메인의 실체 개념을 표현하는 객체

- 값 객체 : 각 속성이 개별적으로 변화하지 않는 개념적 완성을 모델링 한 것.

#### 값 객체 특성

- 도메인 내 어떤 대상을 측정/수량화/설명

- 관련 특징을 모은 필수 다뉘로 개념적 전체를 모델링

- 측정이나 설명이 변경될 땐 완벽히 대체 가능

- 다른 값과 등가성을 사용해 비교

- 값 객체는 불변객체

 

- 표준 타입 : 대상의 타입을 나타내는 서술적 객체. 엔티티나 값 객체의 속성을 구분하는 용도로 사용. 보통 열거형으로 정의

- 애그리거트 : 엔티티와 값 객체들의 묶음

- 도메인 서비스 : 도메인의 비즈니스 로직 처리가 특정 엔티티나 값 객체에 속하지 않아서 단독 객체를 만들어서 처리하는 것

- 도메인 이벤트 : DDD 및 이벤트 스토밍에서 생성된 도메인 이벤트의 구현 객체 

728x90