Spring Boot 프로젝트에서 배포 가능한 파일을 만드는 방법은 크게 JAR(Java ARchive)와 WAR(Web Application Archive) 두 가지가 있습니다. 이 가이드에서는 각 방식의 특징, 생성 방법, 그리고 언제 어떤 방식을 선택해야 하는지 자세히 알아보겠습니다.
먼저 JAR와 WAR 파일의 주요 차이점을 이해하는 것이 중요합니다:
JAR (Java ARchive)
WAR (Web Application Archive)
JAR 파일을 생성하는 과정은 다음과 같습니다:
pom.xml 설정
프로젝트의 pom.xml
파일에 다음 설정을 추가합니다:
<packaging>jar</packaging>
메인 클래스 설정
Spring Boot 애플리케이션의 메인 클래스가 SpringBootServletInitializer
를 상속하지 않도록 합니다. 일반적인 Spring Boot 애플리케이션의 메인 클래스는 다음과 같습니다:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Maven 빌드 실행
터미널에서 다음 명령을 실행하여 JAR 파일을 생성합니다:
mvn clean package
JAR 파일 실행
생성된 JAR 파일은 target
디렉토리에 위치합니다. 다음 명령으로 실행할 수 있습니다:
java -jar target/myapplication-0.0.1-SNAPSHOT.jar
WAR 파일을 생성하는 과정은 다음과 같습니다:
pom.xml 설정
프로젝트의 pom.xml
파일에 다음 설정을 추가합니다:
<packaging>war</packaging>
내장 톰캣 의존성 설정 변경
내장 톰캣을 제외하고 외부 WAS를 사용하기 위해 다음과 같이 의존성을 변경합니다:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
메인 클래스 수정
메인 클래스가 SpringBootServletInitializer
를 상속하도록 수정합니다:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
Maven 빌드 실행
터미널에서 다음 명령을 실행하여 WAR 파일을 생성합니다:
mvn clean package
WAR 파일 배포
생성된 WAR 파일은 target
디렉토리에 위치합니다. 이 파일을 Tomcat과 같은 외부 WAS의 webapps
디렉토리에 복사하여 배포할 수 있습니다.
프로젝트의 특성과 배포 환경에 따라 JAR 또는 WAR 중 적절한 방식을 선택해야 합니다:
JAR를 선택하는 경우
WAR를 선택하는 경우
Spring Boot는 JAR와 WAR 두 가지 방식의 패키징을 모두 지원합니다. 프로젝트의 요구사항과 운영 환경을 고려하여 적절한 방식을 선택하면 됩니다. JAR 파일은 간편한 배포와 실행이 장점이며, WAR 파일은 기존 서버 인프라와의 호환성이 뛰어납니다.