관리 메뉴

나만의공간

번외 : Spring Boot War파일 생성, 로컬 Tomcat 뛰우기 본문

IT/Spring

번외 : Spring Boot War파일 생성, 로컬 Tomcat 뛰우기

밥알이 2022. 1. 8. 11:04

연재순서

1. Spring Boot Project Initializr (스프링 부트 프로젝트 생성법)
2. Spring Boot Project Initializr (RestFul API 연결)
3. Spring Boot Project Initialzr (Swagger 연결)  
4. Spring Boot Project Initializr (Log4j 연결)
5. Spring Boot Project Initializr (Requet Get/Post 출력)
6. 번외 : Spring Boot War 파일 생성, 로컬 Tomcat 뛰우기
7.  Srping Boot Project Initializr (GitHub 위치) 

지금까지 Spring Main을 실행하는 방식으로 Spring Boot를 실행 시켜 왔습니다.
이번 연재에서는 War파일을 생성하여, 별도 설치된 Tomcat을 이용하여 Spring Boot 실행하는 방법을 이야기 하겠습니다.
먼저 Tomcat은 9.0 이상 버전으로 아래 사이트에서 OS환경에 맞는 Tomcat을 다운로드 받아 설치 하시기 바랍니다.
아파치톰켓 다운로드 : https://tomcat.apache.org/

Gradle 빌드 war 설정 추가

변경된 build.gradle 정보 (아래는 변경된 build.gradle 정보)
id 'war' 추가
war 정보 추가

plugins {
// id 'org.springframework.boot' version '2.6.2'
   id 'org.springframework.boot' version '2.5.2'
   id 'io.spring.dependency-management' version '1.0.11.RELEASE'
   id 'java'
   id 'war'
}

group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
   compileOnly {
      extendsFrom annotationProcessor
   }
}

war {
   enabled = true
   webInf { // webInf에 processeResources의 결과 디렉토리를 포함하도록 추가
      with {
         from("${buildDir}/resources/main")
      }
   }
}

repositories {
   mavenCentral()
}

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-web'
   compileOnly 'org.projectlombok:lombok'
   annotationProcessor 'org.projectlombok:lombok'
   testImplementation 'org.springframework.boot:spring-boot-starter-test'
   implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
   implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
}

test {
   useJUnitPlatform()
}

생성된 war 파일 확인

Intellij -> File -> Project Structure -> Artifacts 선택
아래와 같이 war파일이 생성된 것이 보입니다.

Local 톰켓 세팅

 

오른쪽 상단에 있는 서버실행 셀렉트박스에서 Edit Configuration 선택

+ 선택해서 Tomcat Server -> Local 선택

Local을 선택 후 Deployment 탭을 선택

아래 + 클릭하여 Artifact를 선택

생성된 War파일중 아래에 선택된 War파일을 선택

선택 완료된 화면

Application Context에 있는 문자들 삭제하고서 "/" 루트 표시만 남기고 OK버튼 클릭

설정 완료 후 local 톰켓을 실행할떄 아래와 같은 오류가 발생하면 war파일 참조 위치를 변경해 주어야 합니다.
오류 내용

[2022-01-04 09:50:33,467] Artifact Gradle : com.study : studyTwo-0.0.1-SNAPSHOT.war (exploded): Artifact is being deployed, please wait...
[2022-01-04 09:50:33,476] Artifact Gradle : com.study : studyTwo-0.0.1-SNAPSHOT.war (exploded): Error during artifact deployment. See server log for details.
[2022-01-04 09:50:33,476] Artifact Gradle : com.study : studyTwo-0.0.1-SNAPSHOT.war (exploded): com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: /Users/songyjun/personalproject/studyTwo/build/libs/exploded/studyTwo-0.0.1-SNAPSHOT.war not found for the web module.

Intellij 설정 변경
Build and run using : Intellij IDEA로 변경
Run tests using : Intellij IDEA로 변경

위와 같이 설정 완료 후에도 로컬 War파일로 Spring boot 화면이 안올라 오면 main메소드가 있는 클래스 "StudyTwoApplication" 클래스 파일에 SpringBootServletInitializer를 상속 받게 수정 한다.

package com.study.studyTwo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class StudyTwoApplication extends SpringBootServletInitializer {

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

}

 

War파일로 로컬 톰켓 실행후 브라우져 접속시화면

아래 이미지 처럼 localhost:8080접속시 swagger화면이 잘 나오면 정상적 설정이 완료되었습니다.


오늘도 수고 하셨습니다.

 

Comments