본문 바로가기
Spring Boot

Spring war 배포전 설정 문제

by ycjung93 2023. 6. 23.

Spring Boot를 통해 스케줄 관련 테스트를 하고,

내장 tomcat 서버가 아닌 외부 tomcat 서버를 통해 테스트를 해보려던 참이였는데

(내장 tomcat을 통해 정상 동작하는 것은 확인 됨)

해당 프로젝트를 build 를 통해 war를 만들고

외부 tomcat 파일에 war를 배포하여 실행해보았는데 동작이 되질 않는 문제가 발생한다!?

우선 다운로드 받은 외부 톰캣 폴더는 다음과 같은 구성으로 되어 있는데,

tomcat 폴더 구성

/webapps 폴더에 war를 배포하고,

/webapps war 배포

/bin 폴더 내에서 startup.bat 또는 startup.sh & shutdown.sh 를 통해 실행하여 테스트 한다.

그런데, 실제 startup.bat을 실행해보면 다음과 같이 뭔가 올라가는 것 같긴한데,,,

아래 로그를 보더래도 20010 포트가 활성화 되었다는 표시가 나온다.

그런데,

우리가 내장 톰캣을 사용할 때 항상 봤던 익숙한 로그가 보이질 않는다..

바로 아래 같은 문구가 !

결론은 다음과 같은 설정이 필요하다는 것을 알아냈다.

Spring Boot Application

스프링 부트 앱을 시작하는 역할을 하는 중요한 클래스로 @SpringBootApplication 어노테이션이 지정되어

있죠?

이 클래스에서 다음과 같이 SpringBootServletInitializer를 상속하고,

@Override 메소드를 추가합니다.(메소드 내 클래스 명은 작업중인 프로젝트마다 다름)

Spring Boot 애플리케이션을 서블릿 컨테이너에 배포하려 할 때 사용되는 클래스로

Spring Boot 애플리케이션은 내장된 톰캣 같은 서블릿 컨테이너에서 독립적으로 실행되지만,

전통적인 war 파일로 배포하려면 위에 SpringBootServletInitializer 를 사용해야 한다라는 가이드가 있네요.

그리고, configure() 메소드를 Override 하는 것은

애플리케이션의 주 구성 클래스를 반환하는 역할을 하는데 이 클래스를 기반으로 Spring ApplicationContext가 생성되는 용도라고 생각하시면 될 것 같아요.

다음 설정은 pom.xml에서 수정을 해야되는데,

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

<scope>provided</scope>

</dependency>

위에서 Spring Boot는 기본적으로 톰캣을 내장 서블릿 컨테이너를 사용한다고 설명했는데,

이는 Spring Boot 애플리케이션을 실행하면 자동으로 톰캣 서버가 시작되고 애플리케이션을 서비스한다는 의미겠지만, 실제 war 파일을 생성하여 외부의 서블릿 컨테이너에 배포하려는 경우에는 이러한 내장 톰캣이 필요하지 않겠죠?

그러므로,

외부 서블릿 컨테이너(별도의 Tomcat 서버)가 이미 실행 중이기 때문에 scope를 'provided'로 설정하여 톰캣

의존성을 설정이 필요하게 되는 것이죠~

자세히 살펴보면,

Maven 에서 provided scope 설정을 한다는 것은 애플리케이션을 컴파일하거나 테스트하는 동안에는

해당 의존성이 필요하지만, 실제로 애플리케이션이 실행될 때는 해당 의존성이 이미 제공될 것으로 가정하고

패키징 과정에서 제외한다는 의미로, war파일의 크기를 줄일 수 있다는 점도 있습니다.

즉, 애플리케이션은 별도의 서블릿 컨테이너에서 실행될 것이라는 것을 명시하는 설정이 되겠네요!

위의 설정을 모두 진행하고 다시 war로 build 후에 배포 실행해보겠습니다.

다시 실행한 화면

앞서, 설정없이 진행했던 것과는 다르게 익숙한 Spring 로그와 함께

정상적으로 외부 톰캣서버 배포가 된 것을 확인해봤습니다~

'Spring Boot' 카테고리의 다른 글

Spring 외부 tomcat 설정 관련  (0) 2023.06.23
Spring Starter Project 생성시.  (0) 2023.06.23