3.6 KiB
3.6 KiB
좋아요! 아래는 Java 기반 웹 서버/서블릿 컨테이너인 Tomcat, Jetty, Undertow에 대한 비교 설명입니다. 이 세 가지는 Spring Boot나 기타 웹 프레임워크에서 선택 가능한 내장 웹 서버로도 많이 사용되므로, 실무에서도 선택 기준이 되는 중요한 요소들이 많습니다.
✅ Tomcat, Jetty, Undertow 비교
| 항목 | Tomcat | Jetty | Undertow |
|---|---|---|---|
| 제공자 | Apache Software Foundation | Eclipse Foundation | Red Hat (JBoss) |
| Servlet 지원 | Servlet 컨테이너 (표준) | Servlet 컨테이너 | Servlet 컨테이너 + Non-blocking 서버 |
| 기본 포지션 | 안정성과 호환성 중심 | 가볍고 유연함 | 고성능, Non-blocking |
| Spring Boot 기본 | ✅ 기본 내장 서버 | ❌ | ❌ |
| 성능 | 안정적, 무난함 | 빠르고 경량 | 매우 빠름 (Non-blocking I/O) |
| 비동기 처리 | 일부 지원 (Servlet 3.1 기준) | 잘 지원 | 완전한 Non-blocking 지원 |
| HTTP/2 지원 | 설정 필요 | 설정 필요 | 기본적으로 잘 지원 |
| 설정 난이도 | 쉬움 | 쉬움 | 비교적 복잡함 |
| 커뮤니티 / 문서 | 가장 풍부함 | 풍부함 | 상대적으로 적음 |
| 가용성 | 전통적인 선택 | 경량/모듈식 프로젝트에서 인기 | 고성능 시스템에서 선호 |
🔵 Apache Tomcat
- Java 웹 서버의 대표 주자
- 오랜 시간 동안 많은 프로젝트에 사용됨
- 안정성, 문서화, 호환성이 매우 뛰어남
- Spring Boot의 기본 내장 톰캣도 이 녀석
- 많은 기업 환경에서 표준 선택지로 여겨짐
💡 추천 상황: 대규모 시스템, 전통적인 기업 시스템, Spring Boot 기본 설정 그대로 사용하는 경우
🟢 Jetty
- 가볍고 유연한 구조의 웹 서버
- Eclipse 프로젝트로, 모듈화된 구조
- 빠른 시작 속도와 작은 메모리 풋프린트가 강점
- 오버헤드 적고 가볍게 돌릴 수 있는 서버가 필요할 때 유리
💡 추천 상황: 임베디드 시스템, 마이크로서비스, 빠른 개발 환경
🔴 Undertow
- Red Hat(JBoss)에서 개발
- Non-blocking I/O 구조 기반의 고성능 서버
- Servlet 컨테이너로도 동작하고, 프레임워크 없이도 HTTP 처리 가능
- 최소한의 스레드로 최대 성능을 뽑아내는 것이 특징
- HTTP/2, WebSocket 등 최신 기능 잘 지원
💡 추천 상황: 고성능 API 서버, 대규모 트래픽 처리 시스템, 실시간 통신(WebSocket 등)
🧩 Spring Boot에서 선택하는 방법
Spring Boot에서는 기본 내장 톰캣이 설정되어 있지만, 다음과 같이 원하는 서버로 쉽게 교체할 수 있습니다:
Gradle 예시:
// Tomcat 제거
implementation('org.springframework.boot:spring-boot-starter-web') {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
// Jetty 사용
implementation 'org.springframework.boot:spring-boot-starter-jetty'
// 또는 Undertow 사용
// implementation 'org.springframework.boot:spring-boot-starter-undertow'
🚦 정리하면
| 상황 | 추천 서버 |
|---|---|
| 안정성과 호환성이 중요 | Tomcat |
| 가볍고 빠른 스타트업이 필요 | Jetty |
| 고성능 / 비동기 / 실시간 처리 필요 | Undertow |
필요하시면 다음도 도와드릴 수 있어요:
- Spring Boot에서 Undertow로 바꾸는 실습 예제
- 성능 벤치마크 예시
- 서버별로 WebSocket 설정하는 방법
도움 필요하신가요? 😄