기존에 객체지향으로만 짠 방식은 경계가 위처럼 불분명하다. 비즈니스 객체의 경계가 모호할 경우, 여러 사용자가 동시에 객체를 업데이트하면서 비즈니스 규칙을 위반할 수 있다.
이를 해결하기 위해 DDD의 애그리거트를 사용하면, 관련 객체들을 하나로 묶어 변경을 원자적으로 처리가 가능하다.
애그리거트를 사용 시에는, 이벤트+ 사가를 통해 데이터 일관성을 유지한다.
• 코레오그래피 사가를 이용하여 여러 서비스에 걸쳐 데이터 일관성을 유지합니다(4장).
• 레플리카를 둔 서비스에 소스 데이터가 변경되었음을 알립니다. 7장에서 설명할 CQRS라는 기법입니다.
• 미리 등록된 웹훅(webhook)6이나 메시지 브로커를 통해 비즈니스 프로세스의 다음 단계를 진행하도록 다른 애플리케이션에 알립니다.
• 사용자 브라우저에 웹 소켓 메시지를 보내거나, 일래스틱서치 같은 텍스트 DB를 업데이트하기 위해 같은 애플리케이션의 다른 컴포넌트에 알립니다.
• 사용자에게 (텍스트 메시지나 이메일로) 알립니다. ‘주문한 상품이 배달되었다, 처방전이 준비되어 받아 갈 수 있다, 예약한 항공편 스케줄이 지연되었다’ 등의 사실을 알립니다.
• 애플리케이션이 제대로 작동되고 있는지 도메인 이벤트를 모니터링하면서 확인합니다.
• 사용자 행동을 모델링하기 위해 이벤트를 분석합니다...
위와 같은 이유들 때문에 변경 이벤트를 발행해야한다. "X가 일어나면 Y를 수행해라"와 같은 요건이 있다면 곧 도메인 이벤트가 필요하다.