이벤트스토밍
이벤트스토밍
Event와 BrainStorming의 합성어로 이벤트를 중심으로 업무들 간에 상호 연관성을 찾기 위해 포스트잇으로 진행하는 MSA DDD를 위한 실천 방법론이다.
적용배경
모든 사람이 동일한 개념에 대해 다른 용어를 사용하거나, 다른 개념에 대해 동일한 용어를 사용해 의사소통에서 어려움을 발생시킴.
하나의 기능을 개발하기 위해 여러 동료에게 물어봐야하는 상황도 생길 수 있음.
Step 1. [Event 정의]
정의 : 이벤트는 도메인 내부 상태가
변화되고 난 결과를 말한다.
작성법 : 서비스에서 발생하는 비즈니스 이벤트를 도출해야하는데, 이를 Ubiquitous Language(현업 공통언어)를 사용하여 작성한다.
주의 : 과거형으로 작성해야한다.
Step 2. [Policy 정의]
정의 : 이벤트가 발생한 후 연이어 발생하는 반응형 액션을 말한다.
작성법 : 서비스 이벤트에 대해 수행되어야할 타 서비스의 액션들을 말하며 앞서 작성된 이벤트 아래에 덧대여 붙이거나 옆에 붙이는 편이다.
주의 : 하나의 이벤트에 대해 멀티 액션이 존재할 수 있다.
Step 3. [Command 도출]
정의 : 이벤트를 발생시키는 행위이자 도메인 내 상태 변화를 일으키는 서비스를 말한다. 버튼 클릭, 드래그 같은 유저의 행위를 생각하면 된다.
작성법 : 이벤트 스티커의 앞쪽에 붙이며, 스티커로 Narration(스토리 흐름 전개)가 파악되도록 정렬한다.
주의 : 명사형으로 작성해야한다.
Step 4. [Actor 정의]
정의 : 커맨드를 발생시키는 주체를 말하며 유저, 담당자, 시스템 등을 말한다.
작성법 : 액터는 커맨드 스티커 왼쪽에 배치해 유저 스토리 흐름 전개(User Narration)가 이해되도록 한다.
주의 : 액터의 특성에 따라 시스템과 상호작용이 달라질 수 있으며, 만약 액터가 명확한 역할을 가지지 않으면 요구사항의 혼란을 일으킬 수 있다.
Step 5. [Aggregate 정의]
정의 : 도메인 객체를 중심으로 하나의 트랜잭션에 묶여 변화되어야 할 객체의 묶음을 말한다.
작성법 : 묶음되어야할 유저 스토리 흐름 전개(User Narration)을 모아 같이 묶는다.
주의 : Root Aggregate Entity를 기준으로 한다.
Step 6. [Bound Context 도출]
정의 : 동일한 문맥으로 효율적으로 업무 용어를 사용할 수 있는 객체 범위를 말한다.
작성법 : 하나 이상의 Aggregate 묶음을 원소로 구성해 마이크로서비스 구성 단위로 정한다.
주의 : Bound Context의 경계는 서비스 경계와 일치해야하며, Bound Context의 구성요소들은 요구사항에 따라 수정이 가능해야한다.
Step 7. [Context Mapping]
정의 : Bound Context 간 참조 릴레이션 설정을 말한다.
작성법 : 여러 Bound Context 간 참조 Topology가 파악 가능하게 작성한다.
주의 : Bound Context의 목적, 역할, 그리고 다른 Context와의 관계를 고려해야한다.
그 외. [Hot Spot]
질문 또는 미결정 사항을 적어 비스듬하게 붙여놓고 해결될 경우 탈착
https://www.msaschool.io/operation/design/design-three/
https://www.youtube.com/watch?v=gihxS6eE1DM