명령 객체: 데이터를 변경하는 액션을 요청할 때 필요한 객체
(ex. CreateProduct, UpdateProduct, DeleteProduct 등)
도메인 이벤트: 명령의 결과, 주목할 만한 무언가가 발생했음을 알리는 역할
(ex. ProductCreated, ProductUpdated, ProductDeleted 등)
이벤트 스토어: 도메인 이벤트들이 순차적으로 저장되는 저장소, 레코드 추가만 가능한 특징이 있음
이벤트 소싱 패턴: 데이터의 현재 상태만 저장소에 저장하지 않고 추가적으로 이벤트만을 저장하는 저장소를 만들어 사용하는 패턴 (이벤트 스토어를 활용)
이벤트 소싱 장점
- 순차적 오퍼레이션들이 이벤트로 저장되어 도메인 객체(데이터)가 현재 상태가 되기까지의 과정이 기록으로 남음
- 이벤트 Replay를 하거나 Snapshot으로 과거의 데이터 상태로 돌아갈 수 있음 > 디버깅시 용이
- 먼저 이벤트들을 순차적으로 저장한 후, 동작은 후처리하는 방식을 통해 지연시간을 줄일 수 있음
이벤트 소싱 단점
도메인 이벤트 네이밍은 보편 언어를 사용하고 과거형 동사 사용
도메인 이벤트를 트리거시키는 두가지 일반적인 케이스
도메인 이벤트의 인터페이스
토론 주제
기타 자료