intellij (gradle) 에서 내장톰캣- 외장톰캣 순으로 실행시켜보면서 각각 필요한 설정이 무엇인지 정리할 예정입니다.
1. bulid.gradle 수정
두방법으로 사용 가능합니다. 스프링문서는 apply plugin : ‘war’로 소개되어 있으므로 다른 이슈가 없으면 이방법을 사용하는것이 좋습니다.
plugins{
....
id 'war'
}
OR
...
apply plugin:'war'
![](https://blog.kakaocdn.net/dn/3DTex/btrq35uqTXo/e1f7c6DE923b4g6Ov8kkKk/img.png)
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 -> 내장톰캣 실행 명령어
![](https://blog.kakaocdn.net/dn/b4Azi4/btrq4pNfz3A/IZK2B2gsBFjMKRkkv6KVBK/img.png)
상속시 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 실행시
![](https://blog.kakaocdn.net/dn/dwL9OB/btrq4xqHmNB/QxypsVi8HHNVwSibKzYvB1/img.png)
War 실행시
![](https://blog.kakaocdn.net/dn/Bf909/btrq0SQvrJR/d62RUbaHEKylj72NUt0ZX0/img.png)
두 테스크 간의 충돌을 막기위해선 build.gradle에서 수정이 필요하다
dependencies{
....
}
bootWar.enabled = false
war.enabled = true
bootWar{
....
}
이렇게 설정을 할 경우 bootWar 를 실행을 하여도 내장톰캣 은 만들어지지 않는다.
참조 [Spring Boot]war로 배포하기 (Gradle + 내/외장 톰캣) (tistory.com) 대충이라도 하자 (tistory.com)
Uploaded by Notion2Tistory v1.1.0