왜?
- DDD 를 실행하기위한 전략 이벤트 스토밍 학습
- https://www.youtube.com/watch?v=gihxS6eE1DM&t=1s
- (실 예시)https://blog.doctor-cha.com/event-storming-how-and-why
- https://devlos.tistory.com/54
- https://it-roheerumi.tistory.com/152
용어정리
기존 용어
도메인:
- 세상의 어떤 것
- 큰 문제점들
서브도메인:
- 도메인에서 각 문제의 특성에 따라 작게 나눈 것
- 작은 문제점들
- 병원전자의무기록 시스템을 개발한다면, 병원전자의무기록 도메인은 환자 기록 관리, 진료 예약 스케쥴링, 회원 정보 관리, 파일 저장 등의 서브 도메인
- 각 서브도메인은 다른 서브도메인과 구분되는 컨텍스트(맥락)을 가집니다. 예를 들어, 환자 기록 관리 서브도메인에서 환자는 병력, 진료 기록 등을 가지지만, 진료 예약 스케쥴링 서브도메인에서의 환자는 예약 일자, 예약 시간, 담당의 등을 가지게 됩니다. 실제로 두 환자가 같은 환자일지라도, 어떤 서브도메인의 컨텍스트(맥락)으로 바라보느냐에 따라 다른 개념을 포함합니다.
에그리거트(=집합)(연노랑색)
- 커맨드를 처리하여 이벤트를 발생시키는 일은 우리가 개발할 시스템이거나 외부 시스템이 될 수 있습니다.
- 이 중 우리가 개발할 시스템을 애그리게잇이라고합니다.
- 애그리게잇은 “무엇”이 커맨드를 처리하고 이벤트를 발생시키는지,
- 시스템의 가해진 변경 사항이 하나의 트랜잭션을 통해 데이터베이스에 커밋되어야 하는 범위를 말합니다.
- 예를 들어, “주문 상태를 확정으로 변경 요청” 커맨드를 처리해 “주문 상태가 확정으로 변경됨” 이벤트를 발생시키는 “주문” 애그리게잇, “가격 정책 생성 요청”을 처리해 “가격 정책 생성됨” 이벤트를 발생시키는 “가격 정책” 애그리게잇이 있을 수 있습니다.
비즈니스 규칙(연노란색)
유효성 검사(커멘드, 도메인 이벤트 사이에 존재)
시스템이 기대하는 책임을 수행하며, 일관성을 유지하는데 도움
일관성은 항상 참이어야 하는 속성을 유지함으로 달성
이벤트 스토밍 필수 용어
도메인 이벤트(주황색)
- 도메인 전문가가 관심있는 어떤 사건
- 이벤트 발생 = 상태 변경을 의미
- 단순한 조회 X
- 조회로 인한 조회수 향상 된다면 조회도 포함 O
- 이벤트 이름은 과거에 일어났던 일이기때문에 과거 시제 사용
핫스폿(자주색)
- 2단계에서 발생한 질문, 갈등, 불평, 불만사항
- 당장 토론하지않고, 나중에 문제 해결시 제거
액터(노란색)
- 단순한 사용자보다는 고객, 배달원 등 구체적인 페르소나를 설정
시스템(분홍색)
- 외부시스템부터 레거시 및 마이크로서비스에 이르기까지 포함하는 시스템
커맨드 또는 액션(파란색)
- 시스템에서 일어나는일
- 도메인 이벤트가 발생하는 원인
리드 모델 또는 정보(초록색)
- 결정을 내리는데 필요한 정보(화면정보)
- 특정 정책으로 인해 발생한 도메인 이벤트 결과 -> 리드 모델에 반영 가능
정책(연보라색)
- 주로 [~할때마다] 라는 단어로 시작
- 도메인 이벤트와 커멘드 사이에 위치한다
- 수동이든 자동이든 정책가능
바운디드 컨텍스트
- 같은 용어라도 의미가 다르고, 같은 대상이라도 지칭하는 용어가 다름
- 타이어라는 개념이 타이어 바운디드 컨텍스트에서는 타이어라고 불리지만, 주문 바운디드 컨텍스트에서는 상품이라고 불릴 수 있습니다.
- 정의한 보편 언어가 통용되는 경계를 포스트잇 사이에 선으로 그어 바운디드 컨텍스트를 구분
- 명백한 언어 불일치는 동일한 프로세스에서 여러 개 바운디드 컨텍스트 나타내는 지표
- 큰 문제(도메인)를 작은 문제(서브 도메인)로 나누고 각각의 해결 영역으로 나눈것
- 바운디드 컨텍스트는 서브도메인의 문제를 해결하기 위한 해결책의 범위입니다. 해결책의 범위이기 때문에 구현 측면에서는 모듈(컴포넌트)에 대응되고, 조직 측면에서는 해결책 시스템을 개발하고 관리하는 하나의 팀에 대응됩니다. 이상적인 경우 하나의 바운디드 컨텍스트가 한 서브도메인에 대응되지만, 하나의 바운디드 컨텍스트가 여러 서브도메인을 포함하는 경우도 있습니다. 바운디드 컨텍스트는 보편 언어가 통용되는 범위이기도합니다.
- 위 예시에서 환자가 서브도메인에 따라 다른 개념을 가졌듯이, 바운디드 컨텍스트마다 동일한 용어라도 다른 의미를 가질 수 있습니다. 또한 같은 개념이라도 바운디드 컨텍스트마다 다른 용어로 표현될 수도 있습니다.
소통의 부재
- 사일로 전문 개발자, 도메인 모르는 개발자로 구성되면, 문제해결 어려움
- 모든 사람이 동일한 개념 다른 용어를 사용하여, 소통의 어려움
이벤트 스토밍 과정
- 1단계: 탐험
- 각자 알고있는 도메인 이벤트 모두 작성
- 토론 X
- 위원회 금지(자유침범)
- 2단계: 타임라인 적용
- 모든 도메인 이벤트를 올바른 타임라인으로 재정렬
- 이때 실제 중복되는 이벤트는 제거
- 이벤트 시간은 왼쪽-> 오른쪽 으로 흐름
- 위부터 아래는 동시간 이벤트
- 드라이버, 네비게이터 이외에는 포스트잇 수정 금지
- 스포일러 금지
- 모든 도메인 이벤트를 올바른 타임라인으로 재정렬
- 3단계: 전체 구조 이해 공유 및 핫스폿 수집
- 4단계: 후속조치
- 핫스폿 이슈화
- 용어사전 만들기
- 특정 도메인 더 깊게 탐구
- 경계 그려 문제 해결
이벤트 스토밍 전체 그림
이벤트 스토밍 실 예시(참고자료)
(좋은 예시 제공 정말 감사합니다.)
이벤트 도메인과 핫스팟
- 전체 그림(정책은 보라색이 아닌 연파랑 사용됨)