백엔드 개발을 하다 보면 톰캣(Tomcat), JEUS, WAS, Servlet Container 같은 용어가 자주 등장합니다.
하지만 처음에는 "도대체 뭐가 어디서 뭘 하는 거야?" 싶을 때가 많죠.
이 글에서는 이 개념들을 한 번에 정리하고, 클라이언트가 API를 호출할 때 실제로 어떤 순서로 일이 일어나는지도 쉽게 설명해보겠습니다.
1️⃣ 웹서버(Web Server)란?
웹서버는 말 그대로 HTTP 요청을 받아 정적인 파일(HTML, CSS, JS, 이미지 등)을 돌려주는 서버입니다.
예를 들어 Nginx, Apache HTTP Server 같은 게 대표적인 웹서버죠.
웹서버는 단순히 요청을 받고 → 파일을 찾아서 → 응답을 돌려주는 역할만 합니다.
코드를 실행하거나 DB를 조회하는 일은 하지 않습니다.
2️⃣ WAS (Web Application Server)란?
WAS는 웹서버보다 한 단계 더 복잡한 서버입니다.
웹 요청을 받아 자바 코드(Servlet, JSP, Spring 등)를 실행해 동적인 결과를 만들어내는 역할을 합니다.
쉽게 말하면, 웹서버 + 자바 실행기(서블릿 컨테이너)가 결합된 형태입니다.
요청을 받아서 비즈니스 로직을 수행하고, DB와 통신하고, JSON이나 HTML로 응답을 만들어 보내죠.
➕ WAS의 대표 예시
- Tomcat (가벼운 WAS, 서블릿 전용)
- JEUS, WebLogic, WebSphere (엔터프라이즈급 풀스택 WAS)
3️⃣ 톰캣(Tomcat)은 무엇을 하는가?
톰캣은 서블릿 컨테이너(Servlet Container)입니다.
즉, WAS 기능 중에서도 서블릿 실행 기능만 담당하는 경량형 WAS입니다.
요청이 들어오면 톰캣은 서블릿 클래스를 찾아 실행하고, 그 결과로 HTML, JSON 같은 응답을 만들어 돌려줍니다.
그래서 Spring Boot를 실행하면 자동으로 톰캣이 내장되어 http://localhost:8080 같은 포트를 열어주는 것이죠.
톰캣은 가볍고 빠르지만, 대형 WAS가 가진 EJB, JMS, 트랜잭션 매니저 같은 기능은 없습니다.
즉, JEUS나 WebLogic의 일부 기능만 수행하는 경량 WAS라고 볼 수 있습니다.
4️⃣ JEUS는 무엇을 하는가?
JEUS는 한국의 티맥스(Tmax)에서 개발한 완전한 WAS입니다.
톰캣보다 훨씬 방대하며, 다음과 같은 기능을 모두 포함합니다:
- 서블릿/JSP 실행 (톰캣 역할 포함)
- EJB, JTA, JMS 같은 엔터프라이즈 기능
- 트랜잭션 및 세션 클러스터링
- 보안 및 모니터링, 배포 관리
즉, JEUS는 웹서버 + 서블릿컨테이너 + 기업용 서비스 관리 기능이 합쳐진 완전한 WAS입니다.
5️⃣ 서블릿 컨테이너(Servlet Container)란?
서블릿 컨테이너는 서블릿을 실행하고 생명주기를 관리하는 모듈입니다.
서블릿은 "요청을 받아 응답을 만드는 자바 클래스"를 의미하죠.
컨테이너는 요청이 들어오면 해당 서블릿 인스턴스를 찾아 실행하고, 응답이 끝나면 정리하는 식으로 동작합니다.
톰캣이 바로 이 서블릿 컨테이너 역할을 수행합니다 ☕️
6️⃣ 클라이언트가 API를 호출하면 일어나는 일 🔍
이제 실제 동작 순서를 쉽게 볼까요?
1단계 – 클라이언트 요청
브라우저나 앱이 https://myserver.com/api/login 같은 API를 호출합니다.
2단계 – 웹서버(게이트웨이) 수신
외부 요청은 가장 먼저 Nginx, Apache, 또는 JEUS의 게이트웨이 톰캣이 받습니다.
정적 파일이면 즉시 응답하고, 동적 요청이면 WAS로 전달합니다.
3단계 – WAS 전달
게이트웨이(WEB 서버)는 요청을 내부망의 WAS로 포워딩합니다.
이때 요청 헤더나 보안 검증(IP, 토큰 등)을 수행할 수도 있습니다.
4단계 – 서블릿 컨테이너 실행
톰캣(또는 JEUS 내부의 톰캣 모듈)이 요청 URL을 분석하고, 해당하는 서블릿(Spring DispatcherServlet 등)을 실행합니다.
5단계 – 비즈니스 로직 처리
서블릿 → Controller → Service → Repository → DB 순으로 코드가 실행되고, 결과를 JSON 또는 HTML로 만듭니다.
6단계 – 응답 반환
톰캣이 이 응답을 HTTP Response 형태로 클라이언트에 돌려줍니다.
즉, 클라이언트의 요청은 웹서버 → WAS → 서블릿컨테이너 → 코드 → 응답 순서로 흘러가게 됩니다.
7️⃣ 한눈에 보는 구조도
[클라이언트]
↓
[웹서버 or 게이트웨이]
↓
[WAS (JEUS, Tomcat)]
└── [Servlet Container]
└── DispatcherServlet → Controller → Service → Repository → DB
요약하자면 👇
- 웹서버 → 요청을 받고, 정적 파일 처리
- WAS → 자바 코드 실행, DB 연동
- 서블릿컨테이너 → WAS 내부에서 서블릿 실행 담당
- 톰캣 → 서블릿컨테이너 역할의 경량 WAS
- JEUS → 웹서버+WAS 통합형, 엔터프라이즈급 서버
마무리 ✨
톰캣과 JEUS는 결국 같은 계열의 기술이지만, 목적과 범위가 다릅니다.
톰캣은 가볍고 단순한 서블릿 실행용 서버, JEUS는 기업 환경에 맞춘 종합 WAS입니다.
오늘 설명한 흐름(클라이언트 → 웹서버 → WAS → 서블릿 → 응답)을 머릿속에 그려두면, 웹 애플리케이션 구조가 한눈에 들어올 거예요
'개발' 카테고리의 다른 글
| Spring Boot(Kotlin) 서버 기본 셋팅 — 1편. 왜 멀티 모듈 구조인가? (0) | 2025.11.21 |
|---|---|
| DB 커넥션 풀과 Redis — 확장 가능한 서버 구조를 위한 핵심 정리 (0) | 2025.11.19 |
| 💡화이트리스트 기반 파일 업로드 구현 (0) | 2025.10.31 |
| 왜 브라우저는 HTTPS가 되는데 Java 서버는 실패할까? (0) | 2025.09.16 |
| React + Capacitor로 안드로이드 앱 실행하기 (Android Studio) (1) | 2025.07.30 |