2025-04-08T19:56:24
This commit is contained in:
94
docs/92_servlet containers.md
Normal file
94
docs/92_servlet containers.md
Normal file
@@ -0,0 +1,94 @@
|
||||
좋아요! 아래는 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 설정하는 방법
|
||||
|
||||
도움 필요하신가요? 😄
|
||||
Reference in New Issue
Block a user