스프링 이벤트
- 국비지원 (스파르타)
- 2025. 3. 4. 21:33
반응형
반응형
스프링 이벤트(Spring Events)는 애플리케이션 내에서 컴포넌트 간의 느슨한 결합(loose coupling)을 유지하면서 비동기적 또는 동기적으로 메시지를 전달하는 메커니즘입니다.
스프링의 Observer 패턴 기반으로 동작하며, 특정 이벤트가 발생했을 때 이를 감지하고, 이에 대한 처리를 수행하는 구조입니다.
1. 스프링 이벤트의 구조
- Event (이벤트): 발생한 상황을 나타내는 객체. ApplicationEvent를 상속하거나 일반 POJO로도 이벤트를 정의 가능.
- Publisher (발행자): 이벤트를 발생시키는 주체. ApplicationEventPublisher를 사용해 이벤트를 발행.
- Listener (리스너): 이벤트를 구독하고 처리하는 주체. @EventListener 어노테이션으로 구현.
2. 이벤트의 동작 흐름
- 이벤트 객체 생성: 특정 상황에 대한 정보를 담는 객체.
- 이벤트 발행 (Publish): ApplicationEventPublisher.publishEvent(event) 메서드를 통해 이벤트 발행.
- 이벤트 리스닝 (Listen): @EventListener가 붙은 메서드가 이벤트를 감지하고, 이벤트를 처리.
3. 예시 코드
// 1. 이벤트 객체 정의
public class UserRegisteredEvent {
private final String username;
public UserRegisteredEvent(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
}
// 2. 이벤트 발행자 (Publisher)
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final ApplicationEventPublisher publisher;
public UserService(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void registerUser(String username) {
System.out.println(username + " 등록 완료!");
publisher.publishEvent(new UserRegisteredEvent(username));
}
}
// 3. 이벤트 리스너 (Listener)
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class WelcomeEmailListener {
@EventListener
public void sendWelcomeEmail(UserRegisteredEvent event) {
System.out.println("Welcome email sent to " + event.getUsername());
}
}
4. 실행 결과
john 등록 완료!
Welcome email sent to john
5. 스프링 이벤트의 장점
- 느슨한 결합(Loose Coupling): 발행자와 리스너가 서로의 존재를 모른 채로 독립적으로 동작.
- 확장성: 특정 이벤트에 여러 리스너를 붙일 수 있어 기능 확장에 용이.
- 비동기 처리 가능: @Async 어노테이션을 사용해 비동기 이벤트 리스닝 가능.
6. 비동기 이벤트 리스닝 (선택적)
import org.springframework.scheduling.annotation.Async;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
@Component
public class AsyncWelcomeEmailListener {
@Async
@EventListener
public void sendWelcomeEmail(UserRegisteredEvent event) {
System.out.println("비동기 메일 전송: " + event.getUsername());
}
}
결론적으로, 스프링 이벤트는 애플리케이션 내의 구성 요소 간 통신을 단순화하고 결합도를 낮춰, 유지보수성과 확장성을 높이는 데 중요한 역할을 합니다.
반응형
'국비지원 (스파르타)' 카테고리의 다른 글
카프카는 도대체 어떻게 사용하는 걸까? (2) | 2025.03.07 |
---|---|
스프링 시큐리티(인증) (0) | 2025.03.05 |
DDD와 샤딩(feat.gpt) (0) | 2025.02.28 |
DDD (시작) (0) | 2025.02.27 |
첫번째 프로젝트 회고 (0) | 2025.02.26 |