Spring Event Driven 에 대해 설명하고 사용하는 이유와 사용하는 방법에 대해 기술합니다.
<aside> 💡 목차
</aside>
스프링 이벤트는 스프링 프레임워크를 사용할 때 빈(Bean) 간 데이터를 주고받는 방식 중 하나로, 이벤트를 발행(Publish)하고 이벤트를 수신 또는 구독하여 소비(Listen/Subscribe)하는 기능을 제공합니다.
더욱이 쉽게 얘기하자면,
A 서비스(빈)에서 B 서비스(빈)메서드를 사용하는 예시를 들겠습니다. 보통의 경우 A 서비스 안에서 B 서비스를 갖고 있어 B 서비스의 메서드를 직접 호출하겠지만,
@Service
public class AService {
private BService b;
public AService(BService b) {
this.b = b;
}
public void doit() {
...
b.doit();
}
}
Event 방식은 B서비스의 메서드를 직접 사용하는 것이 아니라 스프링에게 A 서비스가 B 업무를 맡기고,
@Service
public class AService {
private ApplicationEventPublisher publisher;
public AService(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
public void doit() throws InterruptedException {
publisher.publishEvent(new BEvent("B 업무")); // 스프링! 해당 업무를 발행한다!
}
}
B 서비스가 스프링에게 업무를 받아 행위 하게 됩니다.
public class BService {
@EventListener
public void listen(BEvent event) { // 이벤트를 들었습니다! 일 할게요!
doit();
}
public void doit(){
...//
}
}