책너두 (도메인 주도 설계로 시작하는 마이크로서비스 개발) 21일차 (~176p)

요약

  • 6장. 사례연구 - 마이크로서비스 도출과 아키텍처 구성에 대해 이해함
    • 이벤트 스토밍을 통한 마이크로서비스 도출
      • 이벤트 스토밍 워크숍
        • 사용자 관리 서브도메인
        • 도서 관리 서브도메인
        • 대출, 반납 서브도메인
        • 배송 서브도메인
        • 게시판 서브도메인
      • 바운디드 컨텍스트 식별

메모

6.2 이벤트 스토밍을 통한 마이크로서비스 도출

  • 이번 섹션에서는 이벤트 스토밍 워크샵을 활용하여 비즈니스 흐름을 파악하고, 이를 통해 바운디드 컨텍스트를 식별함.
    • 바운디드 컨텍스트를 통해 마이크로서비스 후보를 도출하고, 서비스 간의 관계를 정의하는 과정을 진행함.
    • 이를 통해 마이크로서비스 아키텍처를 구성하는 방향성을 설정항.

6.2.1 이벤트 스토밍 워크숍

  • 이 섹션에서는 이벤트 스토밍 워크샵을 진행함.
    • 요구사항들은 사용자 관리, 도서 관리, 도서 대출 및 반납, 배송, 이메일로 분류되며, 이들 각각은 비즈니스 문제를 해결하는 서브도메인으로 간주됨.
    • 이러한 서브도메인별로 이벤트 스토밍을 통해 문제 해결 전략을 도출하는 작업을 진행함.

사용자 관리 서브도메인

  • 사용자 관리 서브도메인의 이벤트 스토밍은 다음과 같이 진행됨
    1. 왼쪽에서 오른쪽으로 업무 처리 흐름에 따라 도메인 이벤트(오렌지색)를 붙임.
    2. 이벤트와 대응되는 커맨드(파란색)를 도출하고 이벤트 오른쪽에 붙임.
    3. 액터(작은 노란색)를 이용하여 도출된 이벤트와 커맨드를 검증하고, 커맨드 왼쪽 아래에 붙임.
    4. 이벤트와 연관된 외부 인터페이스(핑크색)를 식별함.
    5. 각 이벤트와 커맨드에 영향을 받는 데이터 요소인 애그리거트(노란색)를 찾는다.
    6. 마지막으로, 이벤트 발생 시 다른 영역의 커맨드를 트리거하는 정책(라일락색)을 도출함.
  • 이벤트 스토밍 결과를 살펴보면, [회원정보 등록됨] 이벤트가 발생하면 [HR 시스템]과 연계하여 [직원여부체크] 정책을 통해 사원인지 검증하고, 그 결과로 [회원등록 승인됨] 또는 [회원등록 거부됨] 이벤트가 발생함.
  • 이어서, [회원정보 수정됨] 이벤트와 [회원 탈퇴됨] 이벤트가 발생하며, 도서 대출과 반납 처리에 영향을 받는 [포인트 적립], [포인트 감소] 이벤트도 발생함.
    • 사용자의 로그인 과정을 통해 [로그인됨], [로그아웃됨] 이벤트가 발생함.
  • 이와 함께, 이벤트에 매핑되는 커맨드와 커맨드/이벤트에 영향을 받는 데이터 요소인 [회원], [포인트], [로그인] 애그리거트가 식별되었음.
    • 또한, 회원정보가 변경될 때 이메일을 전송하는 이메일 전송 정책도 도출되었음.

도서 관리 서브도메인

  • 도서 관리 서브도메인의 이벤트 스토밍 결과는 다음과 같음
    • 업무 흐름에 따라 [운영자 등록됨], [도서 분류 등록됨], [도서관 정보 등록됨], [도서제공업체 등록됨]과 같이 다른 이벤트의 사전 이벤트가 발생함.
    • 이를 통해 [도서 입고됨], [도서 분류됨], [도서 정보 등록됨] 순서대로 이벤트가 발생함.
  • 대출 서브시스템에서 대출/반납이 이루어지면서 [도서 재고 변경됨] 이벤트가 발생하고, 도서 생명주기에 따라 마지막으로 [도서 정보 폐기됨] 이벤트가 발생함.
  • 또한, 도서를 제공하는 [도서제공시스템] 외부 시스템이 식별되었으며, 관련 커맨드 액터와 애그리거트가 도출되었음.
    • 이를 통해 도서 관리의 주요 이벤트와 액터, 그리고 애그리거트가 잘 식별되어 진행되는 업무 흐름을 이해하는 데 도움이 됨.

