스프링 부트에서 내장된 tomcat이 아닌 외부 톰캣이나 기타 WAS를 이용하여 서비스를 하려면 프로젝트를 war로 배포해야 합니다. 배포 방법은 간단 합니다.
오늘은 몇일 전에 설치한 JEUS에 배포를 해보려고 하는데 작업 순서는
1. build.gradle에 war 추가 및 내장 톰캣 종속 제거
2. Application의 SpringBootServletInitializer 상속 수정
3. WAR 생성
4. JEUS 배포
5. 배포 오류
이고 Jeus 설치는 https://copycoding.tistory.com/388 을 참고하면 됩니다.
1. build.gradle에 war 추가
먼저 Spring Boot에서 war를 생성할 수 있도록 build.gradle에 한줄 추가해 줍니다.
id 'war'
그리고 내장 tomcat이 WAR 추가되지 않도록 한줄 더 추가 합니다.
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
수정된 build.gradle 모습은
plugins { id 'org.springframework.boot' version '2.5.6' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'war' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' } |
내장 tomcat을 제거하지 않으면 배포 중 오류가 발생하는 상황은 맨 끝에 소개합니다.
2. Application의 SpringBootServletInitializer 상속 수정
그리고 외부 WAS를 사용하기 위해 Context를 등록해야 하는데 예전에는 web.xml에 application context를 등록 했지만 servlet 3.0부터 SpringBootServletInitializer를 상속 받아 사용할 수 있도록 되었습니다.
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } |
기존 소스에 SpringBootServletInitializer 를 상속 받고 override를 해주면 됩니다.
configure가 보이는 군요. 클릭하고 [OK] 해서 추가해주고
@SpringBootApplication public class DemoApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { // TODO Auto-generated method stub return builder.sources(DemoApplication.class); } } |
return 값을 수정해 줍니다. 그냥 다 손으로 입력해도 됩니다.
3. WAR 생성
이제 Spring Boot에서 war를 생성 합니다.
Gradle Tasks에서 build 또는 war 를 더블 클릭해 줍니다.
Gradle Executions에 진행상황을 보여줍니다. 프로젝트를 빌드하다보면 test 소스 빌드에서 빨간색 오류가 나타나기도 하지만 무시해도 됩니다.
Duration 숫자가 멈추고 완료되면 프로젝트의 build > libs 폴더에 가면 war 파일이 보입니다.
이제 Jeus를 실행해서 배포 준비를 합니다.
4. JEUS 배포
제우스 admin 화면 좌측 메뉴에서 [Servers]를 선택하여 서버들을 확인 합니다.
배포할 서버가 살아있는지 확인을 합니다. server1에 배포를 하려고 하는데 잘 살아있군요.
좌측 메뉴에서 [Applications] 메뉴를 클릭 합니다.
여기서 상단 회색 버튼 중 [deploy]를 클릭 하면 배포 설정 화면이 나옵니다.
id를 입력해 주고 path에서 [입력] 버튼을 클릭 하면 팝업 창이 하나 나오는데
deploy하려는 파일을 선택해 줍니다. Type, Target Server 등은 위에 있는 이미지를 확인해서 설정 합니다. (지금보니 server1이 shutdown이네요. 실행전에 캡쳐한거라...)
아랫 부분에 있는 고급 선택사항에서는 Context Path만 입력 합니다.
여기에 입력하는 내용이 나중에 웹을 실행할때 영향을 주게 됩니다. 저는 프로젝트를 구분하려고/demo로 입력 했는데 그냥 /만 입력해도 됩니다.
이제 [확인] 버튼을 클릭하면 오류가 발생하던가 배포가 잘 되던가 하겠지요.
저는 배포가 잘 완료 되었습니다.
웹에서 접속을 해보려면 몇번 포트를 사용하고 있는지 확인을 해봐야하니 server1을 열어봅니다.
좌측 메뉴에서 [Servers]를 선택 하고
우축에서 server1을 클릭 하고
탭메뉴에서 [Resource]를 클릭해 보면 8088로 서비스가 되고 있군요.
몇일전에 글을 올린 STS4관련 프로젝트를 배포한것이니 http://localhost:8088/api/test하면 될것 같지만 배포할 때 [고급선택 사양]에서 /demo로 path를 잡았기 때문에 /demo를 추가해 주어야 합니다.
http://localhost:8088/demo/api/test
JEUS 8에도 배포가 잘 되었습니다.
5. 배포 오류
Spring Boot에서 war 를 만들어 배포할때 가장 많이 발생하는 오류입니다.
오류 로그를 보면
D:\TmaxSoft\JEUS8\domains\jeus_domain\servers\server1 \.workspace\deployed\demo\demo-0_0_1-SNAPSHOT-plain_war___\ WEB-INF\lib\tomcat-embed-core-9.0.54.jar JAR file was not loaded because the class javax/servlet/Servlet.class violated Servlet Spec 3.1. |
tomcat-embed-core는 1번에서 설명한것 처럼 꼭 제거를 해주어야 jeus에 배포시 오류가 발생하지 않습니다. 외부 Tomcat에서는 오류가 발생하지 않는데 jeus에서는 오류가 나옵니다.
- copy coding -
'Setting' 카테고리의 다른 글
Nginx 1.24.0 windows에 설치 및 간단한 설정 (0) | 2023.12.18 |
---|---|
crontab 사용방법 정리 (0) | 2022.08.22 |
Tmax JEUS 8 설치 및 샘플 서버 실행 (0) | 2021.11.12 |
[포트 포워딩] 집에서 공유기로 Server 운용하기 (2) | 2021.03.20 |
안드로이드 스튜디오(Android Studio) 배경색 테마 플러그인 설치 (0) | 2020.12.30 |