[MSA] 7. MSA 설계 기법 - 전략적 설계
개요
전략적 설계 기법
- 이벤트 스토밍 방법
- 도메인 설계 시 이해 관계자가 모두 참여하여 마이크로서비스 설계를 위한 워크샵을 진행
![](https://velog.velcdn.com/images/dobecom/post/f7c682aa-5a79-429a-8f48-ab72ab710d8f/image.png)
- 참가자: 실제 고객, 도메인 전문가, 분석가, 개발자
- 구성 요소
- Domain Event
- 시스템에서 발생하는 중요한 이벤트
- 부착 위치 : 포스트잇을 왼쪽부터 오른쪽으로 붙여나가면서 진행
- 데이터가 아닌 비즈니스 프로세스에 집중
- 과거형 동사로 표현
- Hot Spot
- 질문, 가정, 경고, 의견 수렴이 필요한 내용
- 병목 구간, 자동화 필요한 수작업, 도메인 지식이 없는 경우
- 완전히 정의되지 않은 영역, 해결해야 하는 문제
- 부착 위치 : 필요한 곳 어디에나 부착 가능
- Command
- 부착 위치 : 도메인 이벤트와 한 쌍으로 왼쪽에 부착
- 이벤트를 트리거하는 명령
- 현재 동사로 표현
- Actor
- 부착 위치 : 작은 크기로 각 Command마다 붙임
- 사람이나 역할의 이름을 명사로 표현
- 예를 들어 주문이라는 도메인에서 회원/사용자의 표현보다는 주문자라는 구체적인 이름을 도출하는 것이 유비쿼터스 언어를 통한 도메인을 도출하는 데 도움이 됨
- Policy
- 부착 위치 : 이벤트 → 커맨드 사이
- 자동화 정책 : 이벤트가 커맨드를 시작하는 시나리오
- 커맨드는 특정 도메인 이벤트가 발생할 때 자동 실행된다
- 이벤트 할 때는 항상 커맨드 한다
- 예) 주문되는 이벤트가 발생하면 배송요청 커맨드를 호출하는 비즈니스 규칙이 있다면 정책을 추가
- External System
- 연계가 필요한 외부 시스템 또는 프로세스
- 명사(단어)로 표현
- 예) 소셜 로그인 OAuth, 이메일 발송
![](https://velog.velcdn.com/images/dobecom/post/6bb97659-1da5-476c-9d41-a2ddb61805b4/image.png)
- Aggregate
- 위치: 커맨드와 도메인 이벤트 사이에
- 도메인 이벤트와 커맨드에 의해 관리되는 데이터
![](https://velog.velcdn.com/images/dobecom/post/e9d4d9f7-9af7-4ae3-9a21-232d5c75f233/image.png)
- 실습 방법
- 도메인 이벤트 먼저 도출 (20분)
- 배치하는 팁은 이벤트 흐름에 따라 가로 또는 세로로 배치
![](https://velog.velcdn.com/images/dobecom/post/093364c8-2ec5-4c58-9577-57a7389faf80/image.png)
- 핫스팟 배치
- 예) 주문 취소됨에 대해서 가능한 시점, 정책 등 추후 깊게 논의가 필요한 점에 대해 배치
- 커맨드 배치
- 도메인 이벤트에 대한 현재동사형으로 배치
- 하나의 커맨드로 여러개의 이벤트가 연쇄적으로 발생할 경우 하나만 배치
![](https://velog.velcdn.com/images/dobecom/post/23638322-9dc1-4b92-961e-df589ffd5dab/image.png)
- Actor 식별
- “사용자”가 아닌 바운디드 내에 활동하는 명확한 이름을 정한다
![](https://velog.velcdn.com/images/dobecom/post/08ff881c-7ca2-42b1-8f42-0228aaf53784/image.png)
- 정책 식별
- 외부 시스템
- 예) 결제 모듈, 이메일 발송 시스템 연동 등
- Aggregate
- 최종적으로 식별한 Aggregate 기준으로 Bounded Context 식별
- Context를 묶는 범위는 의사결정에 따라 결정
- 예) 주문과 결제를 하나의 컨텍스트로 합치거나 또는 분리하거나
- 제품의 핵심기능으로 보는 경우 컨텍스트를 분리하기도 함
- 상품/배송 컨텍스트 같은 상용 솔루션들에서 흔히 쓰는 기능들인가, 쉽게 만들 수 있는 외주를 줄 수 있을 정도의 기능인가 에 따라 지원 서브 도메인을 도출한다
- 컨텍스트 유형을 동기 처리 or 비동기 처리 크게 두가지로 구분
![](https://velog.velcdn.com/images/dobecom/post/555554e3-686b-4006-936a-a017e88b854a/image.png)
- 컨텍스트 매핑
- 아래와 같이 실선은 동기처리, 점선은 비동기 처리 표현
- 이벤트 스토밍 결과를 헥사고널 아키텍처와 매핑
![](https://velog.velcdn.com/images/dobecom/post/17fb9ef2-e56f-48b0-afb6-9a0d60cb50f8/image.png)