도메인 주도 설계 핵심 | Chap-06 도메인 이벤트와 전술적 설계

보람·2024년 3월 1일
0

151~165page

인과관계의 중요성

  • 메시지들끼리의 관련성이 있어야 한다.
  • 지갑 잃어버렸어! -> 잘됐다! 와 같은 메시지가 나오면 이상한 것처럼 각 메시지들이 간의 인과관계가 있어야 한다.

도메인 이벤트를 생성하고 이름 붙이는 방법

  • 이 단어들은 도메인 모델 안에서 발생하는 사건과 모델 밖을 이어주는 다리를 형성하기에 세심한 주의를 기울여야 한다.
    • 이 다리들은 이벤트를 통해 모델들이 원활히 의사소통 하는 데 필수적인 역할을 한다.
    • ex) ProductCreated : 과거 시점에 스크럼 제품이 생성됐음 (과거에 발생한 이벤트는 과거동사로 표현 가능)

도메인 이벤트의 프로퍼티를 정의하는 방법

  • 도메인 모델에서 발생한 사건의 기록을 온전히 전달하려면 도메인 이벤트 이름과 프로퍼티가 모두 필요하다.
  • 각 도메인 이벤트를 생성하는데 필요로 하는 것들을 프로퍼티로 담아야한다.
  • 도메인 이벤트는 이벤트가 만들어지는 시점에, 명령이 제공하는 모든 프로퍼티들을 담고 있어야 한다.
    • ex) CreateProduct 명령의 도메인 이벤트는 ProductCreated 도메인 이벤트 : CreateProduct가 갖고 있는 프로퍼티(tenantId, productId, Product name, Product description)를 갖고 있어야 한다.
  • 추가 쿼리를 하지 않고 정보를 얻기 위해서 명령엔 없는 추가 프로퍼티를 도메인 이벤트에 추가할 수 있으나 의미를 잃을 정도로의 많은 추가 정보를 추가해선 안된다.

일부 도메인 이벤트가 명령에 의해 유발될 수 있고, 다른 경우에는 일자, 시간과 같은 상태가 변경되는 것들의 인지를 통해 유발될 수 있다는 것

  • 마지막 영업일이나 주, 년, 월의 마지막과 같은 시간 만료에 의해서도 이벤트가 발생된다.
    • 비즈니스 만료 시간에 맞춰 일을 해야 한다면 명령이 아닌 도메인 이벤트로 시간 만료를 모델링해야 한다.

이벤트 소싱 그리고 애그리게잇의 상태를 표현하기 위해 도메인 이벤트를 저장하고 사용하는 방법

  • 이벤트 소싱 : 애그리게잇 인스턴스에 대해 변경된 것에 대한 기록으로, 발생했던 모든 도메인 이벤트를 저장하는 것
    • 에그리게잇 상태 전체를 저장하는 대신, 발생했던 각 도메인 이벤트 모두를 저장한다.
    • 하나의 애그리게잇 인스턴스에 발생했던 모든 도메인 이벤트를 발생한 순서대로 이벤트 스트림에 구성한다.
    • 모든 도메인 이벤트를 추가하는 순차적인 리파지토리 컬렉션 또는 테이블을 이벤트 리파지토리라고 한다.
    • 이벤트 소싱의 큰 이점 중 하나는 핵심 도메인에서 계속 발생하는 모든 기록을 개별적인 발생 수준으로 저장한다는 점이다.
profile
백엔드 개발자

0개의 댓글