ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • War 배포 [내 + 외장 톰켓](feat.gradle)
    IntelliJ 2022. 1. 18. 11:03

    intellij (gradle) 에서 내장톰캣- 외장톰캣 순으로 실행시켜보면서 각각 필요한 설정이 무엇인지 정리할 예정입니다.

    1. bulid.gradle 수정

    두방법으로 사용 가능합니다. 스프링문서는 apply plugin : ‘war’로 소개되어 있으므로 다른 이슈가 없으면 이방법을 사용하는것이 좋습니다.

    plugins{
    	....
    	id 'war'
    }
     OR
    ...
    apply plugin:'war'
    IDE내 gradle task리스트를 확인 해보면 bootWar, war 가 추가된걸 확인할 수 있습니다.

    2. WAR파일 생성 및 확인 (내장톰캣)

    ide terminal 에서 ./gradlew bootwar 커맨드 라인으로 boot war 호출이 가능합니다.

    build.gradle 을 통하여 자동 설정된 이름을 지정할 수 있습니다.

    dependencies{
    	....
    }
    
    bootWar{
    	archiveName("ui.war")
    }
    

    이렇게 생성된 war파일은 스프링 부트웹 어플리케이션으로 단독 실행이 가능합니다.

    즉, 내장 Tomcat을 이용하기 때문에 더이상 부가적인 절차는 필요하지 않습니다.

    반면 Tomcat을 이용한다면 404 에러를 표시합니다.

     

    .\gradlew bootwar -> 내장톰캣을 명령어 (intellij terminal 에서 실행 하면 된다)

    java -jar .\ui.war -> 내장톰캣 실행 명령어

    상속시 springFramework의 Servlet 3.0 자원을 사용 → 서블릿 컨테이너에 의해 시작될 때 애플리케이션이 구성 된다.

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

    4. build.gradle 수정

    이렇게되면 gradle은 내장톰켓, 외장톰켓의 구분이 없어지게된다. 각각의 서블릿 컨테이너 작동에 영향을 주지 않도록 명시해야한다. 빌드 발행시 빌드 실행 시 providedRuntime로 지정된 의존성(dependency)은 의존성 jar파일이 lib-provided 디렉터리에 패키지 되어 WAR파일이 생성되므로, 내/외장 서블릿 컨테이너 모두에 사용 가능한 WAR파일이 될 수 있다.

    dependencies{
    	....
    	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    	....
    }

    5. War 비교 및 확인

    gradletaks 에서 bootWar는 내장용, War 외장용으로 배포되는걸 확인할 수 있다.

    정확한 경로는 intellij의 project structure → Artifacts 에서 확인할 수 있으며

    bootWar 는 단독 실행이 가능 (내장톰캣)

    war 는 단독 실행이 불가능 (외장톰캣)

    bootWar 실행시

    War 실행시

    두 테스크 간의 충돌을 막기위해선 build.gradle에서 수정이 필요하다

    dependencies{
    	....
    }
    
    bootWar.enabled = false
    war.enabled = true
    
    bootWar{
    	....
    }

    이렇게 설정을 할 경우 bootWar 를 실행을 하여도 내장톰캣 은 만들어지지 않는다.

     

    참조 [Spring Boot]war로 배포하기 (Gradle + 내/외장 톰캣) (tistory.com) 대충이라도 하자 (tistory.com)

     

    댓글

Designed by Tistory.