해결된 질문
24.07.22 08:39 작성
·
127
1
안녕하세여 강의듣다가 현재 진행중인 프로젝트를 tomcat에 올려볼까 시도하고 있는데 잘안되서 여쭤봅니다. gradle 프로젝트이고 .jar -> .war으로 변환해서 올리고있는데 404에러가뜹니다.
maven 프로젝트로만 사용해야되는 건가요 ?
답변 1
0
2024. 07. 22. 19:06
안녕하세요, 이도원입니다.
Spring Boot 애플리케이션을 외부 Tomcat으로 기동하기시 위해서는 소스를 조금 수정하셔야 합니다.
Application 파일을 아래와 같이 수정합니다.
@SpringBootApplication
public class MyRestfulServiceApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MyRestfulServiceApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyRestfulServiceApplication.class);
}
}
pom.xml 파일에 Dependency를 확인합니다. (아래 내용이 없으면 추가합니다)
...
<packaging>war</packaging>
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
Maven에 대한 예시를 드렸는데, Gradle 도 유사하게 작업하시면 됩니다.
apply plugin: 'war'
...
dependencies {
... // war 패지키 파일 생성시 톰캣 라이브러리를 포함하지 않도록 추가 해야 합니다.
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}
패키징 된 war 파일을 Tomcat 폴더에 복사합니다.
<TOMCAT_HOME>/webapps 폴더에 war 파일을 복사하고, 톰캣을 기동하면, war 파일의 이름으로 폴더가 생성되는데, API 호출 시, http://localhost:8080/<패키징된파일의폴더명>/<api> 이렇게 호출하시면 됩니다. 예를들어, embedded tomcat에서 http://localhost:8080/hello-world로 호출하셨다면, my-restful-service.war 파일의 경우 외장 톰캣에서는 http://localhost:8080/my-restful-service/hello-world 이런식으로 호출하시면 됩니다.
만약 위와 같은 방법으로 했을 때에도, 404 오류가 발생한다면, 작업하신 JDK 버전과 Tomcat의 버전이 서로 호환되는지 확인해 보셔야 할 것 같습니다. 만약 Java17 + Spring Boot 3 버전으로 테스트 중이라면, Tomcat9 버전이 아닌 Tomcat 10나 Tomcat 11 버전으로 테스트해 보시기 바랍니다.
감사합니다.
2024. 07. 22. 19:10
감사합니다. Tomcat 버전 10으로 바꾸니 잘 작동하네요! 감사합니다