Spring boot 에서 war 배포가 안되는 현상?
일반적으로 intellij(저자가 해당 툴을 쓰기때문...)에서 개발을 진행하는 경우 따로 tomcat을 설정해주지는 않는다.
왜냐면 intellij에서 내장 tomcat을 사용하여 웹 서비스를 기동하며 작업을 하기 때문이다.
현 상태로 war 를 빌드하여 외장 tomcat으로 배포를 하면 Springboot 프로젝트를 정상적으로 인식하지 못할것이다.
Spring 과 Tomcat의 web.xml
왜냐면 이전 Spring 3.x 버전에서 web.xml에 Spring 웹 애플리케이션 컨텍스트(WebApplicationContext) 구성 하는 작업을 했다.
그 중에 대표적인 것이 서블릿 애플리케이션 컨텍스트(DispatcherServlet)를 web.xml에 등록 하는 것이었다.
<servlet>
<servlet-name>example</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
위와 같은 작업은 Spring과 tomcat과 같은 Servlet Container에서 동작하도록 하는 설정이다.
그러나 Servlet 3.0 1), Tomcat 7.0 2) 이상 부터는 web.xml 없이도 배포가 가능하게 변경되었다.
(과거에 위 같은 작업을 했던 이유는 Servlet 버전이 낮아서 했던 것)
Spring Framework와 Servlet 3.0
Spring Framework는 Servlet 3.0 이상 환경에서 web.xml 대신하여 ServletContext를 프로그래밍적으로 다룰 수 있게 WebApplicationInitializer 인터페이스를 제공 한다.
아래 처럼 web.xml 역할을 WebApplicationInitializer 인터페이스를 구현하여 프로그래밍적으로 ServletContext에 Spring IoC 컨테이너(AnnotationConfigWebApplicationContext)를 생성하여 추가할 수 있다.
SpringBootServletInitializer는 WebApplicationInitializer 인터페이스의 구현체
SpringBootServletInitializer는 웹 애플리케이션 컨텍스트를 생성하여 ServletContext 에 추가한다. 이 과정에서 웹 애플리케이션 컨텍스트로는 AnnotationConfigEmbeddedWebApplicationContext 를 사용한다.

결론
SpringBootServletInitializer 상속 이란?
Tomcat 같은 Servlet Container 환경에서 Spring Boot 애플리케이션 동작 가능 하도록 웹 애플리케이션 컨텍스트 구성한다는 의미
Refs
3) 참고 사이트
'BE > Java' 카테고리의 다른 글
| JWT(Json Web Token) 이란? (1) | 2024.06.11 |
|---|---|
| Scanner vs BufferReader (0) | 2024.06.03 |
| Stack 이란? (0) | 2024.02.13 |
| Queue 란? (0) | 2024.02.13 |
| War build 시 Springboot가 올라오지 않는 이유 (0) | 2024.01.16 |