..
도메인에서 발생한 사건을 포착하기 위해 도메인 이벤트를 사용하자.
이벤트는 아주 강력한 모델링 도구다.
일단 도메인 이벤트를 사용하는 법을 알고 나면, 여러분은 이에 중독돼서 어떻게 여지껏 도메인 이벤트 없이 살아왔는지 의아해질 것이다.
도메인에서 일어난 어떤 사건을 나타낸다.
도메인에서 발생한 어떤 일이 도메인 전문가에게 중요한지 어떻게 결정할수 있을까?
전문가들과 논의를 통해 그들이 알려주는 단서에 귀를 기울여야 한다.
(이러한 단서를 어떤 방법으로 파악할 수 있을까?
PPT, 엑셀 등의 문서? 산출물?
Event Storming 과 같이 다함께 공유/집중할 수 있는 Workshop이 효과적이지 않을까?)
도메인 전문가가 다음과 같은 말을 던질 때 집중하자.
“...할 때”
“그런 일이 일어나면...”
“...하면 저에게 알려주세요.”와 “...하면 저에게 통보해주세요.”
“…한 일의 발생”
이는 도메인에서 누군가 중요한 일이 발생했기 때문에 알림을 받기를 원하고 있으며,
이는 명시적인 이벤트를 모델링해야 할 여지가 크다는 의미다.
- Implementing Domain-Driven Design 도메인 주도 설계 구현, 반 버논 p377~378
위의 설명에 대한 도메인 이벤트의 예를 보면 다음과 같다
- 쇼핑몰 : 주문, 주문취소, 교환, 반품, 배송완료 ...
(주문완료라는 이벤트에는 무엇이 담겨야할까? -> 명시적 모델링 필요) - 자동차보험 : 가입상담, 보험료계산, 가입, 계약, 계약취소, 갱신, 사고접수, 현장출동 ...
- 병원 : 외래 예약/접수, 입원/퇴원, 처방, 실시, 수납 ...
- 이와 같이 각 도메인의 전문가들이 관심을 갖는 중요한 이벤트 들, 타 업무와 공유가 필요한 이벤트 들 ..
..
이벤트를 외부의 서비스로 브로드캐스트해야 할 때 주로 발생하는데,
여러분의 엔터프라이즈 시스템은 결합에서 분리돼야 하고,
(하나의 커다란 Monolith, 큰 진흙 덩어리로 만들지 말고 분리되어야 한다)
도메인 전반에 걸쳐 일어난 사건은 바운디드 컨텍스트 전체로 전달돼야 한다.
이런 이벤트가 발행되면 구독자가 알림을 받게 된다.
구독자가 이런 이벤트를 처리함으로써 로컬과 원격 바운디드 컨텍스트에 광범위한 영향을 미칠 수 있다.
이벤트가 로컬 시스템이든 외부 시스템이든
관심이 있는 대상으로 전달됐을 땐 보통 결과적 일관성을 위해 사용된다.
이는 분명한 목적을 갖고 설계(Design)에 따라 수행된다.
이는 두 단계 커밋(글로벌 트랜잭션)의 필요성을 제거하고, 애그리게잇(10) 의 규칙을 지원한다.
...
우리는 지연 시간을 감안하면 원격 의존성을 일관성 있는 상태로 유지할 수도 있다. (Eventually Consistency)
이런 결합 분리는 높은 확장성과 협업하는 서비스 집합의 최고 성능을 제공하는데 도움이 된다.
또한 이를 통해 시스템 간의 느슨한 결합을 달성할 수 있다.
- Implementing Domain-Driven Design 도메인 주도 설계 구현, 반 버논 p379~380
..
'DDD' 카테고리의 다른 글
[Domain Event] Event Modeling (0) | 2024.09.02 |
---|---|
[Domain Event] Batch Job과 Domain Event (0) | 2024.09.02 |
Entity (1) | 2024.08.30 |
EDA (Event Driven Architecture) (0) | 2024.08.30 |
CQRS (0) | 2024.08.30 |