1. 들어가며
Spring Boot 기반 백엔드 시스템을 구축할 때 대부분 기본적으로 사용하는 WAS는 Tomcat입니다.
하지만 최근에는 Undertow를 선택하는 프로젝트도 점점 늘어나고 있습니다.
두 서버는 단순히 “대체 가능한 WAS”가 아니라 아키텍처 구조와 리소스 사용 방식이 다르기 때문에
성능, CPU 사용량, 메모리 소비, 운영 안정성 측면에서 차이가 있습니다.
이 글에서는 Spring Boot 백엔드 관점에서 Tomcat과 Undertow의 성능과 시스템 자원 사용 특성을 비교해보겠습니다.
2. Tomcat vs Undertow 기본 구조
Tomcat
Tomcat은 Servlet 기반 스레드 모델을 사용하는 전통적인 Java 웹 서버입니다.
구조 특징
- 요청마다 Worker Thread 할당
- Blocking I/O 기반
- 안정성과 레퍼런스가 매우 많음
- 대부분의 Spring MVC 프로젝트 기본 선택
요청 처리 흐름
↓
Acceptor Thread
↓
Worker Thread Pool
↓
Servlet / Controller
특징
- 안정적
- 운영 경험 많음
- 대규모 레퍼런스 존재
- Spring Boot 기본 WAS
Undertow
Undertow는 JBoss/WildFly에서 개발된 고성능 웹 서버입니다.
구조 특징
- Event-driven + non-blocking IO
- Worker thread 최소화
- Netty와 유사한 구조
요청 처리 흐름
↓
IO Thread
↓
Worker Thread (필요 시)
↓
Handler / Servlet
특징
- 이벤트 기반
- 적은 스레드 사용
- 낮은 메모리 사용
- 높은 동시성 처리
3. CPU 사용량 비교
Tomcat
Tomcat은 요청당 스레드 모델입니다.
즉
동시 요청이 많아지면
- CPU context switching 증가
- 스레드 관리 비용 증가
예시
→ worker thread 1000개 가능
→ CPU 스케줄링 비용 증가
CPU 특징
- 안정적
- predictable
- 동시 요청 많을 때 CPU 증가
Undertow
Undertow는 이벤트 기반 IO 모델을 사용합니다.
필요 시 Worker Thread
즉
→ IO thread는 크게 증가하지 않음
CPU 특징
- context switching 감소
- IO 처리 효율 높음
- CPU 사용률 낮은 편
CPU 비교 정리
| 스레드 모델 | 요청당 스레드 | 이벤트 기반 |
| CPU context switching | 많음 | 적음 |
| 동시 요청 처리 | 보통 | 유리 |
| CPU 효율 | 안정적 | 효율적 |
4. 메모리 사용량 비교
메모리는 스레드 수와 직접 관련됩니다.
Tomcat
Tomcat은 Worker Thread Pool 기반입니다.
기본 설정
스레드 하나당
즉
≈ 200MB stack memory
메모리 특징
- 스레드 증가 → 메모리 증가
- 높은 동시 요청 → 메모리 상승
Undertow
Undertow는 적은 IO thread + worker thread 구조입니다.
예시
Worker threads = CPU * 8
8코어 서버
Worker thread = 64
총 스레드
Tomcat 대비
메모리 특징
- 낮은 스레드 수
- 낮은 메모리 사용
- 고동시성에서 유리
메모리 비교
| 스레드 수 | 많음 | 적음 |
| 메모리 사용 | 상대적으로 높음 | 낮음 |
| 대량 트래픽 | 메모리 증가 | 안정적 |
5. 처리 성능 (Throughput)
벤치마크 환경에서 일반적으로 나타나는 경향
| 요청 처리량 | 높음 | 더 높음 |
| latency | 안정적 | 낮은 편 |
| 동시 접속 | 보통 | 유리 |
Undertow는 특히 고동시성 상황에서 장점이 나타납니다.
예
이 상황에서는
- Undertow
- Netty
같은 이벤트 기반 서버가 유리합니다.
6. 운영 안정성 비교
성능만 보면 Undertow가 좋아 보이지만
실제 운영에서는 다른 요소가 중요합니다.
Tomcat 장점
- Spring Boot 기본 WAS
- 레퍼런스 많음
- 운영 문서 많음
- 디버깅 쉬움
- 커뮤니티 매우 큼
즉
Undertow 장점
- 가벼움
- 성능 좋음
- 고동시성 처리 유리
하지만
- 운영 사례는 Tomcat보다 적음
- 레퍼런스 상대적으로 적음
7. 실제 Spring Boot 서버에서 체감 차이
일반적인 백엔드 서비스에서는
Tomcat과 Undertow 차이는 생각보다 크지 않습니다.
왜냐하면 대부분 병목은
Redis
검색엔진
파일 IO
외부 API
에서 발생하기 때문입니다.
즉
8. 어떤 서버를 선택해야 할까
Tomcat 추천 상황
- 일반 웹 서비스
- Spring MVC 기반 API 서버
- 운영 안정성 중요
- 팀 협업 프로젝트
즉
Undertow 추천 상황
- 경량 API 서버
- 동시 요청 많음
- 컨테이너 환경
- 리소스 절약 중요
예
Microservice
고동시성 서비스
9. Spring Boot 설정 예시
Tomcat → Undertow 변경
exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
}
implementation("org.springframework.boot:spring-boot-starter-undertow")
10. 결론
Spring Boot 서버 선택을 정리하면 다음과 같습니다.
| 안정성 | 매우 높음 | 높음 |
| CPU 효율 | 보통 | 좋음 |
| 메모리 사용 | 높음 | 낮음 |
| 동시 요청 | 보통 | 유리 |
| 레퍼런스 | 매우 많음 | 적음 |
따라서
- 일반적인 Spring Boot 서비스 → Tomcat
- 경량 고성능 API 서버 → Undertow
라는 선택이 가장 현실적인 기준입니다.
✔ 핵심 요약
Tomcat은 가장 안정적인 선택이고
Undertow는 더 가볍고 효율적인 대안입니다.
대부분의 백엔드 서비스에서는 Tomcat으로도 충분하지만
리소스 효율과 동시성 처리가 중요한 시스템에서는 Undertow가 좋은 선택이 될 수 있습니다.
'Spring & Backend' 카테고리의 다른 글
| Gradle에 대해 설명해 주세요. (1) | 2026.03.12 |
|---|---|
| Spring Boot에서 DB Deadlock이 발생하는 이유와 해결 방법 (0) | 2026.03.11 |
| 결합도와 응집도에 대해 설명해주세요. (0) | 2026.03.11 |
| JPA Fetch Join과 페이징을 함께 사용할 때 주의점을 설명해 주세요. (0) | 2026.03.11 |
| Spring Cloud vs Kubernetes: 왜 요즘은 Spring Cloud 대신 Kubernetes를 사용할까? (0) | 2026.03.10 |
