티스토리 뷰

SPRING 🍃

SpringBootServletInitializer 상속

절취선 2022. 2. 26. 20:22
반응형

SpringBootServletInitializer

목적

SpringBoot 웹 애플리케이션을 배포할 때는 주로 embedded tomcat이 내장된 jar파일을 이용한다.
하지만 특별한 경우에는 전통적인 배포 방식인 war 파일로 배포를 진행해야 하는 경우가 있을 수 있다.
이럴 경우 SpringBootServletInitializer를 상속받으면 된다.

@SpringBootApplication
public class SuperApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(SuperApplication.class, args);
    }
}

war파일 배포할 때 SpringBootServletInitializer를 상속해야 하는 이유

Spring 웹 애플리케이션을 외부 Tomcat에서 동작하도록 하기 위해서는 web.xml (Deployment Descriptor, DD)에 애플리케이션 컨텍스트를 등록해야만 한다.
이는, Apache Tomcat(Servlet Container)이 구동될 때 /WEB-INF 디렉토리에 존재하는 web.xml을 읽어 웹 애플리케이션을 구성하기 때문이다.
하지만 Servlet 3.0 스펙으로 업데이트되면서 web.xml이 없어도 동작이 가능해졌다. 이는,
web.xml 설정을 WebApplicationInitializer 인터페이스를 구현하여 대신할 수 있게 됐고, 프로그래밍적으로 ServletContext에
Spring IoC 컨테이너(AnnotationConfigWebApplicationContext)를 생성하여 추가할 수 있도록 변경됐기 때문이다.

이와 비슷한 맥락에서, web.xml이 없는 SpringBoot 웹 애플리케이션을 외부 Tomcat에서 동작하도록 하기 위해서는 WebApplicationInitializer 인터페이스를 구현한
SpringBootServletInitializer를 상속을 받는 것이 필요했던 것이다.

Reference

!Spring Boot 웹 애플리케이션을 WAR로 배포할 때 왜 SpringBootServletInitializer를 상속해야 하는걸까?

반응형

'SPRING 🍃' 카테고리의 다른 글

엔티티 매핑 최적화  (0) 2022.03.03
@WebMvcTest 와 @SpringBootTest  (0) 2022.02.26
[Junit.Test] initializationError  (0) 2021.03.24
[SPRING-BOOT] 프로젝트 분리  (0) 2021.03.11
[SPRING-BOOT] Mock and Mockito  (0) 2021.03.06
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함