기존 Tomcat은 설치와 WAR 배포가 필요하지만, 스프링 부트는 내장 톰캣을 포함하여 JAR 파일 실행만으로 동작하며 설정이 간단합니다.
스프링 부트가 톰캣 서버를 내장하여 실행하는 과정을 자세히 알아보겠습니다.
Maven의 pom.xml 파일에서 spring-boot-starter-web 의존성을 추가하면, Spring Boot는 내장 톰캣 서버를 자동으로 포함합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
이 의존성은 기본적으로 Apache Tomcat을 내장 서버로 포함하며, 이를 통해 웹 애플리케이션을 실행할 수 있습니다.
스프링 부트 애플리케이션은 @SpringBootApplication 애노테이션이 있는 메인 클래스를 통해 시작됩니다.
이 애노테이션은 @Configuration, @EnableAutoConfiguration, @ComponentScan을 포함하여 필요한 설정을 자동으로 구성합니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

SpringApplication.run() 메서드는 애플리케이션 실행의 진입점으로 다음 작업을 수행합니다.
① Spring Context 초기화
: 스프링 애플리케이션 컨텍스트(ApplicationContext)를 생성하고, 필요한 빈(bean)을 초기화합니다.
② 내장 톰캣 서버 초기화
: spring-boot-starter-web 의존성에 포함된 톰캣 서버가 TomcatServletWebServerFactory를 통해 생성됩니다. 이 과정에서 톰캣 서버가 초기화되고, 포트(기본값: 8080)가 설정됩니다.
③ Servlet Context와 Spring Context 연결
: 스프링의 디스패처 서블릿(DispatcherServlet)이 톰캣의 서블릿 컨텍스트에 등록됩니다. 이를 통해 HTTP 요청이 스프링 MVC로 전달됩니다.
④ 톰캣 서버 시작
: 톰캣 서버가 시작되고, 애플리케이션은 지정된 포트에서 HTTP 요청을 받을 준비를 합니다.
내장 톰캣은 외부 설정 파일 없이 실행되며, 기본 설정은 application.properties 또는 application.yml에서 정의할 수 있습니다.
server.port=8081
server.servlet.context-path=/myapp

스프링 부트 애플리케이션은 기본적으로 JAR 파일로 패키징됩니다.
Maven을 사용하여 패키징하려면 spring-boot-maven-plugin을 추가합니다.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
mvn package로 JAR 파일을 생성한 뒤, java -jar로 실행하면 JAR에 포함된 내장 톰캣이 동작합니다.

정상적으로 스프링 부트 애플리케이션이 동작하는 것을 확인할 수 있습니다.
| 항목 | 기존 Tomcat 설치 | Spring Boot 내장 톰캣 |
|---|---|---|
| 톰캣 설치 | 별도로 설치 및 설정 필요 | 내장 톰캣 자동 포함 (spring-boot-starter-web) |
| 배포 방식 | WAR 파일을 빌드 후 톰캣 서버에 배포 | JAR 파일로 빌드 후 자체 실행 (java -jar) |
| 설정 관리 | server.xml, web.xml 등 외부 설정 파일 사용 | application.properties 또는 application.yml |
| 운영 환경 요구 | 서버에 톰캣 설치 및 환경 구성 필요 | 별도 설치 없이 JAR 파일 실행으로 동작 |
| 유연성 | 특정 톰캣 버전에 종속 | 톰캣 버전 관리 및 교체가 간단 |
| 장점 | 기존 톰캣 환경과 통합 용이 | 독립 실행 가능, 빠른 설정 및 배포 |
| 단점 | 설정 복잡, 톰캣 설치 및 관리 부담 | 내장 톰캣 크기 증가로 JAR 파일이 무거울 수 있음 |