일반적인 웹 애플리케이션을 실행하려면 다음과 같은 순서를 따라야 한다.
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
'Infra' 카테고리의 다른 글
Rocky Linux 환경에 3-Tier Architecture(웹 서버 ↔ WAS ↔ DB) 구축하기 (0) | 2025.01.29 |
---|---|
WAS(웹 애플리케이션 서버)에 대해 (1) | 2025.01.28 |