DDD 이벤트 스토밍



개요

이벤트 스토밍 (출처)


이벤트 스토밍은 DDD 설계를 가속화할 수 있는 설계 기법입니다.
이벤트 스토밍 워크숍은 이벤트 중심으로 이해관계자들이 모여 브레인 스토밍하는 워크숍을 의미합니다.
모든 이해관계자가 모여 서로의 관점을 논의하며 지식을 공유하고 협업을 가속화하고 시각화 합니다.
다양한 스티커를 표현 도구로 사용하여 시스템을 분석하게 됩니다.


준비

워크숍을 진행하려면 다음과 같은 사항을 준비합니다.

  • 공간
    • 깨끗한 벽이 있는 넓은 워크숍 공간
  • 참가자
    • 고객
    • 도메인 전문가
    • 설계자
    • 개발자
    • 테스터
    • 등등 모든 이해관계자
  • 준비물
    • 벽에 붙일 흰색 A0 전지
    • 마커 펜
    • 다양한 색의 스티커
    • 라인테이프
    • 스카치 테이프
  • 열린 분위기로 활동을 촉진하고 리딩할 수 있는 퍼실리테이터 (참여 유도하는 MC 같은 사람..)



방식

이벤트 스토밍은 현실 세계의 도메인을 다양한 의미의 스티커로 표현합니다.
(각 진행 순서와 스티커 색상은 프로젝트마다 적절히 변경해서 사용합니다)


스티커 색상별 유형
유형 크기/색깔 설명
도메인 이벤트 오렌지색 발생한 사건 (과거시제동사로 표현)
커맨드 파란색 도메인 이벤트를 트리거하는 명령
외부 시스템 핑크색 도메인 이벤트가 호출하거나 관계가 있는 레거시 또는 외부 시스템
액터 작은 노란색 개인 또는 조직의 역할
애그리거트 노란색 도메인 이벤트와 커맨드가 처리하는 (상태가 변경되는)데이터
정책 보라색 이벤트 조건에 따라 진행되는 결정 :point_right: When [이벤트] Then [커멘드]
읽기 모델 초록색 도메인 이벤트 액터에게 제공되는 데이터
사용자 인터페이스 흰색 스케치 형태의 화면 레이아웃
핫스팟 빨간색 의문, 질문, 미결정 사항



이벤트 스토밍을 진행하는 순서는 다음과 같습니다.


  1. 도메인 이벤트 정의
    업무 처리 흐름별로 도메인 이벤트를 정의합니다. (왼쪽에서 오른쪽 방향)
    • 오렌지색 스티커
    • 과거형으로 기술 (ex. 포인트 적립됨)
    • 이슈/개선 사항/관심/재논의(핫스팟) 는 빨간색
    • 중간중간 중복된 내용을 제거합니다.
    • 동시에 수행되는 내용은 수직으로 내립니다.


  1. Tell the Story
    업무 흐름을 설명하고 논의합니다.


  1. 커멘드 정의
    각 도메인 이벤트를 발생시키는 명령(사용자 명령)을 현재형으로 정의합니다.
    • 파란색 스티커
    • 도메인 이벤트 왼쪽에 붙입니다.
    • 커멘드 하나에 1개 이상의 이벤트가 발생할 수 있습니다.


  1. 액터 정의
    커멘드를 발생시키는 주체를 정의합니다.
    • 노란색 작은 원형 스티커
    • 커멘드 왼쪽 아래에 붙입니다.


  1. 외부 인터페이스 식별
    이벤트와 연관된 외부 시스템(인터페이스)을 정의합니다.
    • 핑크색 스티커


  1. 애그리거트 찾기
    커멘드를 수행하기 위해 CRUD 해야 하는 데이터 객체를 정의합니다.
    애그리거트는 한 단위로 취급 가능한 경계 내부의 도메인 객체입니다.
    • 노란색 스티커
    • 데이터 객체란 엔티티, VO 집합입니다.


  1. 정책 정의
    이벤트 발생 시 타 영역의 커멘드를 트리거하는 정책을 정의합니다.
    • 보라색 스티커
    • 이름, 이메일 validation, 주민 번호 뒷자리 마스킹 검사 등 이벤트 발생 시 타 영역 커멘드 발동



다음과 같은 흐름대로 시스템을 분석합니다.

이벤트 스토밍의 개념
  • 시스템의 액터(사용자 or 역할자)는 원하는 바를 얻기 위해 시스템을 조작(커멘드)합니다.
  • 조작은 시스템을 동작하게 하고 사용자의 요청에 해당하는 데이터(읽기 모델)을 만듭니다.
  • 이 정보는 간단한 스케치 형태의 UI(사용자 인터페이스) 형태로 액터에서 제공됩니다.
  • 액터는 이 정보를 바탕으로 다시 시스템을 조작하고, 시스템이 동작하는 절차를 반복합니다.