⚡ Kubernetes & MSA 5일차
📌 이벤트 스토밍이란?
⭐ DDD(Domain Driven Design)
🔷 그것을 사용하는 사람들의 영역 또는 지식 영역을 중심으로 한 소프트웨어 개발 철학
- 이 접근법은 필요한 사람들의 복잡한 요구 사항에 초점을 맞추고 불필요한 것에 노력을 낭비하지 않는 소프트웨어 개발을 가능하게 한다.
⭐ 마이크로서비스 이벤트 스토밍
🔷 소프트웨어를 개발하고자 하는 도메인에서 어떤 일들이 이뤄지고 있는지 빠르게 파악할 수 있는 워크샵 형태의 방법
- 개발자 뿐만 아니라, 도메인 전문가, 기획자, 디자이너, 테스터 등 해당 소프트웨어 개발의 모든 이해관계자들이 참여한다.
- 참여자들은 이벤트, 커맨드, 리드 모델, 애그리게잇, 외부 시스템 등을 나타내는 서로 다른 색깔의 포스트잇들을 벽에 붙여가며 이벤트 스토밍을 진행하게 된다.
⭐ 이벤트 스토밍 사전준비
- 공간: 깨끗한 벽을 가진 넓은 워크샵 공간
- 참가자: 고객, 도메인전문가, 설계자, 개발자, 테스터 등 모든 이해 관계자
- 준비물: 벽에 붙일 A1 하얀색 전지, 마커 펜, 다양한 색의 포스트잇, 줄을 그릴 수 있는 다양한 색깔의 끈 테이프, 스카치테이프
- 마음가짐: 적극적이고, 긍정적이며 열린 마음가짐, 대화하고 토론하고 나설 수 있는 용기, 열린 분위기로 활동을 촉진하고 리딩할 수 있는 퍼실리테이터
⭐ 진행 과정
- 이벤트스토밍에 필요한 화이트 보드 벽면과 수행에 필요한 스티커를 준비
- 도메인 전문가와 기획자, 개발 전문가와 함께 사용자 시나리오, 또는 업무 요건을 리뷰한다.
- 가장 먼저, 발생 가능한 Event를 무작위로 도출하고, Policy, Command, Ageregate 순서로 이벤트를 중심으로 스 티커별 해당 내용을 정의하고 발생시간 순서로 벽면에 부착한다.
- Bounded Context 를 설정하고 서브 도메인 간의 컨텍스트 매핑을 통해 BC간의 정보 참조의 릴레이션을 정의한다.
⭐ 이벤트 스토밍 효과
- 커뮤니케이션 비용 절감
- 누락된 기획 보충
📌 서비스를 어떻게 나눌것인가?
[Step1] Event 정의
- 가장 먼저 서비스에서 발생하는 비즈니스 이벤트를 도출한다.
- 가급적 현업이 사용하는 용어를 그대로 사용(Ubiquitous Language)하여 오렌지색 스티커에 이벤트를 기술하고 이를 벽면에 붙인다
- 비즈니스 이벤트는 과거형으로 작성하는데 도메인 내부에 상태가 변화되고 난 결과가 이벤트다.
[Step2] Policy 정의
- 이벤트스토밍의 두번째 수행 대상은 폴리시(Policy) 도출.
- 폴리시(Policy)는 이벤트가 발생한 후 연이어 발생하는 반응형 액션으로, 한 서비스 이벤트에 대해 수행되어야 할 타 서비스의 액션들로, 먼저 정의된 이벤트 아래에 덧대어 붙인다.
- 하나의 이벤트에 반응하여 수행되어야 할 폴리시는 여러 팀에서 도출된 멀티 액션이 존재할 수 있다.
[Step3] Command 도출
- 세번째로 Event를 발생시키는 행위인 커맨드를 도출하는데, 도메인 내의 어떠한 상태 변화를 일으키는 서비스를 말한다.
- 웹 페이지 내에서 버튼을 클릭하는 User Decision이 여기에 해당된다.
- 도출된 커맨드는 이벤트 스티커 앞쪽에 붙여, 스티커를 통한 나레이션(Narration)이 되도록 정렬한다.
[Step4] Actor 정의
- Actor는 커맨드를 발생시키는 주체(사람, 시스템 등)를 말한다.
- Actor는 담당자 또는 시스템이 될 수 있으며, 직관적으로 파악될 수 있는 액터의 경우, 표시하지 않아도 무방하다.
- 도출된 액터는 유저 스토리에 가까운 나레이션이 가능하도록 해당 커맨드 스티커 왼쪽에 배치한다.
[Step5] Aggregate 정의
- Aggregate는 '결합물'을 의미하는데 어떠한 도메인 객체를 중심으로 하나의 ACID한 트랜잭션에 묶여 변화되어야 할 객체의 묶음을 도출하고, 그것들을 커맨드, 이벤트와 함께 묶는다.
[Step6] Bounded Context 도출
- Bounded Context는 동일한 문맥으로 효율적으로 업무 용어(도메인 클래스)를 사용할 수 있는 객체 범위를 뜻한다.
- 하나의 BC는 하나 이상의 aggregate를 원소로 구성될 수 있다.
- 이 BC를 마이크로서비스 구성 단위로 정하게 되면 이를 담당하는 팀내의 커뮤니케이션이 효율화 된다.
[Step7] Context 매핑
- Bounded Context까지 도출된 이후에 BC간 정보 참조 릴레이션 설정(혹은,이벤트가 발생한 이후 동반된 행위의 호출관계를 선으로 표시)하는 작업을 ‘Context매핑’ 이라고 한다.
- 컨텍스트 간 매핑 정보만 보더라도 전체 도메인 서비스의 참조 토폴로지(Topology)를 한 눈에 파악 가능하다.
📌 직접 해보기
- 결제 완료 -> 결제 취소 -> 환불 과정 이벤트 스토밍

링크
특강이 끝났다.
가치있는 정보들을 정말 많이 접할 수 있어 좋았다.