Web Server vs WAS( Web Application Server)
Web Server | “정적(Static) 콘텐츠 배달자” | HTML, CSS, JS, 이미지, 동영상 등 요청‑받아 그대로 전송 |
WAS | “동적(Dynamic) 로직 실행자” | 서블릿·Spring MVC·EJB·JSP 같은 코드 실행 → DB/외부시스템과 대화 → 결과 생성 |
두 시스템 모두 HTTP 를 사용하지만, 웹 서버는 “파일 전송”에 특화, WAS는 “비즈니스 로직 수행”에 특화돼 있습니다.
1️⃣ 동작 흐름 이해하기
브라우저 ──► [1] Web Server (Apache HTTP / Nginx)
│ ├─ 정적 파일이면 바로 응답
│ └─ 동적 URL이면 WAS 로 프록시
▼
[2] WAS (Tomcat / WebLogic / WildFly)
├─ 서블릿·Spring 실행
└─ DB·외부 API 호출 후 결과 HTML·JSON 생성
▲
브라우저 ◄── 최종 응답
- 요청이 정적이면 ① 단계에서 바로 끝.
- 동적이면 ①이 요청을 ②로 넘기고, ②가 서블릿(SPRING) 로직을 수행해 응답을 돌려줍니다.
2️⃣ 왜 둘을 분리할까?
성능 최적화 | 정적 파일(캐시·Gzip·HTTP/2)을 웹 서버가 초고속 처리 → WAS CPU/메모리 부담 감소 |
보안·DMZ | 외부망엔 웹 서버만, 내부망에 WAS 배치 → 애플리케이션 코드 숨김 |
스케일링 유연성 | Web → N:1 로드밸런싱, WAS → M대 수평 확장, 필요 시 각각 독립 증설 |
다양한 언어 혼합 | 하나의 웹 서버가 Java WAS(Tomcat)와 Python WAS(Gunicorn) 모두에게 리버스 프록시 가능 |
3️⃣ 제품별 특징 요약
Web Server | Apache HTTP(모듈 풍부) · Nginx(이벤트 기반, 고성능) · Microsoft IIS | 정적 파일·SSL 종료·리버스 프록시·로드 밸런서 |
경량 WAS | Tomcat(Servlet/JSP) · Jetty · Undertow | 서블릿 컨테이너 중심, Jakarta EE 웹 프로파일 |
풀스택 WAS | WebLogic · WildFly/JBoss · WebSphere | EJB, JMS, JTA, CDI 등 Jakarta EE 전체 스펙 내장, 관리 콘솔·클러스터 기능 |
모든 WAS 는 Servlet API(이제 jakarta.servlet.*)를 구현하므로, 같은 WAR/서블릿이 서로 다른 WAS 에서 동일하게 동작합니다. 단, Spec 버전(javax.* vs jakarta.*)은 맞춰야 해요. docs.oracle.comopenlogic.com
4️⃣ “웹 서버 + WAS” 가 합쳐진 현대적 형태
- Spring Boot: 내장 Tomcat/Jetty 를 포함한 java -jar 한 프로세스 ⇒ 실제로는 웹 서버 + WAS 가 한 JVM 에 같이 존재.
- Nginx Unit, Node.js, Go Fiber 등: 애플리케이션 서버가 HTTP 처리까지 직접 수행.
→ “웹과 WAS 구분”은 아키텍처적인 개념이고, 구현체는 필요에 따라 합치거나 분리합니다.
5️⃣ 기억하면 좋은 포인트 3가지
- 웹 서버가 없이도 Tomcat 단독으로 서비스 가능하지만,
대규모·보안·멀티스택 환경에서는 보통 둘을 분리합니다. - 동적 로직이 필요한 순간부터는 WAS 가 필수—Java 에선 서블릿·Spring MVC·JSP 가 그 진입점입니다.
- 제품을 선택할 땐 필요 스펙(Jakarta EE 전체? / 서블릿만?) 과 운용 비용을 먼저 고려하세요.
🔑 정리 한 줄
Web Server = 정적 파일 전담, WAS = 동적 비즈니스 로직 전담.
구조는 분리·통합 모두 가능하지만, “역할” 자체는 언제나 이 두 층으로 나뉜다!
'Self Study > Others' 카테고리의 다른 글
Spring 과 Servlet (1) | 2025.07.05 |
---|---|
Tomcat, 서블릿 컨테이너, 그리고 서블릿 (0) | 2025.07.03 |
[Server] 서버 기본 LinuxOS 에서 timezone 설정하기 (0) | 2024.08.19 |