대출, 반납 서브도메인

  • 대출, 반납 서브도메인은 도서대출시스템에서 가장 복잡한 비즈니스 흐름을 담고 있음
  • 도서 대출 과정은 [도서 검색됨] 이벤트를 통해 시작되며, [도서 대출됨] 이벤트로 이어짐.
    • 근무 지역이 멀 경우 [배송 요청됨] 이벤트를 통해 배송 요청이 가능함.
  • 대출 만료 기간이 도래하면 [반납 요청됨] 이벤트를 통해 반납 요청 메일이 발송되고, 사용자가 도서를 반납하면 [도서 반납됨] 이벤트가 발생함.
    • 반납하지 않고 기간이 지나면 [도서 연체됨] 이벤트가 발생함.
  • 도서가 연체되면 [대출 정지됨] 이벤트가 발생하고, 정지 해제가 요청되면 [정지 해제됨] 이벤트가 발생함.
    • 도서 대출과 관련하여 [최다 대출 도서 집계됨][개인별 라이브러리 생성됨] 이벤트도 발생함.
  • 액터로는 회원, SYS, 대출자, 타이머(Timer), 연체자 등이 도출되었음.
    • 이 액터들의 역할을 세밀하게 구분함으로써 커맨드와 이벤트가 더욱 구체화되고 새로 식별됨.
  • 정책은 동일한 서브도메인 내부의 다른 커맨드를 트리거할 수도 있고, 외부의 다른 서브도메인의 커맨드를 트리거할 수도 있음.
    • 정책들은 [이메일 발송], [포인트 적립], [배송 접수], [도서 재고 증가], [대출 정지] 등으로 식별되어 이벤트 스티커 아래에 붙여져 있음.
  • 애그리거트로는 [대출도서집계정보], [도서검색정보], [대출], [배송요청정보], [반납], [연체], [대출가능여부] 등이 도출되었음.
    • 이들은 각 이벤트와 커맨드에 영향을 받는 데이터 요소임.

배송 서브도메인

  • 배송 서브도메인은 도서 배송 요청부터 배송 완료까지의 업무 흐름을 정의하고 있음
  • 배송 업무 흐름에 따라 [배송업체 등록됨], [배송 접수됨], [배송 준비됨], [배송 발송됨], [배송 완료됨] 등의 이벤트가 발생함.
  • 이 과정에서 외부 시스템인 [이메일 시스템]과 연동하며, 이벤트와 커맨드에 영향을 받는 데이터 요소인 애그리거트로는 [배송업체], [배송접수정보], [배송준비정보], [배송발송정보], [배송완료정보]가 도출되었음.

게시판 서브도메인

  • 게시판 서브도메인은 시스템의 본질적인 기능은 아니지만, 시스템의 주요 기능들을 지원하고 사용자의 질의 사항에 대응하기 위한 부분임:
  • 이 서브도메인에서는 [게시판 생성됨], [공지 등록됨], [QnA 등록됨] 이벤트가 도출되었음.
  • 이벤트와 커맨드에 영향을 받는 데이터 요소인 애그리거트로는 [게시판], [공지], [QnA]가 도출되었음.
    • 이로써, 총 5개의 서브도메인에서 정리된 이벤트 스토밍 결과를 종합하게 됨.

6.2.2 바운디드 컨텍스트 식별

  • 바운디드 컨텍스트를 식별하는 과정은 애그리거트의 응집도를 바탕으로 경계를 그리고, 각각의 컨텍스트를 구분하는 것임.
    • 이 과정에서 총 8개의 바운디드 컨텍스트가 도출되었음.
    • [회원][로그인] 컨텍스트
      • 회원관리 서브도메인에서의 애그리거트인 [회원], [포인트], [로그인] 중에서 [포인트]는 회원의 부가 정보로 볼 수 있고, [로그인]은 시스템을 사용하는 시점의 정보이므로 [로그인]과 [회원]을 분리하여 두 개의 컨텍스트로 식별하였음.
    • [게시판], [도서], [배송] 컨텍스트
      • 게시판, 도서 관리, 배송 서브도메인에서는 특이한 점이 없어서 각 서브도메인을 그대로 바운디드 컨텍스트로 식별하였음.
    • [대출], [카탈로그] 컨텍스트
      • 대출반납 서브도메인에서는 여러 애그리거트가 도출되었지만, [대출], [반납], [연체] 등은 밀접한 관계를 가지므로 [대출] 컨텍스트로 식별하였음.
      • 그리고 [도서검색정보], [대출도서집계정보] 등은 회원이 대출하기 전에 접근할 수 있는 정보로, [도서] 컨텍스트보다는 조회를 전담하는 [카탈로그] 컨텍스트에 더 잘 어울린다고 판단하여 이를 도출하였음.
    • [이메일] 컨텍스트
      • 이메일 처리를 전담하는 바운디드 컨텍스트로 추가하였음.
  • 이렇게 식별된 컨텍스트들은 각각 다른 컨텍스트와의 관계를 맺으며 일관성을 유지함.
    • 예를 들어, [도서] 컨텍스트에서 도서의 정보가 변경되면 [카탈로그] 컨텍스트에 이벤트를 전달하여 일관성을 맞춰가며, [대출] 컨텍스트는 다른 모든 컨텍스트와 관계를 맺음.
    • 이렇게 식별된 바운디드 컨텍스트를 통해 시스템의 전반적인 구조와 각 컴포넌트 간의 관계를 이해하고 설계할 수 있음.

댓글

Designed by JB FACTORY