Blog
이벤트 스토밍 – MSA 설계 이렇게 하면 된다.
이벤트 스토밍으로 MSA 설계를 최적화하고, 도메인 모델링과 시스템 경계를 명확히하는 전략을 확인하세요.
2025년 02월 07일
![MSAP-event storming Spring Cloud 란 무엇인가요? MSA 필수 기술 구현](https://www.msap.ai/wp-content/uploads/2025/02/MSAP-event-storming-1200x400.webp)
이벤트 스토밍- MSA 설계
이벤트 스토밍은 단순한 회의가 아니라, 도메인이라는 복잡한 시스템을 이해하기 위한 일종의 탐험입니다. 이해관계자, 도메인 전문가, 그리고 개발자가 함께 참여하여 도메인 내에서 발생하는 주요 이벤트들을 식별하고, 이를 통해 자연스러운 경계를 발견하는 데 목적을 둡니다. 마치 고고학자가 유물을 발굴하듯, 이 워크샵을 통해 우리는 시스템의 핵심적인 요소들을 찾아낼 수 있습니다.
이벤트 스토밍(Event Storming) 워크샵 이 무엇인가요?
이벤트 스토밍 워크샵은 도메인 전문가, 이해관계자, 개발자 등이 한자리에 모여 도메인의 핵심 이벤트를 도출하고, 이를 통해 도메인의 전체 흐름과 자연스러운 경계를 파악하는 기법입니다. 이 과정은 도메인의 복잡성을 체계적으로 분석하고, 설계 및 개발에 필요한 인사이트를 제공하는 데 큰 도움을 줍니다.
- 주요 이벤트 식별
- 예를 들어 ‘주문 생성됨’이나 ‘결제 완료됨’과 같이 도메인의 핵심 흐름을 나타내는 이벤트들을 먼저 식별합니다. 이러한 이벤트들은 시스템이나 비즈니스 프로세스에서 발생하는 중요한 변화들을 의미합니다.
- 도메인 흐름 시각화
- 도출된 이벤트들을 시간 순서에 따라 배치하고, 이벤트 간의 연관성을 시각적으로 표현함으로써 전체 도메인의 흐름을 한눈에 파악할 수 있습니다. 이를 통해 각 이벤트가 발생하는 맥락과, 이벤트들 사이의 상호작용을 명확하게 이해하게 됩니다.
- 경계 도출
- 이벤트들을 분석하면서 자연스럽게 서로 연관되어 있는 부분과 그렇지 않은 부분의 경계가 드러납니다. 이 경계를 바탕으로 Bounded Context를 정의하면, 각 컨텍스트가 담당하는 역할과 책임이 명확해집니다.
이러한 워크샵을 통해 도메인의 복잡성을 체계적으로 분석할 수 있으며, 핵심 개념과 프로세스를 명확하게 이해하는 데 큰 도움이 됩니다.
이벤트 스토밍 워크샵 : 6단계 핵심 프로세스 정리
이벤트 스토밍 워크샵은 다음과 같이 6단계로 구성되며, 각 단계는 이전 단계의 결과를 바탕으로 점진적으로 도메인 모델을 구체화합니다. 준비 → 이벤트 식별 → 타임라인 구성 → 확장 요소 추가 → 컨텍스트 분할 → 검증
1. 준비 단계: 워크샵 환경 조성
이 단계는 워크샵을 시작하기 위한 사전 준비 단계입니다. 마치 화가가 캔버스와 물감을 준비하듯, 워크샵을 위한 환경을 조성합니다.
- 공간 확보: 넓고 편안한 공간을 확보하여 참여자들이 자유롭게 의견을 교환할 수 있도록 합니다. 화이트보드, 대형 종이 등을 활용하여 시각적인 자료를 공유할 수 있도록 합니다.
- 도구 준비 : 다양한 색상의 포스트잇, 마커, 테이프 등 워크샵에 필요한 도구를 준비합니다.
- 참여자 구성 : 도메인 전문가, 이해관계자, 개발자 등 다양한 관점을 가진 참여자들을 구성합니다.
- 목표 설정 : 워크샵의 목표와 범위를 명확하게 설정하고 공유합니다.
2. 핵심 이벤트 도출: 도메인의 맥박 짚기
이 단계는 도메인에서 발생하는 중요한 사건들을 식별하는 과정입니다. 마치 의사가 환자의 맥박을 짚듯, 도메인의 핵심적인 변화들을 포착합니다.
- 이벤트 정의 : 이벤트는 비즈니스 프로세스에서 발생하는 중요한 변화를 의미하며, 과거형으로 표현합니다 (예: “주문 생성됨”, “결제 완료됨”). 구체적인 이벤트 위주로 식별합니다.
- 이벤트 기록 : 각 참여자는 자신이 생각하는 주요 이벤트를 포스트잇에 기록합니다. 다양한 관점을 통해 이벤트를 빠짐없이 도출합니다.
- 질문 활용 : 이벤트 식별에 도움이 되는 질문들을 활용합니다.
- 어떤 일이 발생했을 때 시스템 상태가 바뀌는가?
- 비즈니스 프로세스에서 중요한 전환점은 무엇인가?
- 어떤 사건이 다른 사건을 유발하는가?
3. 이벤트 타임라인 구성: 이벤트 흐름 그리기
이 단계는 식별된 이벤트들을 시간 순서대로 배열하고, 이벤트 간의 연관성을 시각적으로 표현하는 과정입니다. 마치 역사가가 연대기를 만들듯, 이벤트들을 연결하여 도메인의 흐름을 파악합니다.
- 이벤트 배열 : 이벤트들을 시간 순서대로 (일반적으로 왼쪽에서 오른쪽으로) 배치합니다.
- 중복 제거 및 수정 : 중복되거나 모호한 이벤트를 그룹화하거나 수정합니다.
- 관계 표현 : 화살표 등을 사용하여 이벤트 간의 인과관계를 표현합니다.
- 토론 및 협의 : 이벤트 순서와 관계에 대해 참여자들과 토론하고, 이견을 조율합니다.
- 시각적 도구 활용 : 화이트보드, 큰 종이, 포스트잇 등 시각적 도구를 활용하여 이벤트 흐름을 명확하게 표현합니다.
4. 확장 요소 추가: 이벤트 맥락 심화
이 단계는 타임라인에 배치된 이벤트 기반으로, 이벤트의 맥락을 더욱 심화시키는 단계입니다. 커맨드, 액터, 정책, 정보 등과 같은 확장 요소를 도출합니다.
- 커맨드 도출 : 각 이벤트를 유발하는 행위 (커맨드)를 도출합니다. (예: “주문 생성됨” 이벤트의 커맨드는 “주문 생성 요청”입니다.)
- 액터 도출 : 커맨드를 수행하는 주체 (액터)를 도출합니다. (예: “주문 생성 요청” 커맨드의 액터는 “고객”입니다.)
- 정책 도출 : 이벤트 발생 시 필요한 조건 및 비즈니스 규칙 (정책)을 도출합니다. (예: “재고 부족 시 주문 불가”와 같은 비즈니스 규칙)
- 정보 도출 : 이벤트 처리 시 필요한 정보들을 도출합니다. (예: “주문 생성됨” 이벤트 시 필요한 주문 정보, 고객 정보 등)
- 색상 구분 : 다양한 색상의 포스트잇을 사용하여 각 요소를 명확하게 구분합니다. (예: 커맨드는 파란색, 액터는 노란색, 정책은 초록색, 정보는 보라색)
5. 바운디드 컨텍스트(Bounded Context) 분할: 도메인 경계 설정
이 단계는 이벤트 흐름과 확장 요소를 분석하여 도메인의 자연스러운 경계를 식별하고, Bounded Context를 정의하는 단계입니다. 마치 지리학자가 산맥과 강을 기준으로 지역을 구분하듯, 도메인 내의 경계를 설정합니다.
- 경계 식별 : 유사한 이벤트 및 확장 요소들을 묶어 Bounded Context의 경계를 설정합니다.
- 컨텍스트 정의 : 각 Bounded Context의 역할과 책임을 명확하게 정의합니다.
- 질문 활용 : 경계 식별에 도움이 되는 질문들을 활용합니다.
- 어떤 이벤트들이 함께 모여 있는 것이 자연스러운가?
- 어떤 이벤트들이 서로 다른 맥락에서 발생하는가?
- 어떤 이벤트들을 하나의 책임 단위로 묶을 수 있는가?
6. 검증 및 정리: 결과물 완성
이 단계는 워크샵에서 도출된 결과물을 검토하고, 필요한 부분을 보완하며, 최종적으로 결과를 정리하는 단계입니다. 마치 건축가가 설계도를 검토하고 수정하듯, 워크샵 결과를 검증하고 정리합니다.
- 검토 : 각 단계에서 도출된 요소들이 올바르게 연결되었는지 확인합니다. 특히 이벤트, 커맨드, 액터 간의 연결성을 확인합니다.
- 컨텍스트 간 의존성 분석 : Bounded Context 간의 의존성을 분석합니다. (예: “결제 완료” 이벤트가 “배송 시작” 이벤트에 영향을 미치는 관계 등)
- 결과물 문서화 : 워크샵 결과를 문서화하거나 디지털 도구(예: 피그잼, Miro 등)를 활용하여 보관합니다. 타임라인 다이어그램, 컨텍스트 맵, 비즈니스 규칙 명세서 등을 작성하여 결과를 체계적으로 정리합니다.
이벤트 스토밍의 핵심 원칙
이벤트 스토밍의 핵심 원칙은 도메인을 깊이 이해하고 효과적인 시스템 설계를 위한 기반을 마련하는 데 있습니다. 이를 통해 숨겨진 중요한 정보를 명확히 하고, 시스템의 흐름과 책임 범위를 체계적으로 정리할 수 있습니다. 각 원칙이 상호 보완적으로 작용하여 협업을 촉진하고, 결과적으로 더 정교한 아키텍처 설계로 이어집니다.
- 이벤트는 과거형으로 구체화
- 명확한 사건 기록 : 실제로 발생한 사건만을 기록함으로써, “어떤 일이 있었는지”를 구체적으로 파악합니다.
- 추상성 배제 : “데이터 변경됨”과 같이 모호한 표현 대신 “주문 상태가 ‘배송 준비중’으로 변경됨”과 같이 구체적인 과거형 서술을 사용합니다.
- 컨텍스트는 자연스러운 이벤트 그룹에서 도출
- 자연스러운 그룹화 : 도메인 내 여러 이벤트들을 서로 연관성이 높은 그룹으로 분류함으로써, 도메인의 경계(Bounded Context)를 도출합니다.
- 책임 분리 : 각 그룹이 담당하는 역할과 책임을 명확히 하여, 시스템의 모듈화를 돕습니다.
- 모든 단계는 협업과 반복적 검토를 거침
- 팀워크 중심 : 이벤트 스토밍은 다양한 팀 구성원들이 참여해 의견을 공유하고, 각자의 시각을 반영할 수 있도록 협업을 강조합니다.
- 지속적 개선 : 초기 도출된 이벤트와 그룹화를 반복적으로 검토하고 수정하면서, 도메인의 이해도를 높이고 정확한 시스템 설계를 도출합니다.
이벤트 스토밍 워크샵 추가적으로 알아야 할 내용
이벤트 스토밍은 단순한 회의가 아니라, 시스템을 깊이 이해하고 도메인의 흐름을 명확히 정리하는 과정입니다. 워크샵을 효과적으로 운영하려면 사전에 필요한 요소들을 충분히 고려하고, 참여자들이 적극적으로 협업할 수 있는 환경을 조성해야 합니다. 이를 위해 워크샵의 목적과 범위를 명확히 정의하고, 적절한 도구와 프로세스를 활용하여 효율성을 극대화하는 것이 중요합니다.
- 워크샵 유형
- 이벤트 스토밍 워크샵에는 다양한 유형이 있습니다. Big Picture Event Storming, Process Level Event Storming, Software Level Event Storming 등이 있습니다. 워크샵의 목적과 범위에 따라 적절한 유형을 선택해야 합니다.
- 참여자 역할
- 워크샵 참여자는 다양한 역할을 수행합니다. 퍼실리테이터는 워크샵을 진행하고, 도메인 전문가는 도메인 지식을 제공하고, 개발자는 기술적인 관점을 제시합니다. 각자의 역할을 명확히 이해하고 워크샵에 참여하는 것이 중요합니다.
- 도구 활용
- 이벤트 스토밍 워크샵은 다양한 도구를 활용할 수 있습니다. 온라인 화이트보드, 협업 소프트웨어 등을 활용하면 원격으로도 효율적인 워크샵을 진행할 수 있습니다.
- 반복과 개선
- 이벤트 스토밍 워크샵은 한 번으로 끝나는 것이 아니라, 반복적으로 진행하면서 개선해 나가야 합니다. 워크샵 결과를 바탕으로 Bounded Context를 정의하고, 시간이 지남에 따라 변화하는 요구사항을 반영해야 합니다.
마무리
정리된 단계를 참고하여 워크샵을 진행하시면 도메인 지식을 팀 전체가 공유하고, 향후 시스템 설계 및 개발에 중요한 가이드라인으로 활용할 수 있습니다.
- 도메인 이벤트 식별과 이벤트 스토밍 워크샵은 본질적으로 도메인 내의 중요한 변화를 구체적으로 식별하고, 이를 시간 순으로 시각화하며, 자연스러운 경계를 도출하는 과정으로 이어집니다.
- 이를 통해 팀 전체가 도메인의 핵심 흐름과 전환점을 공유할 수 있고, 향후 시스템 설계 및 개발에 있어 중요한 가이드라인을 마련할 수 있습니다.