Spring Event Driven 에 대해 설명하고 사용하는 이유와 사용하는 방법에 대해 기술합니다.


<aside> 💡 목차

</aside>


Spring Event 이란?

스프링 이벤트는 스프링 프레임워크를 사용할 때 빈(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(){
				...//
		}
}