Miro 도메인 주도 설계 실습

이렇게 만들어봄!

https://miro.com/ 에서 만들 수 있다.


도메인 주도설계의 주요 용어

도메인 이벤트: 발생한 사건

커맨드: 도메인 이벤트를 트리거하는 명령

외부 시스템: 도메인 이벤트가 호출하거나 관계가 있는 레거시 또는 외부 시스템

액터: 개인 또는 조직의 역할

핫스팟: 의문사항, 결정하기 힘든 사항

애그리거트: 도메인 이벤트와 커맨드가 처리하는 데이터, 상태가 변경되는 데이터

정책: 이벤트 조건에 따라 진행되는 결정, “이벤트”가 발생할 때, “커맨드”를 실행한다

정보: 액터에게 제공되는 데이터, 결정을 내리는데 영향을 주는 정보


이벤트스토밍 과정 

miro를 통해 팀원들이 모였다면 주요 용어 포스트잇을 배치합니다.


도메인 이벤트를 찾습니다. (주황색)

도메인이벤트는 시간흐름에 따른 시스템의 동작을 의미합니다.

상태의 생성 / 변경 / 삭제가 발생하게 만듭니다.

비즈니스 흐름에서 발생한 이벤트에 초첨을 맞춰서 결정합니다.

과거 시제 또는 명사형으로 기록합니다. ex) 회원가입되었다 or 회원가입됨

 

자유로운 의견을 통해 도출된 도메인 이벤트들을 발생 순서를 고려하여 배치합니다.


외부 시스템을 필요로하는 프로세스를 찾아서 도메인 이벤트 뒤에 붙입니다. (분홍색)

명사형으로 작성합니다

아이템이 주문되었을 때 결제하는 과정은 외부 결제시스템을 이용합니다.

결제가 승인되었을 경우 외부 이메일시스템을 통해 결과를 전송합니다.

 


커맨드를 도메인 이벤트 앞에 배치합니다. (파란색)

하나의 커맨드에 여러개의 이벤트가 발생할 수 있습니다.

개발자 입장에서 구현하게되는 API가 됩니다.

 


핫스팟을 찾아서 배치합니다. (보라색)

궁금한사항이나, 좀 더 논의가 필요한 사항, 결정하기 힘든 사항에 대한 내용을 붙입니다.


액터를 찾아서 배치합니다. (노란색)

액터는 사용자의 역할을 말합니다.

비즈니스를 수행하는 구체적인 역할을 고려해서 도출하도록 합니다.

해당 쇼핑몰 사례에서는 사용자를 게스트, 회원, 판매자, 구매자 등으로 구분할 수 있습니다

 


문장으로 액터, 커맨드, 이벤트를 검토해봅니다.

"{구매자:액터}가 상품 {주문을 취소:커맨드}하면 {상품주문취소됨:도메인이벤트} 이벤트가 발생하고, 이어서 주문 취소된 상품의 재고를 변경하는 {상품재고수정:커맨드}이 실행되어서 {상품재고수정됨:도메인이벤트} 이벤트가 발생함으로써 시스템이 동작한다"

 


애그리거트를 정의합니다. (겨자색)

애그리거트는 가장 작은 도메인 모델의 모듈 단위입니다.

커맨드와 도메인 이벤트가 영향을 주는 데이터 요소입니다.

개발자의 입장에서 보면, 도메인의 실체 개념을 표현하는 객체(엔티티)로 구현하게 될 대상입니다.

커맨드와 도메인 이벤트 사이 상단에 겹쳐서 붙입니다.

 

 


호출 관계의 방향성을 고려하여 컨택스트 매핑을 진행합니다.

바운디드 컨텍스트 간의 관계를 파악합니다

동기적 호출방식과 비동기적 호출방식을 고려한 표현도 가능합니다.

동기적(실선) : 항상 일관된 데이터 필요, 컨텍스트간 의존도가 높음

비동기적(점선) : 결과적 일관성으로 처리가능한 관계

ex)

클라이언트 -> 구매 컨텍스트 (동기적) -> 고객이 상품을 주문 : 즉시 수행되어야함

클라이언트 -> 상품 컨텍스트 (동기적) -> 고객이 상품정보를 조회 : 즉시 수행되어야함

구매컨텍스트 -> 배송 컨텍스트 (비동기) -> 배송 컨텍스트에 장애가 발생해도 주문을 받아둠, 배송 시스템 정상화 시 주문-배송 연결 -> 고가용성을 보장

JUNE .

20'S LIFE IN SYDNEY and BUSAN

    이미지 맵

    DevOps Bootcamp/Sprint review 다른 글

    이전 글

    다음 글