부트로 만든 프로젝트는 jar로 말아져 톰캣을 포함한다..
벗... 외장 톰캣을 사용해야하는 경우가 있다...
생각보다 ... 외장톰캣을 사용하는 것은 간단하다..
먼저 pom.xml에 ..
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging> // 추가
<name>ext-tomcat</name>
war로 말겠다고 명시를 해주고...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
요놈도 요로코롬 provided로 바꿔줘야 한다고 지피티가 그랬는데 원래 이렇게 되어있었음...
spring-boot-starter-tomcat을 provided로 설정하는 이유는 외장 톰캣을 사용할 때, 내장 톰캣 라이브러리를 제외하여 외장 톰캣의 서블릿 컨테이너에 의존하기 위함이다. 그렇지 않으면 톰캣이 중복 로드되어 에러가 발생할 수 있다.
그리고..
@SpringBootApplication
public class Application {
...
}
기존 어플리케이션에
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
요로코롬 추가해준다
리턴에 Application은 프로젝트 어플리케이션 이름임;; 아무 생각 없이 따라쳤더니
import com.apple.eawt.Application;
이게 임포트 돼서 왜 안되나... 했었음..
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyApplication.class);
}
}
멍청;;;
다음으로 걍
빌드하고.. clean... install 하면... war가 짠~ 나온다..
톰캣은 받기 싫어서 도커로 띄웠다..
docker run -d --name ext-tomcat -p 18080:8080 \
-v /Users/tars/Documents/ext-tomcat:/usr/local/tomcat/webapps \
-e TOMCAT_USERNAME=admin \
-e TOMCAT_PASSWORD=admin \
tomcat:9.0
/Users/tars/Documents/ext-tomcat 경로에 만들어둔 war를 옮긴다..
다만 여기서 war의 이름을 ROOT로 바꿔줘야 한다..
그대로 쓰면 다 된 것 같은데 localhost로 붙으면 계속 404만 뜨더라...
그 이유는, 톰캣은 WAR 파일의 이름을 컨텍스트 경로로 자동 설정하기 때문이다.
WAR 파일 이름이 ROOT.war일 경우 톰캣은 컨텍스트 경로를 루트(/)로 설정하며, Spring Boot 애플리케이션은 기본적으로 루트 경로(/)에서 동작하도록 설계되었기 때문에 URL 충돌 없이 애플리케이션이 정상적으로 동작한다.
만약 WAR 파일 이름을 변경하지 않으면, WAR 이름에 따라 컨텍스트 경로가 달라지며, URL이 복잡해지거나 설정과 충돌이 발생할 수 있다.`"
docker logs -f ext-tomcat
컨테이너 잘못 띄운 게 아니라면.. 스프링 돌아가는 게 보일 거임..
기존에 잘 돌아가더라도..
외장 톰캣으로 옮겼을 때
파일 업로드 쪽이나 특정 확장자로 엑스포트 하는 부분이 말썽을 피울 수 있으니 고쪽을 테스트 해보세용~ 이라는 조언~~~
'Spring Boot' 카테고리의 다른 글
Spring MVC가 아닌 Boot RestAPI에서 DispatcherServlet 동작 흐름 (0) | 2024.10.22 |
---|---|
JSON_ARRAYAGG & @JsonRawValue (1) | 2024.09.24 |
AOP를 활용한 브라우저 캐시_4 정적 리소스 캐싱 명시 (0) | 2024.09.11 |
AOP를 활용한 브라우저 캐시_3_AOP / @GetMapping (2) | 2024.09.10 |
AOP를 활용한 브라우저 캐시_1_전략 전택 (1) | 2024.09.10 |