SpringBoot/배포 및 운영
Spring Boot 패키징(JAR, WAR)
by DEVLIB
2025. 4. 15.
Spring Boot 패키징 방식 비교
| 항목 |
JAR |
WAR |
| 실행 방식 |
java -jar |
WAS(Tomcat 등)에 배포 |
| 내장 서버 |
포함 (톰캣, 제티 등) |
외부 WAS 필요 |
| 설정 복잡도 |
단순 |
복잡 |
| 배포 대상 |
클라우드, 도커, 독립 서버 |
전통적인 WAS 서버 |
| 스프링 부트 기본값 |
JAR |
선택적 지원 |
1. JAR 패키징 방식 (기본)
설정 (build.gradle)
plugins {
id 'org.springframework.boot' version '3.2.0'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
bootJar {
archiveFileName = 'myapp.jar'
}
실행
./gradlew bootJar
java -jar build/libs/myapp.jar
스프링 부트의 기본 내장 톰캣이 실행되며 JAR 단독으로 애플리케이션 실행 가능
2. WAR 패키징 방식 (전통 WAS 배포용)
사용 목적
- WebLogic, WebSphere, 외부 Tomcat 같은 전통적인 WAS 환경에 배포할 때 사용
설정 변경
build.gradle
plugins {
id 'war'
}
bootJar {
enabled = false
}
bootWar {
enabled = true
archiveFileName = 'myapp.war'
}
src/main/webapp/ 폴더 생성 (옵션)
- WAR 프로젝트는 전통적으로 web.xml, JSP, 정적 리소스를 이곳에 배치
Application 클래스 수정
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
실행
- ./gradlew bootWar
- build/libs/myapp.war 생성됨
- Tomcat 서버의 /webapps/ 폴더에 복사
- 서버 재시작
어떤 방식을 선택할까?
| 상황 |
추천 방식 |
| 단독 실행 서버, 클라우드, Docker 사용 |
JAR (Spring Boot 기본값) |
| 전통적인 WAS(Tomcat 등) 환경 |
WAR |
| 개발 초기에 빠른 배포 테스트 |
JAR |
| 조직 정책에 따라 WAR 강제 |
WAR 구성 필요 |
마무리 요약
| 항목 |
JAR |
WAR |
| 사용 용도 |
독립 실행 (Spring Boot 내장 서버 사용) |
WAS에 배포 필요 |
| 설정 |
매우 단순 |
초기 설정 필요 |
| 커스터마이징 |
Spring Boot 친화적 |
전통 웹 구조 호환 가능 |
| 실무 추세 |
✅ JAR 중심 |
레거시 환경만 WAR 유지 중 |