Infra

스프링부트 내장 톰캣에 대해

깜이오빠 2025. 1. 28. 22:38

일반적인 웹 애플리케이션을 실행하려면 다음과 같은 순서를 따라야 한다.

1. WAS (웹 애플리케이션 서버)를 별도로 설치한다.
2. 웹 애플리케이션을 WAR (Web Application Archive)파일로 빌드한다.
3. 해당 WAR 파일을 WAS에 배포 후 실행시킨다.

그런데 스프링부트를 통한 웹 애플리케이션을 실행시킬 경우,

이렇게 JAR (Java Archive)파일을 실행하기만 하면 된다.


나는 WAS를 설치조차 한 적 없는데, 여기에는 어떤 원리가 있을까?

스프링 공식 문서를 확인해 보면, 스프링부트는 내장 톰캣 기능으로 인해 WAR 파일을 직접 배포할 필요가 없다는 특징이 있음을 확인할 수 있다.

좀 더 자세히 알아보자.

implementation 'org.springframework.boot:spring-boot-starter-web'

이렇게 build.gradle에서 'org.springframework.boot:spring-boot-starter-web' 의존성을 주입받게 되면,

내장 톰캣 라이브러리가 프로젝트에 포함된다.

다음으로 스프링부트 프로젝트를 실행하는 코드를 살펴보자.

SpringApplication 클래스의 run 메서드 (static 메서드) 실행을 통해 스프링부트 프로젝트를 실행할 수 있다.

이 메서드가 실행되면서 내부적으로 org.springframework.boot/web/embedded/tomcat 패키지 내의 TomcatServletWebServerFactory 클래스의 getWebServer() 메서드가 실행된다.

이를 통해 내장 톰캣 객체가 생성되고 실행되는 것이다.

정리하면
1. 스프링부트 프로젝트를 빌드 시 WAR 파일이 아닌 JAR 파일이 생성된다.
2. JAR 파일을 실행 시 스프링부트 내장 톰캣이 자동으로 생성 및 실행된다.
3. 톰캣은 WAS의 일종이기 때문에, 스프링부트 프로젝트의 경우 별도로 WAS를 설치할 필요가 없는 것이다.

 

 


Reference
https://spring.io/projects/spring-boot

 

Spring Boot

 

spring.io