MSA 이벤트 스토밍

Bzeromo·2023년 2월 24일
0

MSA

목록 보기
5/10
post-thumbnail

⚡ Kubernetes & MSA 5일차


📌 이벤트 스토밍이란?

⭐ DDD(Domain Driven Design)

🔷 그것을 사용하는 사람들의 영역 또는 지식 영역을 중심으로 한 소프트웨어 개발 철학

  • 이 접근법은 필요한 사람들의 복잡한 요구 사항에 초점을 맞추고 불필요한 것에 노력을 낭비하지 않는 소프트웨어 개발을 가능하게 한다.

⭐ 마이크로서비스 이벤트 스토밍

🔷 소프트웨어를 개발하고자 하는 도메인에서 어떤 일들이 이뤄지고 있는지 빠르게 파악할 수 있는 워크샵 형태의 방법

  • 개발자 뿐만 아니라, 도메인 전문가, 기획자, 디자이너, 테스터 등 해당 소프트웨어 개발의 모든 이해관계자들이 참여한다.
  • 참여자들은 이벤트, 커맨드, 리드 모델, 애그리게잇, 외부 시스템 등을 나타내는 서로 다른 색깔의 포스트잇들을 벽에 붙여가며 이벤트 스토밍을 진행하게 된다.

⭐ 이벤트 스토밍 사전준비

  1. 공간: 깨끗한 벽을 가진 넓은 워크샵 공간
  2. 참가자: 고객, 도메인전문가, 설계자, 개발자, 테스터 등 모든 이해 관계자
  3. 준비물: 벽에 붙일 A1 하얀색 전지, 마커 펜, 다양한 색의 포스트잇, 줄을 그릴 수 있는 다양한 색깔의 끈 테이프, 스카치테이프
  4. 마음가짐: 적극적이고, 긍정적이며 열린 마음가짐, 대화하고 토론하고 나설 수 있는 용기, 열린 분위기로 활동을 촉진하고 리딩할 수 있는 퍼실리테이터

⭐ 진행 과정

  1. 이벤트스토밍에 필요한 화이트 보드 벽면과 수행에 필요한 스티커를 준비
  2. 도메인 전문가와 기획자, 개발 전문가와 함께 사용자 시나리오, 또는 업무 요건을 리뷰한다.
  3. 가장 먼저, 발생 가능한 Event를 무작위로 도출하고, Policy, Command, Ageregate 순서로 이벤트를 중심으로 스 티커별 해당 내용을 정의하고 발생시간 순서로 벽면에 부착한다.
  4. Bounded Context 를 설정하고 서브 도메인 간의 컨텍스트 매핑을 통해 BC간의 정보 참조의 릴레이션을 정의한다.

⭐ 이벤트 스토밍 효과

  1. 커뮤니케이션 비용 절감
  2. 누락된 기획 보충

📌 서비스를 어떻게 나눌것인가?

[Step1] Event 정의

  1. 가장 먼저 서비스에서 발생하는 비즈니스 이벤트를 도출한다.
  2. 가급적 현업이 사용하는 용어를 그대로 사용(Ubiquitous Language)하여 오렌지색 스티커에 이벤트를 기술하고 이를 벽면에 붙인다
  3. 비즈니스 이벤트는 과거형으로 작성하는데 도메인 내부에 상태가 변화되고 난 결과가 이벤트다.

[Step2] Policy 정의

  1. 이벤트스토밍의 두번째 수행 대상은 폴리시(Policy) 도출.
  2. 폴리시(Policy)는 이벤트가 발생한 후 연이어 발생하는 반응형 액션으로, 한 서비스 이벤트에 대해 수행되어야 할 타 서비스의 액션들로, 먼저 정의된 이벤트 아래에 덧대어 붙인다.
  3. 하나의 이벤트에 반응하여 수행되어야 할 폴리시는 여러 팀에서 도출된 멀티 액션이 존재할 수 있다.

[Step3] Command 도출

  1. 세번째로 Event를 발생시키는 행위인 커맨드를 도출하는데, 도메인 내의 어떠한 상태 변화를 일으키는 서비스를 말한다.
  2. 웹 페이지 내에서 버튼을 클릭하는 User Decision이 여기에 해당된다.
  3. 도출된 커맨드는 이벤트 스티커 앞쪽에 붙여, 스티커를 통한 나레이션(Narration)이 되도록 정렬한다.

[Step4] Actor 정의

  1. Actor는 커맨드를 발생시키는 주체(사람, 시스템 등)를 말한다.
  2. Actor는 담당자 또는 시스템이 될 수 있으며, 직관적으로 파악될 수 있는 액터의 경우, 표시하지 않아도 무방하다.
  3. 도출된 액터는 유저 스토리에 가까운 나레이션이 가능하도록 해당 커맨드 스티커 왼쪽에 배치한다.

[Step5] Aggregate 정의

  1. Aggregate는 '결합물'을 의미하는데 어떠한 도메인 객체를 중심으로 하나의 ACID한 트랜잭션에 묶여 변화되어야 할 객체의 묶음을 도출하고, 그것들을 커맨드, 이벤트와 함께 묶는다.

[Step6] Bounded Context 도출

  1. Bounded Context는 동일한 문맥으로 효율적으로 업무 용어(도메인 클래스)를 사용할 수 있는 객체 범위를 뜻한다.
  2. 하나의 BC는 하나 이상의 aggregate를 원소로 구성될 수 있다.
  3. 이 BC를 마이크로서비스 구성 단위로 정하게 되면 이를 담당하는 팀내의 커뮤니케이션이 효율화 된다.

[Step7] Context 매핑

  1. Bounded Context까지 도출된 이후에 BC간 정보 참조 릴레이션 설정(혹은,이벤트가 발생한 이후 동반된 행위의 호출관계를 선으로 표시)하는 작업을 ‘Context매핑’ 이라고 한다.
  2. 컨텍스트 간 매핑 정보만 보더라도 전체 도메인 서비스의 참조 토폴로지(Topology)를 한 눈에 파악 가능하다.

📌 직접 해보기

  • 결제 완료 -> 결제 취소 -> 환불 과정 이벤트 스토밍

링크


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

profile
Hodie mihi, Cras tibi

0개의 댓글