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

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 설정하는 방법

도움 필요하신가요? 😄