본문 바로가기

IT/Spring

[Spring Boot] SpringBootServletInitalizer를 상속하는 이유

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class BamduleApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(BamduleApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(BamduleApplication.class, args);
    }

}

Spring Boot 실행 클래스에서 SpringBootServletInitializer 클래스를 상속 받는 것을 볼 수 있습니다.

SpringBootServletInitializer 클래스를 왜 상속 받아야 할까요?

Spring개발 시  web.xml에 DispatcherServlet을 등록하는 작업이 필요했습니다.

하지만 Servlet 3.0으로 업데이트 되면서 web.xml이 없어도 배포가 가능해졌습니다.

그 이유는 web.xml 설정을 WebApplicationInitializer 인터페이스를 구현하여 대신 할 수 있고,
프로그래밍적으로 Spring IoC 컨테이너를 생성하여 ServletContext에 추가할 수 있도록 변경 되었기 때문입니다.

SpringBootServletInitializer 클래스는 WebApplicationInitializer 인터페이스의 구현체입니다. 

결과적으로 SpringBootServletInitializer 상속 한다는 것은 Spring Boot 애플리케이션 동작이 가능 하도록 웹 애플리케이션 컨텍스트(IoC 방식으로 Bean을 관리하는 컨테이너) 구성 한다는 의미입니다.