이벤트 스토밍을 하는 방법

김재연·2025년 9월 7일
post-thumbnail

준비

사실 다음과 같이 이벤트 스토밍은 오프라인 공간, 도메인 전문가, 포스트잇이 사전에 필요합니다.

도메인 전문가는 이미 있으니, 오프라인 공간, 포스트잇은 피그마잼으로 해결합니다.

주의: 도메인을 전혀 모르는 상태에서는 이벤트 스토밍을 진행할 수 없습니다. 회의 이전까지 서비스가 어떠한 흐름으로 흘러가는지 파악하기 위해 적어도 게임 한판 정도는 해주셔야합니다.

순서

이번 이벤트 스토밍은 다음과 같은 순서로 진행할 예정입니다.

  1. 이벤트 정의
  • 도메인 이벤트 정의하기 (마구잡이로)
  • 중복된 도메인 이벤트 제거
  • 시간 순으로 도메인 이벤트 정렬
  1. 각각의 이벤트 구체화
  • 도메인 이벤트 트리거 정의
  • 액터를 정의
  • 도메인 정책 정의
  • 외부 시스템을 정의
  • 핫스팟 정의
  • 애그리거트 정의
  1. 애그리거트로 컨텍스트를 나누어, 애그리거트 간의 연관관계 표시
  • 정의한 애그리거트들을 묶어 바운디드 컨텍스트를 정의

명시한 모든 과정에 대한 설명을 진행한 뒤 글 마치도록 하겠습니다.

이벤트 정의

도메인 이벤트 정의하기 (마구잡이로)

우리가 첫번째로 해야할 일은 저희 서비스에서 일어날 이벤트들을 모두 정의하는 것입니다.

예를 들어 마피아가 시민을 죽임 이런 식으로 말이죠.

도메인 이벤트를 작성할 때 주의해야 할 점은 과거 형 동사로 표현해야 한다는 것입니다. 이유로는 트리거로 인해 이미 발생한 이벤트를 표현하는 것이기 때문입니다.

중복된 도메인 이벤트 제거

각자 나름대로 생각하는 이벤트를 작성했기에, 중복되는 이벤트가 다수 존재할 것입니다.

이를 함께 제거해 Distinct한 이벤트만을 남깁니다.

시간 순으로 도메인 이벤트 정렬

이는 도메인을 이해하는데 많은 도움이 됩니다. 애매하지 않고, 명확한 순서가 존재한다면 시간 순으로 이벤트를 정렬해줍시다.

모든 과정을 거치고 나면 다음과 같은 그림이 나올 것입니다.

각각의 이벤트 구체화

도메인 이벤트 트리거 정의

우리는 이전에 도메인 이벤트들을 정의했습니다.

이를 발생시킨 것을 도메인 이벤트 트리거라고 생각하시면 됩니다.

이를 작성하실 때, 주의할 점은 도메인 이벤트와 달리 현재 동사로 작성하셔야합니다.

액터를 정의

해당 이벤트를 발생시킨 액터를 정의합니다.

예를 들어

마피아가 시민을 죽임 - 마피아

와 같이 진행할 수 있습니다.

이는 사람 or 역할의 이름을 나타내야하며 명사로 표현해야합니다.

도메인 정책 정의

각각의 이벤트들은 서로 연결될 수 있습니다.

예를 들어

보라색 포스트잇이 도메인 정책이라고 보시면 됩니다.

위와 같이 될 수 있습니다.

유의해야 하는 부분은 이벤트가 트리거를 가르키고 있어야 한다는 것입니다.

외부 시스템을 정의

각각의 이벤트에는 외부 시스템이 연결되어 있을 수 있습니다.

예를 들어, 초대 링크 공유 버튼을 눌렀을 때, 카카오톡으로 바로 연결된다면 해당 이벤트의 외부 시스템은 카카오톡인 것입니다.

핫스팟 정의

이벤트 스토밍을 진행하다보면 애매한 부분이 있을 것입니다.

예를 들어

투표를 통해 한명이 죽었음 - 투표를 동일하게 받으면?

이런 식으로 할 수 있는 것입니다.

본인이 적은 사항이 누군가에게는 애매하지 않을 수 있습니다. 그렇게 되면 서로 의논을 통해서 의문을 해결할 수도, 혹은 정말 애매한 사항이라면 함께 고민해볼 수 있는 좋은 기회가 될 것입니다.

애그리거트 정의

해당 이벤트가 어떠한 애그리거트에 속해있는지 표현합니다.

도메인 이벤트, 도메인 이벤트 트리거에 의해 관리되는 데이터와 표현하는 키워드를 명사로 표현한 것이라고 보시면 됩니다.

예를 들어

Domain Event - 방 상태가 변경됨, Domain Event Trigger - 정해진 시각에 도달하거나, 정해둔 이벤트가 발생

이런 이벤트, 트리거가 존재한다면 애그리거트는 으로 표현할 수 있습니다.

이 모든 작업을 진행하고 나면 다음과 같은 결과물을 얻어낼 수 있습니다.

애그리거트로 컨텍스트를 나누어, 애그리거트 간의 연관관계 표시

정의한 애그리거트들을 묶어 바운디드 컨텍스트를 정의

애그리거트를 전부 다 정의했으면, 애그리거트를 묶어 컨텍스트를 정의해 모델의 복잡도를 낮출 것입니다. (각각의 애그리거트들에 집중하면 보기 굉장히 어렵습니다)

다음과 같이 바운디드 컨텍스트를 정의하게 되면, 도메인이 명확해지고, 각각의 애그리거트 간의 의존관계도 쉽게 파악할 수 있게 됩니다.

profile
끊임없이 '성장'하는 개발자 김재연입니다.

0개의 댓글