Policy
이벤트 조건에 따라 발생하는 “새로운 커맨드”를 나타낸다. (View Highlight)
“고객이 주문 요청(Command) → 주문 완료(Event) → 알림 생성 요청(Policy) → 알림 발송(Event)”으로 정리할 수 있다. 여기서 이벤트로 인해 발생하는 요청 사항을 “정책(Policy)”이라고 부르며, 라일락 색의 스티커를 사용하여 표현 (View Highlight)
Note: 정책 설명
External System
도메인 이벤트가 호출하거나 관계가 있는 “외부 시스템”을 표현할 때 사용한다. (View Highlight)
Aggregate
도메인 이벤트와 커맨드가 처리하게되는 “데이터”이다. (View Highlight)
자동차 대여점에서는 해당 요청을 처리하기 위해 필요한 자동차의 상세한 정보(차종, 연식, 주행거리 등)가 필요하게 된다. 이러한 데이터를 “어그리게이트(Aggregate)” (View Highlight)
“도메인 이벤트(Domain Event) 도출” 단계는 서비스에서 발생할 수 있는 비즈니스 이벤트를 분석하는 단계이다. 이번 요구사항을 기반으로는 “렌트 요청”, “렌트 반환”, “렌트 수락”, “렌트 거절”, “알림 발송” 등 총 5개의 이벤트를 도출하게 되었다. (View Highlight)
Note: 도메인 이벤트 추출 단계,
도메인 이벤트 추출 예시
“이벤트에 따른 정책(Policy) 도출” 단계는 도메인 이벤트 발생 후 그에 따라 추가적으로 반응하는 행위인 정책(Policy)을 도출하는 단계이다.
고객이 “자동차 렌트 요청”을 하면, 대여점에는 “렌트 요청 생성”이 발생하며, 고객 또는 대여점이 렌트를 “수락”, “거절”, “반환” 하게된다면, “렌트 상태 변경”이 발생하게 될 것이다. 또한 상태 변경시마다 알림이 전송되어 “알림 발송”도 함께 발생하게 될 것이다. (View Highlight)
Note: 이벤트 추출 후 정책 도출 단계
정책 도출 예시
“커맨드(Command)와 액터(Actor) 식별” 단계는 도메인 이벤트를 발생시키는 “행위”인 커맨드(Command)와 행위를 수행하는 “주체”인 액터(Actor) 도출하는 단계이다. (View Highlight)
Note: 3단계, 커맨드와 액터 식별
“어그리게이트(Aggregate) 매핑” 단계는 커맨드와 이벤트가 사용하는 데이터를 정의하는 단계이다. 이번 사례에서는 간략하게 “고객(Customer)”, “매장(Store)”, “알림(Notification)”등의 대표적인 데이터를 사용하였지만, 세부 단계에서는 어그리게이트 내부에서 사용하는 상세 데이터도 함께 지정하여 더욱 명확한 이벤트 스토밍을 진행 (View Highlight)
Note: 4단계, 어그리게이트 매핑 단계
커맨드와 이벤트가 사용하는 데이터를 정의
“바운디드 컨텍스트(Bound Context)” 단계는 지금까지의 결과물들을 바운디드 컨텍스트를 이용해 묶어주는 단계이다. 이벤트 스토밍이 완료되었을 때, 이 단계에서 생성된 바운디드 컨텍스트들은 각각의 마이크로 서비스가 될 가능성이 있다. (View Highlight)
Note: 5단계, 바운디드 콘텍스트 단계
4단계까지 나온 결과물을 다운디드 콘텍스트를 이용하여 묶어줌
마지막으로 “컨텍스트 매핑(Context Mapping)” 단계는 최종적으로 구성요소간의 관계를 설정하는 단계이다. 이 단계에서는 고려하지 못했던 외부 시스템(External System)이나, 추가적으로 도출된 도메인 이벤트나 커맨드 등을 포함하여 전체 시스템을 검토 (View Highlight)