4장 Gradle과 Spring Boot WAR의 차이를 이해한다
Gradle은 war plugin을 적용하고 war 또는 전체 build task로 묶는다.
plugins {
id 'java'
id 'war'
}
war {
archiveFileName = 'releaseportal.war'
}
Spring Boot 애플리케이션을 외부 Servlet 컨테이너에 배포하려면 공식 전통 배포 방식의 세 조건을 확인한다.
- 애플리케이션 진입점이
SpringBootServletInitializer를 확장하고configure를 구현한다. - 패키징을 WAR로 바꾼다.
- 내장 Tomcat 의존성을 Maven
provided또는 GradleprovidedRuntime으로 둔다.
@SpringBootApplication
public class ReleasePortalApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(ReleasePortalApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(ReleasePortalApplication.class, args);
}
}
WebFlux는 Servlet API에 의존하지 않고 기본적으로 Reactor Netty를 사용하므로 전통 WAR 배포 대상이 아니다. “Spring이면 모두 WAR”라고 가정하지 않는다. Spring Boot의 실행 가능한 WAR는 java -jar로도 실행될 수 있지만, 외부 Tomcat과 독립 실행 중 어느 운영 모델을 택했는지 한 서비스에서 혼용하지 않는다.