Springboot Spring Application 파헤치기2

Springboot Spring Application 파헤치기2

백기선님의 강의인 Springboot 개념과 활용 강의를 듣고 공부한 내용을 정리한 글

Spring Application 파헤치기2

Application Events and Listeners

Spring에는 Event라는 것이 존재.

Application Context를 만들었을 때, 잘 구동이 됐을 때, 준비가 다 됐을 때, 실패했을 때와 같이 여러가지 Event가 존재한다.

ApplicationStartingEvent는 Application Context를 만들기 이전에 실행되는 이벤트이다.

그러나 해당 이벤트를 구현하여 빈으로 등록해도 실행이 되지 않는다.

왜냐하면 Application Context가 구동 전에 발생하기 이벤트이기 때문에 IoC 컨테이너가 해당 이벤트를 잡아내지 못한다.

이를 해결하기 위해 빈을 등록하지 않고 이벤트를 Application Context에 직접 addListeners() 또는 빌더패턴이라면 listeners() 메소드를 사용해 이벤트 등록이 가능하다.

스크린샷 2020-02-29 오후 10 05 15

출력이 잘 되는 것을 볼 수 있다.

그러면 Application Context가 구동된 이후 시점의 이벤트는 빈으로 등록하면 되느냐?

맞다. 이후의 이벤트들은 빈으로 등록하면 이벤트 처리가 가능하다.

Application Context가 구동되기 전에 발생하는 이벤트인지, 후에 발생하는 이벤트인지에 따라 다르게 처리를 해주어야한다.

WebApplication 설정

스크린샷 2020-02-29 오후 10 09 29

Application Type에 대해 알아보자

WebApplication.SERVLET은 Spring MVC가 존재할때 기본으로 사용되는 타입이다.

WebApplication.REACTIVE는 Spring Webflux가 존재할때 기본으로 사용되는 타입이다.

둘다 없으면 WebApplication.NONE이 기본 타입으로 설정된다.

Spring MVCSpring Webflux가 모두 의존성이 추가된 경우라면 어떻게 될까?

이 경우에도 WebApplication.SERVLET으로 설정된다.

만약 위와 같은 상황에서 WebApplication.REACTIVE 타입을 사용하려면 어떻게 해야할까?

답은 Application Context에 WebApplication.REACTIVE 타입을 명시적으로 설정해주어야한다.

Application Argument 사용하기

VM option에 추가되는 -로 시작하는 옵션은 JVM 옵션

Application Argument는 --로 시작한다.

IoC 컨테이너에 이미 빈으로 등록되어 있는 ApplciationArgument를 주입받아 사용하면 Application Argument 값만 가져올 수 있다. (VM option 값은 가져오지 않음)

Application 실행 뒤 추가적으로 실행하고 싶을 때

ApplicationRunner (추천) or CommandLineRunner

만약 ApplicationRunner가 여러개면 @Order 애노테이션을 통해 순서를 지정하는 것 또한 가능하다.

Reference

인프런 백기선님의 스프링 부트 개념과 활용



© 2022. by minkuk

Powered by minkuk