Spring의 @EventListener
는 애플리케이션 내에서 이벤트 기반 프로그래밍(event-driven architecture) 을 구현할 수 있도록 도와주는 기능입니다. 이는 코드 간의 결합도를 낮추고, 확장성과 유지보수성을 높이는 데 유용합니다.
@EventListener
는 특정 이벤트 클래스가 발행되면, 해당 이벤트를 처리하는 메서드에 붙여 동작을 트리거합니다.이벤트 클래스 정의 (POJO)
public class UserCreatedEvent {
private final User user;
public UserCreatedEvent(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}
이벤트 발행 (Event Publishing)
@Service
public class UserService {
private final ApplicationEventPublisher publisher;
public UserService(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void registerUser(User user) {
// 사용자 등록 로직
publisher.publishEvent(new UserCreatedEvent(user));
}
}
이벤트 리스너 작성 (Event Listener)
@Component
public class UserEventListener {
@EventListener
public void onUserCreated(UserCreatedEvent event) {
User user = event.getUser();
// 예: 환영 이메일 발송
System.out.println("Welcome email sent to: " + user.getEmail());
}
}
@Async
와 함께 사용@Async
@EventListener
public void handleEventAsync(UserCreatedEvent event) {
// 비동기로 실행
}
@EnableAsync
설정이 필요상황 | 이유 |
---|---|
사용자 가입 후 후처리 (이메일 발송 등) | 주 로직과 후처리를 분리하여 관심사 분리 |
주문 완료 후 재고 차감 | 이벤트 중심의 업무 흐름 설계 |
도메인 이벤트 적용 (DDD) | Aggregate Root가 Event를 발행하는 방식 구현 |
@Async
활용)@TransactionalEventListener
사용 가능)ContextRefreshedEvent
, ApplicationReadyEvent
등@EventListener
는 단순한 비즈니스 이벤트부터 복잡한 도메인 이벤트까지 다양하게 활용할 수 있으며, 관심사 분리와 유지보수성을 향상시키는 데 강력한 도구입니다.
Jooq란 무엇인가? (0) | 2025.06.03 |
---|---|
Liquibase로 DB 변경 이력 관리하기 (0) | 2025.06.02 |
Spring Boot + GitLab CI/CD 배포 방법 (3) | 2025.06.01 |
[Spring & Swagger] Failed to load API definition. (0) | 2025.05.21 |
[JPA] - 영속성 컨텍스트에 대해 (0) | 2024.12.17 |