자바

[ Tomcat ] Spring Boot 디렉토리 배포 방법

hola. 2026. 3. 27. 13:20

[ 문제 상황 ]

 Spring Boot는 내장 Tomcat이 있기에 따로 Tomcat을 설치할 필요가 없다는 장점이 있습니다. 그래서 서버에 배포시 jar 파일만 배포 후 실행하면 됩니다. 하지만 이런 점이 때로는 불편함을 만들 수 있다고 생각합니다. 왜냐하면 아주 작은 변경 했을 뿐인데, jar로 만들어서 배포해야 하기 때문입니다. 서버의 파일 전송 속도가 느린 환경에서 2kb 밖에 안되는 변경 class를 적용시키기 위해 mb단위의 jar를 만들어서 배포해야 하는 경우도 있기 때문입니다.   

 위와 같은 문제를 해결하기 위해 Tomcat 디렉토리로 Spring 애플리케이션을 배포하여 변경한 클래스 파일만 붙여 넣는 방법이 있습니다.

 


 

[ 디렉토리 배포 방법 ]

1. 먼저 tomcat을 다운 받습니다.

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

 

2.  conf/server.xml 열어  <Host 를 검색해 확인합니다. 

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 이렇게 되어 있을텐데, 각 속성은 아래와 같은 목적을 가집니다.

name localhost 호스트 이름(도메인)
appBase webapps 애플리케이션 배포 폴더
unpackWARs true WAR 파일을 풀어서 배포
autoDeploy true 실행 중 새 앱을 자동 배포/삭제

 

 

3. webapps로 들어가 기존에 있던 모든 폴더를 삭제 후 ROOT 폴더를 새로 만듭니다. URL이 /로 시작하려면 반드시 ROOT에 있어야 합니다. URL을 최초 시작을 /로 하기 위해서는 ROOT에 배포되어야 합니다.

 

4. 배포 파일을 만들 차례입니다. IDE는 이클립스이며, 빌드 자동화 도구는 Maven으로 설명하겠습니다.

- Spring Boot 기본은 jar이므로, 먼저 WAR로 바꿔야 합니다. <packaging>war</packaging>

- WAR로 배포하려면 Tomcat 같은 외부 서버에서 실행 가능해야 하므로, SpringBootServletInitializer 상속하도록 메인 애플리케이션 클래스를 이렇게 수정합니다.

 예시 )

@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);
    }
}

 

- 외부 Tomcat에 배포할 경우, 내장 Tomcat은 필요 없으므로 provided로 변경합니다. 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

 

- 배포할 파일을 만들기 위해 Maven 빌드 설정을 들어갑니다.

프로젝트 우클릭 -> Run As -> Run Configuration 클릭 -> 왼쪽에 maven build 우클릭 후 New Configuration 클릭 -> work space에서 프로젝트 경로 추가 -> Goals 에 clean package를 작성 후 하단에 Run을 클릭합니다.

 

 

 

 

 

해당 프로젝트에 target을 누르면 프로젝트이름 + snapshot 폴더가 있습니다. WEB-INF 전체를 복사해줍니다.

복사한 WEB-INF를 Tomcat 의 webapps/ROOT 폴더에 복사합니다.

 

cmd를 켠 후 Tomcat 의 bin 폴더 경로로 이동 후 startup.bat을 실행합니다.

 

추후 클래스 변경이 있을 경우 WEB-INF/classes 로 들어가 해당 클래스만 변경 후 Tomcat을 재시작 하시면 됩니다.

 

[ 느낀 점 ]

 개발 일을 하면서 느낀 점은, 모든 선택에는 반드시 trade-off가 존재한다는 것입니다.

 

 예를 들어, JAR로 배포하면 외부 Tomcat 설정 없이 간단하게 배포할 수 있다는 장점이 있습니다. 하지만 작은 변경 사항이 생겨도 전체 JAR를 다시 배포해야 한다는 단점이 있습니다.

 

 반면, 디렉토리(WAR) 배포는 일부 클래스나 리소스만 교체하면 되므로 작은 변경 사항을 빠르게 반영할 수 있다는 장점이 있습니다. 그러나 외부 Tomcat을 설정해야 하는 번거로움이 있습니다.

 

 결국, 어느 한 가지 방법만 고집하기보다는 환경과 상황에 맞춰 다양한 방법을 유연하게 고려하는 것이 중요하다는 점을 느꼈습니다.