개발일기
[기획 & 설계] 이벤트 스토밍 (Event Stroming) 본문
기존에 있던 프로젝트를 DDD기반으로 바꿔보려고 한다. 배운 것들이나, 적용해본 것들을 해당 프로젝트는 실력을 향상 시키는 용도이다.
지금까지 나는 요구 사항 정의서, ER Diagram 을 통하여 디비 테이블들을 만든 후 작업을 시작했었다.
어느새보면 내가 짠 테이블 컬럼과 나의 도메인에 있는 필드 값이 똑같은 형식으로 되어 있는 마법을 볼 수 있었다.. 저질스러운 마법 이것은 단순히 RDB 테이블을 class에 넣어 버린 것이기 때문에 객체지향이라고 부를 수 없다.
개발자는 전문직이고, 전문직은 충분한 설계를 바탕으로 그것을 만들어가는 것이라 생각한다. 그래서 나는 개발 중 가장 중요한 부분 중하나가 설계라는 생각이 들었다. 그래서 이번에는 새로 방법으로 접근하고자 한다.
DDD 기반으로 할 때, 다들 이벤트 스토밍을 통해 도메인 모델링 작업을 진행하는 것을 인터넷 블로그에서 확인 할 수 있었다.
참고 하실점은 .. 작성자가 심각한 색맹이라 색이 이상 할 수 있으니 이해 해주시길 바랍니다.
1. 주황색 : '도메인 이벤트' - 서비스에서 발생할 수 있는 도메인 별 이벤트
2. 노란색 : '액터' - 단순한 사용자, 고객보다 구체적인 페르소나
3. 파란색 : '액션' - 시스템에서 일어나는 일, 도메인 이벤트가 발생하는 원인
4. 초록색 : '정보' - 액터가 액션을 실행하는 데에 필요한 정보
5. 보라색 : '정책' - 도메인 이벤트와 액션 사이에 위치해서 '주로 ~할 때마다' 시작하는 정책
6. 핑크색 : '외부 시스템' - 서비스에 필요한 기능이나 직접 개발하기 어렵거나, 외부 의존성을 가지는 시스템
1. 도메인 이벤트(Domain Event) 도출
"도메인 이벤트(Domain Event) 도출" 단계는 서비스에서 발생할 수 있는 비즈니스 이벤트를 분석하는 단계이다.
이번 요구사항을 기반으로는 "포토카드 판매", "포토카드 구매", "포토카드 판매글 생성", "알림 발송" 등이 이벤트를 뜻한다.
여기서 핵심은 토론은 하지 않으며 자신의 생각대로, 포스트 잇(이벤트)을 붙인다. >> "이 이벤트가 필요할까?" 라는 질문은 절대하지 않는다.
2. 도메인 이벤트 타임 라인 순으로 정리 & 토론 시작
각각의 생각대로 도출한 도메인 이벤트를 타임 라인 순으로 정리 시작
타임 라인 순으로 정리하면서 중복이라고 생각되는 이벤트들을 제거 => 이 때, 정리하면서 필요한 이벤트만 남기는 토론을 시작
동일한 용어만으로 제거하지 않는다. => 핵심은 100% 같은 개념의 이벤트만 제거
소셜 로그인, 자체 로그인은 아예 다른 개념이기에 해당 두 개의 이벤트는 다른 이벤트
다른 하나의 포스트잇 (자주색?)에 어떤 부분에서 토론을 했는지에 대해 작성 토론을 한 도메인 옆에 붙여주기
해당 포스트잇은 토론 부분들을 해결해 나가면서 공통된 이해를 가질 수 있음.
3. 액터 & 액션 & 리드 모델 & 정책 설정 + 토론 결론
2단계 완료 후, 다시 처음 도메인 부터 천천히 , 액터 & 액션 &리드 모델 & 정책 생각나는 대로 개념에 맞다고 생각하는 포스트 잇 붙여나가기
도메인과 액터가 같다면 2단계에서 뛰어도 되지만, 액터가 다르다 판단하면 2단계에서 진행하기
액터는 구체적인 사용자 페르소나를 의미한다.
도메인 이벤트가 발생하는 원인인 "액션" 파란색 포스트잇으로 붙여나간다.
액터가 액션을 내리는데 필요한 정보 초록색 포스트잇
도메인 이벤트와 액션 사이에 위치한 정책 진한 노랑색
1. 정보 : '유저 회원가입' 액션을 하기 위한 필요한 정보
- 이메일
- 패스워드
- 아이디
- 닉네임
2. 정책 : 도메인 이벤트와 액션 사이에 위치해서 도메인 이벤트가 발생할 때마다 액션을 수행하게 하는 트리거
- "이메일 중복 체크 클릭했다." 도메인 이벤트가 발생할 때, "이메일 중복 체크를 성공했다."가 수행되는 조건
- "이미 등록된 이메일이면" : 정책
액션, 정보, 정책 보다 중요한 것은 2단계에서 붙여놨던 토론 부분들을 다시 살펴보면서 해결해나가는 과정이 핵심 과정이다.
참고자료:)
'DDD' 카테고리의 다른 글
레이어드 형식 패키지 -> DDD형식 패키지로 변경 (0) | 2025.03.22 |
---|---|
step3) 1편 DDD 세레나데 테스트를 통한 코드 보호 (0) | 2025.02.05 |
step2:) 요구사항 설계 작성 DDD 세레나데 (2) | 2025.02.02 |
유비쿼터스 언어(보편 언어)의 중요성 (0) | 2025.01.11 |
[개발 & 방법론 / DDD] 바운디드 컨텍스트 (BOUNDED CONTEXT) (0) | 2025.01.10 |