이벤트 스토밍(Event Storming)
시작하면서
구성원이 수긍하는 유비쿼터스 언어나 바운디드 컨텍스트를 정하려면 어떻게 해야 할까?
비즈니스에 참여하는 구성원이 모여서 소통하고 정해야 할 것이다.
그러면 책상에 앉아 회의처럼 이야기해야 할까? 그럼 전체적으로 정하는데 많은 시간이 소비되고 피로도가 쌓일 것이다.
어떤 방식으로 해야할까?
알베르토 브란돌리니(Alberto Brandolini)가 제안한 비즈니스 도메인을 빠르게 탐색하고 학습할 수 있는 이벤트 스토밍에 대해 알아보자.
이벤트 스토밍이란?
도메인 전문가와 개발자를 학습 과정에 참여시키기 위한 빠른 설계 기술이다.
클래스와 데이터베이스가 아닌 비즈니스 및 비즈니스 프로세스에 중점을 둔다.
모든 사람이 동일한 수준으로 접근할 수 있게 시각적인 접근 한다.
진행 방법
큰 벽이나 화이트보드에 포스트잇을 붙여 나간다.
- 포스트잇마다 비즈니스 프로세스를 단계별로 적는다.
이벤트 스토밍의 가치는 포스트잇이 아닌 커뮤니케이션이다.
- 구성원을 통해 부족한 비즈니스를 채울 수 있다.
- 서로 다른 비즈니스를 하나로 통일할 수 있다.
보기 편하게 큰 글씨로 작성하고, 펜은 번지지 않는 것으로 쓴다.
도메인 이벤트(DOMAIN EVENT)
도메인 전문가가 관심을 가지고 있는 어떤 사건으로
이벤트가 발생했다는 것은 상태가 변경되었다는 것을 의미한다.
보통 '~할 때', '~가 발생하면', '만약 ~하면'과 같은 요구사항은 상태 변경인 경우가 많고, 이런 요구사항은 이벤트로 구현할 수 있다.
COMMAND
- 이벤트가 발생하는 원인
AGGREGATE
- 데이터 오너십
- 독립적인 라이프사이클
- 독립적인 확장성
- 보통 AGGREAGATE를 기준으로 BOUNDED CONTEXT를 나눈다.
특징
- 혼자보다 다 같이 하는 것이 빠르다.
- 구현 코드보다 포스트잇을 변경하는 게 훨씬 저렴하다.
- 커뮤니케이션을 통해 비즈니스 프로세스 자체를 잘 이해하고 개선한다.
- 팀이 비즈니스(도메인)와 코드로 표현되는 모델의 차이를 이해하고 수정하도록 돕는 것이 중요하다.
- 가장 일반적으로 발생하는 문제는 도메인 모델로 개발된 소프트웨어가 전문가의 생각과 괴리감이 크다는 것.
이벤트 스토밍 참여자
사용자
- 불특정 다수의 소프트웨어 사용자
- 애플리케이션에 대한 요구사항을 갖고 있다.
도메인 전문가
- 프로젝트에서 자신의 활동 범위가 개발이 아닌 애플리케이션 도메인인 구성원
- 단순히 불특정 다수의 사용자가 아니라 주제에 대한 깊은 지식을 갖추고 있음
- 도메인을 이해하는데 부자연스럽고 부정확한 용어 및 구조에 반대 의사를 표명해야 한다.
개발자
- 프로젝트에서 자신의 활동 범위가 개발인 구성원
- 시스템을 서술적이고 기능적인 용어로 이해하고 토론할지는 모르지만 전문가들의 언어에 담긴 의미는 알지 못한다.
- 개발자는 설계를 어렵게 만드는 모호함과 불일치를 찾아내는 데 촉각을 곤두세워야 한다.
자산화
진행된 이벤트 스토밍을 자료로 남긴다.
온라인으로 진행할 경우 Miro 를 이용한다.