티스토리 뷰

 

 

 

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 (회원 도메인의 관리자 이벤트가 저장되는 채널)

 

Kafka에 적재된 토픽(채널)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함