Spring의 EventListener 사용법
- 스프링
EventListener는 모듈 간 단방향 의존성 유지를 위한 모듈리스 아키텍처 구현에 핵심적으로 활용됩니다. 🏗️
- 이벤트 사용은 비즈니스 도메인과 이력 관리 모듈 간의 양방향 참조를 방지하고, 향후 Kafka/RabbitMQ 같은 메시지 큐 연동에 유리합니다. 🔗
- 이벤트 발행은
ApplicationEventPublisher를 통해 이루어지며, publishEvent() 메소드로 이벤트를 전달합니다. 📢
- 이벤트 수신은
@EventListener 어노테이션이 붙은 메소드에서 담당하며, 특정 ChangeEvent를 구현하는 이벤트를 받습니다. 👂
ChangeEvent는 CreatedEvent, ModifiedEvent, LookupEvent를 포함하는 봉인된 인터페이스(sealed interface)로 정의되어 이벤트 모델의 타입 안정성을 높입니다. 🛡️
ModifiedEvent는 ChangeFieldByFunction을 활용하여 변경된 필드의 이전 값과 새 값을 구분하여 처리합니다. 🔄
LookupEvent는 조회용 이벤트로, 이력 관리 리스너에서는 특별히 처리하지 않습니다. 🚫
- 제네릭을 사용하여 이벤트의 타입 안정성을 강화하며, 특히
Entity 유형의 통합 데이터 컨테이너와 연동됩니다. 🧬
- 주요 활용 사례는 비즈니스 도메인 변경 이벤트를 이력 관리 모듈의 리비전 테이블에 기록하는 것입니다. 📝