Files
spring-boot-examples/docs/92_servlet containers.md
2025-04-08 19:56:24 +09:00

94 lines
3.6 KiB
Markdown

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