본문 바로가기

SpringBootServletInitializer

Spring boot 웹 어플리케이션 개발시 Local 에서는 잘만 되던게, WAR 파일로 서버에 배포하면 404 error 날 때가 있다. 서버 로그에는 별 메시지가 없다. 단지 배포가 잘됐다는...;


INFO [dev.example.com-startStop-3] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive 
[/var/lib/tomcat8/webapps/auth/ROOT.war] has finished in [2,533] ms
cs


이럴 경우 local 에서 되던게 server 에서 안되는 것이니 서버 설정에 문제를 예상할 수도 있지만, 서버는 에러 발생 시 로그를 남긴다; 로그 없는 이 상황은 뭐라고 검색하기도 난해하고 참... 예상되는 문제를 하나씩 점검해 보는 수 밖에 없다. 내 경우는 main 클래스에 SpringBootServletInitializer 를 상속하지 않아서 생긴 현상임을 알게 됐다...


main 클래스에서 SpringBootServletInitializer 상속받고 configure 오버라이드 하면 된다.


@SpringBootApplication
public class Application extends SpringBootServletInitializer {
 
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
}
cs


이렇게 하면 컨테이너가 실행될 때 war로 배포된 Spring 웹 어플리케이션 컨텍스트가 준비된다.

Servlet3.0 이전의 web.xml 역할을 하는 셈.

또 깜빡하더라도 빨리 캐치하자.ㅋ