WEBBOOK CHAPTER

WAR 배포, 밤에 깨지 않게: 4장 Gradle과 Spring Boot WAR의 차이를 이해한다

4장 Gradle과 Spring Boot WAR의 차이를 이해한다

Gradle은 war plugin을 적용하고 war 또는 전체 build task로 묶는다.


plugins {
    id 'java'
    id 'war'
}

war {
    archiveFileName = 'releaseportal.war'
}

Spring Boot 애플리케이션을 외부 Servlet 컨테이너에 배포하려면 공식 전통 배포 방식의 세 조건을 확인한다.

  1. 애플리케이션 진입점이 SpringBootServletInitializer를 확장하고 configure를 구현한다.
  2. 패키징을 WAR로 바꾼다.
  3. 내장 Tomcat 의존성을 Maven provided 또는 Gradle providedRuntime으로 둔다.

@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과 독립 실행 중 어느 운영 모델을 택했는지 한 서비스에서 혼용하지 않는다.