본문 바로가기

Backend Development/Spring boot

[Spring boot] Tomcat (windows) + War 배포 하기

Apache Tomcat 다운로드 및 압축 해제

 

Apach Tomcat 9.0대 Download는 아래 Url에서 수행한다.

 

https://tomcat.apache.org/download-90.cgi

추세에 맞게 64bit용 zip파일을 다운받고 원하는 위치에 Extract 해둔다.

 

Spring boot application 수정 사항

 

Spring boot application main에서 다음과 같이 extend 및 implement를 추가한다.

@EnableConfigurationProperties(AppProperties.class)
@SpringBootApplication

// Main class에서 SpringBootServletInitializer를 상속하고, implements를 구현한다.
public class SdpApplication extends SpringBootServletInitializer implements WebApplicationInitializer {

   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
      return application.sources(SdpApplication.class);
   }

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

}

 

pom.xml에 아래 추가

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.5.6</version>
   </parent>
   <groupId>com.xxx</groupId>
   <artifactId>xxx</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   
   // 빌드 패키지가 war임을 명시한다.
   <packaging>war</packaging>
   
   ... 중략
   
   
   <profiles>
        <profile>
            <id>dev</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
                <embedded.tomcat.scope>compile</embedded.tomcat.scope>
            </properties>
        </profile>
        <profile>
            <id>opsec</id>
            <properties>
                <spring.profiles.active>operation</spring.profiles.active>

                // 외부 tomcat에 war로 배포할때는 내장 톰캣을 사용하지 않기 위해 
                // 변수를 잡아서 provovided로 설정한다.
                <embedded.tomcat.scope>provided</embedded.tomcat.scope>
            </properties>
        </profile>
	</profiles>
    
    ... 중략
    
    
    // 내장 톰캣의 scope는 메이븐 빌드시 설정되는 변수값에 의해 결정되도록 한다. 
    // scope이 compile이면 빌드시 무조건 포함되고 provided 외부 servlet 라이브러리와 함께 동작한다는 의미이다.
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>${embedded.tomcat.scope}</scope>
    </dependency>

 

Maven 으로 war 빌드

 

mvn clean package -P dev

INFO] Assembling webapp [sdp] in [E:\Data\Github\xxx\target\sdp-0.0.1-SNAPSHOT]
[INFO] Processing war project
[INFO] Copying webapp resources [E:\Data\Github\xxx\src\main\webapp]
[INFO] Building war: E:\Data\Github\xxx\target\sdp-0.0.1-SNAPSHOT.war
[INFO]
[INFO] --- spring-boot-maven-plugin:2.5.6:repackage (repackage) @ sdp ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:27 min
[INFO] Finished at: 2022-09-07T00:22:29+09:00
[INFO] ------------------------------------------------------------------------

 

Tomcat 폴더에 war 파일 압축 해제 및 복사

 

D:\Data\apache-tomcat-9.0.65\webapps\ROOT

 

 

Tomcat 실행

 

D:\Data\apache-tomcat-9.0.65\bin\startup.bat

 

참고로 위 startup.bat로 Tomcat cmd창으로 실행을 했을때 출력 메세지가 꺼지는 경우는 regedit를 실행해서 아래와 같이 키, 값을 추가해주면 된다.

 

HKEY_CURRENT_USER -> Console 에서 우클릭으로 Tomcat 키 추가

키값에 우클릭으로 DWORD 값 추가를 선택하고 CodePage 키에 10진수 65001 값을 할당하고 저장한다.

위와 같이 CodePage 레지스트리를 추가하고 Tomcat cmd를 다시 실행하면 한글 깨짐이 없어짐을 알 수 있다.

 

Vue.js나 React와 같이 SPA 로 Front 단 코드를 tomcat에 배포하였을 경우에 브라우저에서 F5로 Reload를 하면 404 에러가 뜨고 멈추는 경우를 볼 수 있다. 이럴 경우에는 아래 톰캣의 web.xml 에서 하단에 error 관련 태그를 추가해 준다.

 

D:\Data\apache-tomcat-9.0.65\conf\web.xml

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

	// web.xml 하단에 아래와 같이 error-page 태그를 추가한다.
	<display-name>Router for tomcat</display-name>
	<error-page>
		<error-code>404</error-code>
		<location>/index.html</location>
	</error-page>

</web-app>

 

-- The End --