좋아요! 아래는 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 예시: ```groovy // 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 설정하는 방법 도움 필요하신가요? 😄