Spring Boot

부트 외장톰캣 사용

99duuk 2024. 12. 12. 13:26

부트로 만든 프로젝트는 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

컨테이너 잘못 띄운 게 아니라면.. 스프링 돌아가는 게 보일 거임.. 

 

 

 

 

기존에 잘 돌아가더라도..

외장 톰캣으로 옮겼을 때 

파일 업로드 쪽이나 특정 확장자로 엑스포트 하는 부분이 말썽을 피울 수 있으니 고쪽을 테스트 해보세용~ 이라는 조언~~~