티스토리 뷰
Eventmanager에서 사용될 도메인 객체와 도메인 이벤트를 간략하게 설명합니다.
1. 도메인 객체(Domain Object)
도메인 객체는 핵심 비즈니스 로직의 주체로서 객체의 상태가 데이터베이스에 영속화됩니다. 실무적으로 DB 테이블과 1:1 매핑되는 필드를 가질 수 있습니다.
예를 들어, Layered Architecture가 적용된 프로젝트라고 가정하면 Application Layer의 WriteService에서 Transaction이 걸려 있을 때 호출하는 `repository.save(객체)` 메서드의 인자입니다. 이 객체의 상태가 변화될 때 도메인 이벤트를 발생시킵니다.
2. 도메인 이벤트(Domain Event)
핵심 비즈니스 로직을 가지는 도메인 객체의 상태 변경(C, U, D) 결과입니다.
이벤트는 객체이고, 도메인 객체의 상태가 변경되었음을 알리는 데 사용합니다. `Events.publish(이벤트)` 와 같이 이벤트를 발행할 때 인자입니다. 도메인 이벤트는 기본적으로 스프링 이벤트(=내부 이벤트)로 발행합니다.
이벤트는 Transaction이 걸려있을 때 도메인 객체의 상태를 영속화하는 로직에서 발행됩니다. 따라서 도메인 로직이 Rollback 되면 이벤트 발행 로직 또한 Rollback 됩니다.
도메인 이벤트가 발행되고, 발행된 이벤트를 모든 도메인이 조회할 수 있도록 외부 Message Queue(e.g, Kafka)에 적재합니다. 이벤트를 큐에 적재할 때 구분하는 단위가 Channel입니다. Channel을 구독하면 도메인 이벤트를 수집할 수 있습니다. Channel은 일반화된 용어로 Kafka에서는 Topic에 해당됩니다. Kafka의 토픽을 구독하면 도메인 이벤트를 수집할 수 있습니다.
도메인은 이벤트를 발행하면서 동시에 다른 도메인의 이벤트를 구독하고 있는 경우가 일반적입니다.
Channel은 크게 도메인명과 객체명을 `.`(dot) 으로 구분합니다:
- 규격: `{도메인명}.{객체명}` (소문자 영문, 하이픈(-) 사용)
- 예: member.manager (회원 도메인의 관리자 이벤트가 저장되는 채널)

'Application > Event-Driven' 카테고리의 다른 글
| Eventmanager - 이벤트 저장소(Event Store) (5) (0) | 2024.03.18 |
|---|---|
| Eventmanager - 이벤트 구독(4) (0) | 2024.03.18 |
| Eventmanager - 이벤트 발행(3) (0) | 2024.02.14 |
| Eventmanager - Eventmanager와 이벤트 객체(2) (0) | 2024.02.09 |