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 --
'Backend Development > Spring boot' 카테고리의 다른 글
[Spring Boot] Spring boot embedded tomcat https 적용 (1) | 2022.10.05 |
---|---|
[Spring Boot] Quartz 배치 (scheduler) clustering (0) | 2022.09.15 |
[Spring boot] Exception에 따라 조건부로 Transaction Rollback 하기 (0) | 2022.08.28 |
[Spring boot] Spring boot test시 Static class mock 만들기 (0) | 2022.07.17 |
[Spring boot] Spring Boot Test Sql script 활용하기 (0) | 2022.07.08 |