본문 바로가기

STUDY/Spring

Spring Boot | war 빌드, 외부 톰캣 사용 (WAS에 배포하기)

Spring Boot는 내부 톰캣이 있고.. jar로 빌드한다..
하지만... JSP를 써야했고.. war로 외부 톰캣에 배포해야 할 일이 생겼다...

war로 빌드

일단 war로 빌드하는 설정은 아주 간단하다.. id 'war'를 추가해주면 와르로 와르르

plugins {
    id 'org.springframework.boot' version '2.5.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'war'
}



근데 이렇게만 하고 자연스럽게 배포했고, 로그에 started.. 잘 됐다고 떴는데 404에러가 떴다..
알고보니 외부 톰캣을 사용할 때는 여러 설정을 더 해줘야 한다고하네유..

Main 클래스 수정

스프링 부트의 메인 클래스인.. @SpringBootApplicaion애노테이션이 붙은.. 그 클래스에
SpingBootServletInitializer를 상속받아야 한다.

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(Application.class);
  }

}

당연히 jar로 빌드할 때는 필요 없다.
그리고 이걸 읽어보자.. Spring Boot 웹 애플리케이션을 WAR로 배포할 때 왜 SpringBootServletInitializer를 상속해야 하는걸까?

build.gradle 수정

JSP를 사용하기 위해 추가한 tomcat-embed-jasper
implementation에서 providedCompile로 변경해줬다.
이렇게 변경하면 war로 빌드할 때 해당 의존성은 제거되면서 빌드된다고 함..

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    providedCompile 'org.apache.tomcat.embed:tomcat-embed-jasper'
    implementation 'javax.servlet:jstl:1.2'

       // 생략
}

끝.. 카페 24 tomcat jsp 호스팅을 했는데... 404가 뜬다..? 이렇게 해보세요..^^