[Spring-Framework] 23(번외). STS 4.4 - Spring Boot Starter - 배포(Jar, War방식)
이전의 글을 참고하여 진행하면 될 것 같다.
Spring Boot Starter의 배포 방식에는 크게 "Jar", "War"로 구성된다.
Spring Boot Starter의 Jar파일 배포는 maven Build를 통해서 이뤄진다.
내장 톰캣 웹서버까지 함께 배포해버리는 단점이 있다.
차이점이 Spring Legacy Project로 생성한 Spring Framework는 일반적인 배포에서는 간단하게 War 배포를 할 수 있다.
- IDE: Spring Tool-Suite 4-4.7.2 Releases (2020-06-29 기준 최신 버전) // 대략
1. Spring Boot Starter - 배포 방법 JAR
Jar 방식으로 배포하는 방법에 대해서 소개하겠다.
그림 1. Run에서 Maven Build하기
(작업하고 있는) Spring Boot 프로젝트를 선택한다.
Run 메뉴를 클릭한다.
Run As에서 5 Maven Build...를 클릭한다. (은근히 햇갈리게 되어 있음.)
그림 2. Run에서 Maven Build하기
Goals에 package
Profiles은 비워둔다.
Run 버튼을 누른다.
그림 3. 빌드 기다리는 모습(1)
시간이 걸린다. 다운로드 과정 등이 있다. 알아서 배포 작업이 잘 되고 있는지 태스트 작업도 하고 그렇다.
그림 4. 빌드 기다리는 모습(2)
그림 5. 빌드 완료된 모습(1)
BUILD SUCCESS라고 뜨면 잘 된 것이다. 빨강색 뜨면 안 좋은 것이다. (오류도 잡아야 하고 그렇다. ㅠㅠ)
그림 6. 빌드 완료된 모습(2)
console 대화창 내용을 클릭한다.
Ctrl + F를 누른다.
jar를 검색한다.
무슨 파일명으로 배포되었는지 알기 위해서이다.
그림 7. 빌드 완료된 모습(3)
프로젝트 창을 F5키로 새로고침한다.
target 폴더를 클릭해보면, 배포된 파일을 살펴볼 수 있다.
그림 8. 빌드 완료된 모습(4)
쉬워보여도 쉬운 과정이 아니다. 또 실제 서버에 빌드해서 태스트를 해야 한다.
또 안 되면, 다시 Eclipse 작업창에서 삽질을 해야 한다.
2. Spring Boot Starter - 배포 방법 War
war 배포 방법은 다소 어렵다. 코드 몇 줄이긴 하지만, 작성해줘야 한다.
코드 부분도 소개하도록 하겠다.
2-1. war 배포 - pom.xml
pom.xml 수정에 대한 사항이다.
그림 9. pom.xml 파일 수정(1) - 변경해야 할 내용
그림 10. pom.xml 파일 수정(2) - 변경해야 할 내용
그림 11. pom.xml 파일 수정(2) - 변경해야 할 내용
아래의 내용을 열어보면, 확인할 수 있다. (굵기 표시로 변경 작업을 한 내역을 표시하였음.)
<?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.4.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.springmvc.home</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBootMVCDemo</name>
<description>Demo project for Spring Boot</description>
<!-- War 배포용 -->
<packaging>war</packaging>
<properties>
<java.version>15</java.version>
<!-- 배포용 -->
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<!-- jsp 설정 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- war 배포용 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
-->
<!-- 배포 버전으로 변경 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
[파일명: pom.xml]
[첨부(Attachments)]
pom.zip
2-2. War 배포 - SpringBootMvcDemoApplication.java
사소해보이지만, 코드 변경이 중요하다.
이거 안 해주면, pom.xml 설정 잘 되어 있어도 오류가 뜬다.
그림 12. pom.xml 파일 수정(2) - 변경해야 할 내용
package com.springmvc.home;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class SpringBootMvcDemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
//SpringApplication.run(SpringBootMvcDemoApplication.class, args);
SpringApplication app = new SpringApplication(SpringBootMvcDemoApplication.class);
app.run(args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootMvcDemoApplication.class);
}
}
파일명: SpringBootMvcDemoApplication.java
[첨부(Attachments)]
SpringBootMvcDemoApplication.zip
2-3. Run As로 Maven Build하기 - War 배포
지금부터 작업은 배포를 하는 것이다.
그림 13. Run의 Maven build 메뉴 모습
Run 메뉴를 클릭한다.
Run As의 Maven build를 클릭한다.
그림 14. Select Configuration
SpringBootMVCDemo (1) : package를 선택하고 OK를 누른다.
그림 15. 빌드가 완료된 모습
빌드하는 데 시간이 다소 소요된다.
기다리면 된다.
BUILD SUCCESS라고 녹색 대화 글이 나오면 잘 된 것이다.
2-4. 톰캣 서버에 올리기 - war 배포
웹 서버에 실제로 배포하는 방법에 대해서 소개하겠다.
그림 16. 빌드가 완료된 파일 (1)
demo-0.0.1-SNAPSHOT.war 파일을 선택한다.
복사한다. (Ctrl + C)
그림 17. 톰캣 서버의 webapps 폴더에 넣어주기 (2)
톰캣 서버 설치 경로의 webapps에 들어간다.
붙여넣기를 한다. (Ctrl + V)
그림 18. 톰캣 서버의 bin - startup 실행해주기
bin폴더에서 startup.bat을 더블 클릭한다.
서버를 실행해준다.
그림 19. 서버가 실행되고 나면, 압축해제가 된 모습
정상적으로 폴더가 생성되었다면, 배포가 잘 된 것이다.
그림 20. 서버 실행 모습
Tomcat 서버에 보면, 익숙한 모습으로 Spring Security 생성 암호가 있다.
Using generated security password:의 내용을 복사한다.
Username: User
Password: 복사한 내용의 비밀번호(암호화된 랜덤 형태의 암호이다)
그림 21. 로그인 후 배포된 모습
정상적으로 화면이 보인다면, 배포가 성공적으로 이뤄진 것이다.
3. 결론(Conclusion)
서버 배포 작업도 개발자라면 경험해봐야 할 중요한 부분이라고 생각된다.
다소 스프링 부트는 배포 부분에 있어서는 쉽지만 않다.
서버 배포에 대해서 살펴보았고, Jar파일로 배포하는 방법에 대해서도 소개하였다.
* 참고자료(References)
1. [스프링 부트] war 파일과 외부 톰캣을 이용한 서버 배포, https://steady-hello.tistory.com/53, Accessed by 2020-09-30, Last Modified 2019-10-30.