요약
- 6장. 사례연구 - 마이크로서비스 도출과 아키텍처 구성에 대해 이해함
- 이벤트 스토밍을 통한 마이크로서비스 도출
- 이벤트 스토밍 워크숍
- 사용자 관리 서브도메인
- 도서 관리 서브도메인
- 대출, 반납 서브도메인
- 배송 서브도메인
- 게시판 서브도메인
- 바운디드 컨텍스트 식별
메모
6.2 이벤트 스토밍을 통한 마이크로서비스 도출
- 이번 섹션에서는 이벤트 스토밍 워크샵을 활용하여 비즈니스 흐름을 파악하고, 이를 통해 바운디드 컨텍스트를 식별함.
- 바운디드 컨텍스트를 통해 마이크로서비스 후보를 도출하고, 서비스 간의 관계를 정의하는 과정을 진행함.
- 이를 통해 마이크로서비스 아키텍처를 구성하는 방향성을 설정항.
6.2.1 이벤트 스토밍 워크숍
- 이 섹션에서는 이벤트 스토밍 워크샵을 진행함.
- 요구사항들은 사용자 관리, 도서 관리, 도서 대출 및 반납, 배송, 이메일로 분류되며, 이들 각각은 비즈니스 문제를 해결하는 서브도메인으로 간주됨.
- 이러한 서브도메인별로 이벤트 스토밍을 통해 문제 해결 전략을 도출하는 작업을 진행함.
사용자 관리 서브도메인
- 사용자 관리 서브도메인의 이벤트 스토밍은 다음과 같이 진행됨
- 왼쪽에서 오른쪽으로 업무 처리 흐름에 따라 도메인 이벤트(오렌지색)를 붙임.
- 이벤트와 대응되는 커맨드(파란색)를 도출하고 이벤트 오른쪽에 붙임.
- 액터(작은 노란색)를 이용하여 도출된 이벤트와 커맨드를 검증하고, 커맨드 왼쪽 아래에 붙임.
- 이벤트와 연관된 외부 인터페이스(핑크색)를 식별함.
- 각 이벤트와 커맨드에 영향을 받는 데이터 요소인 애그리거트(노란색)를 찾는다.
- 마지막으로, 이벤트 발생 시 다른 영역의 커맨드를 트리거하는 정책(라일락색)을 도출함.
- 이벤트 스토밍 결과를 살펴보면, [회원정보 등록됨] 이벤트가 발생하면 [HR 시스템]과 연계하여 [직원여부체크] 정책을 통해 사원인지 검증하고, 그 결과로 [회원등록 승인됨] 또는 [회원등록 거부됨] 이벤트가 발생함.
- 이어서, [회원정보 수정됨] 이벤트와 [회원 탈퇴됨] 이벤트가 발생하며, 도서 대출과 반납 처리에 영향을 받는 [포인트 적립], [포인트 감소] 이벤트도 발생함.
- 사용자의 로그인 과정을 통해 [로그인됨], [로그아웃됨] 이벤트가 발생함.
- 이와 함께, 이벤트에 매핑되는 커맨드와 커맨드/이벤트에 영향을 받는 데이터 요소인 [회원], [포인트], [로그인] 애그리거트가 식별되었음.
- 또한, 회원정보가 변경될 때 이메일을 전송하는 이메일 전송 정책도 도출되었음.
도서 관리 서브도메인
- 도서 관리 서브도메인의 이벤트 스토밍 결과는 다음과 같음
- 업무 흐름에 따라 [운영자 등록됨], [도서 분류 등록됨], [도서관 정보 등록됨], [도서제공업체 등록됨]과 같이 다른 이벤트의 사전 이벤트가 발생함.
- 이를 통해 [도서 입고됨], [도서 분류됨], [도서 정보 등록됨] 순서대로 이벤트가 발생함.
- 대출 서브시스템에서 대출/반납이 이루어지면서 [도서 재고 변경됨] 이벤트가 발생하고, 도서 생명주기에 따라 마지막으로 [도서 정보 폐기됨] 이벤트가 발생함.
- 또한, 도서를 제공하는 [도서제공시스템] 외부 시스템이 식별되었으며, 관련 커맨드 액터와 애그리거트가 도출되었음.
- 이를 통해 도서 관리의 주요 이벤트와 액터, 그리고 애그리거트가 잘 식별되어 진행되는 업무 흐름을 이해하는 데 도움이 됨.
대출, 반납 서브도메인
- 대출, 반납 서브도메인은 도서대출시스템에서 가장 복잡한 비즈니스 흐름을 담고 있음
- 도서 대출 과정은 [도서 검색됨] 이벤트를 통해 시작되며, [도서 대출됨] 이벤트로 이어짐.
- 근무 지역이 멀 경우 [배송 요청됨] 이벤트를 통해 배송 요청이 가능함.
- 대출 만료 기간이 도래하면 [반납 요청됨] 이벤트를 통해 반납 요청 메일이 발송되고, 사용자가 도서를 반납하면 [도서 반납됨] 이벤트가 발생함.
- 반납하지 않고 기간이 지나면 [도서 연체됨] 이벤트가 발생함.
- 도서가 연체되면 [대출 정지됨] 이벤트가 발생하고, 정지 해제가 요청되면 [정지 해제됨] 이벤트가 발생함.
- 도서 대출과 관련하여 [최다 대출 도서 집계됨] 및 [개인별 라이브러리 생성됨] 이벤트도 발생함.
- 액터로는 회원, SYS, 대출자, 타이머(Timer), 연체자 등이 도출되었음.
- 이 액터들의 역할을 세밀하게 구분함으로써 커맨드와 이벤트가 더욱 구체화되고 새로 식별됨.
- 정책은 동일한 서브도메인 내부의 다른 커맨드를 트리거할 수도 있고, 외부의 다른 서브도메인의 커맨드를 트리거할 수도 있음.
- 정책들은 [이메일 발송], [포인트 적립], [배송 접수], [도서 재고 증가], [대출 정지] 등으로 식별되어 이벤트 스티커 아래에 붙여져 있음.
- 애그리거트로는 [대출도서집계정보], [도서검색정보], [대출], [배송요청정보], [반납], [연체], [대출가능여부] 등이 도출되었음.
- 이들은 각 이벤트와 커맨드에 영향을 받는 데이터 요소임.
배송 서브도메인
- 배송 서브도메인은 도서 배송 요청부터 배송 완료까지의 업무 흐름을 정의하고 있음
- 배송 업무 흐름에 따라 [배송업체 등록됨], [배송 접수됨], [배송 준비됨], [배송 발송됨], [배송 완료됨] 등의 이벤트가 발생함.
- 이 과정에서 외부 시스템인 [이메일 시스템]과 연동하며, 이벤트와 커맨드에 영향을 받는 데이터 요소인 애그리거트로는 [배송업체], [배송접수정보], [배송준비정보], [배송발송정보], [배송완료정보]가 도출되었음.
게시판 서브도메인
- 게시판 서브도메인은 시스템의 본질적인 기능은 아니지만, 시스템의 주요 기능들을 지원하고 사용자의 질의 사항에 대응하기 위한 부분임:
- 이 서브도메인에서는 [게시판 생성됨], [공지 등록됨], [QnA 등록됨] 이벤트가 도출되었음.
- 이벤트와 커맨드에 영향을 받는 데이터 요소인 애그리거트로는 [게시판], [공지], [QnA]가 도출되었음.
- 이로써, 총 5개의 서브도메인에서 정리된 이벤트 스토밍 결과를 종합하게 됨.
6.2.2 바운디드 컨텍스트 식별
- 바운디드 컨텍스트를 식별하는 과정은 애그리거트의 응집도를 바탕으로 경계를 그리고, 각각의 컨텍스트를 구분하는 것임.
- 이 과정에서 총 8개의 바운디드 컨텍스트가 도출되었음.
- [회원]과 [로그인] 컨텍스트
- 회원관리 서브도메인에서의 애그리거트인 [회원], [포인트], [로그인] 중에서 [포인트]는 회원의 부가 정보로 볼 수 있고, [로그인]은 시스템을 사용하는 시점의 정보이므로 [로그인]과 [회원]을 분리하여 두 개의 컨텍스트로 식별하였음.
- [게시판], [도서], [배송] 컨텍스트
- 게시판, 도서 관리, 배송 서브도메인에서는 특이한 점이 없어서 각 서브도메인을 그대로 바운디드 컨텍스트로 식별하였음.
- [대출], [카탈로그] 컨텍스트
- 대출반납 서브도메인에서는 여러 애그리거트가 도출되었지만, [대출], [반납], [연체] 등은 밀접한 관계를 가지므로 [대출] 컨텍스트로 식별하였음.
- 그리고 [도서검색정보], [대출도서집계정보] 등은 회원이 대출하기 전에 접근할 수 있는 정보로, [도서] 컨텍스트보다는 조회를 전담하는 [카탈로그] 컨텍스트에 더 잘 어울린다고 판단하여 이를 도출하였음.
- [이메일] 컨텍스트
- 이메일 처리를 전담하는 바운디드 컨텍스트로 추가하였음.
- 이렇게 식별된 컨텍스트들은 각각 다른 컨텍스트와의 관계를 맺으며 일관성을 유지함.
- 예를 들어, [도서] 컨텍스트에서 도서의 정보가 변경되면 [카탈로그] 컨텍스트에 이벤트를 전달하여 일관성을 맞춰가며, [대출] 컨텍스트는 다른 모든 컨텍스트와 관계를 맺음.
- 이렇게 식별된 바운디드 컨텍스트를 통해 시스템의 전반적인 구조와 각 컴포넌트 간의 관계를 이해하고 설계할 수 있음.
댓글