본문 바로가기
Middleware/JEUS

JEUS 환경에 Spring Boot 배포 시 내장 WAS(Tomcat) 제거하는 방법

by nxCore 2023. 11. 7.

 

 

최근 웹 프로젝트를 Spring Boot 환경으로 개발하는 사례가 늘고 있습니다.

Spring Boot 를 사용할 때의 주의점은, 내장 WAS 가 존재하므로 다른 WAS 에 배포가 필요한 경우 반드시 내장 WAS 를 제거하는 설정을 해주어야 한다는 점입니다.

 

Spring Boot 프로젝트 생성 후 별다른 작업을 하지 않았을 시 내장 WAS 로 Tomcat 이 기본 동작합니다.

내장 WAS 는 Tomcat 외에 Jetty, Undertow, Netty(webflux) 가 있으므로 현재 설정되어 있는 값을 확인 후 조치합니다.

 

Spring Boot Application 을 JEUS 에 배포하기 위한 내장 WAS 제거 방법에 대한 가이드 입니다.

Build Tool 에 따라 방법이 다르므로 프로젝트의 Build Tool 에 맞게 진행하시기 바랍니다.

 

 

1. Maven 환경

 - pom.xml 에 정의되어 있는 내장 WAS 사용 설정을 WAR 빌드 시 제외되도록 설정합니다.

 - 내장 Tomcat 의 경우, artifactId 는 spring-boot-starter-tomcat 입니다.

 - scope 설정을 provided 로 변경하여, 빌드 시 관련 라이브러리가 포함되지 않도록 합니다.

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>

	<!-- 내장 WAS 설정 부분 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-tomcat</artifactId>
		<!-- scope 를 provided 로 설정 -->
		<scope>provided</scope>
	</dependency>
</dependencies>

 

 

2. Gradle 환경

 - build.gradle 에 정의되어 있는 내장 WAS 사용 설정을 WAR 빌드 시 제외되도록 설정합니다.

 - dependency 선언을 providedRuntime 으로 변경하여, 빌드 시 관련 라이브러리가 포함되지 않도록 합니다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'

	//내장 WAS 설정 부분 : providedRuntime 으로 변경한다
	providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
}

 

 

3. SpringBootServletInitializer (SpringApplicationBuilder) 상속, 재정의

 - 경우에 따라 Main Class 에 SpringBootServletInitializer 상속 처리가 필요할 수 있습니다.

 - 다음과 같이 SpringBootServletInitializer 를 상속 후 SpringApplicationBuilder 메소드를 재정의 합니다.

@RestController
@SpringBootApplication

//SpringBootServletInitializer 를 상속 받아온다.
public class MyApplication extends SpringBootServletInitializer {	
	@RequestMapping("/")
	String home() {
		System.out.println("Called!!!");
		return "Hello World!";
	}

	public static void main(String[] args) {
		SpringApplication.run(MyApplication.class, args);
	}

	//SpringApplicationBuilder 메소드를 아래와 같이 재정의한다.
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(MyApplication.class);
	}
}

 

댓글