Topic (오늘의 주제)
Web Server vs WAS (Web Application Server)
Why (왜 사용하는가? 왜 중요한가?)
- 실무: 서버 부하를 분산하고 보안을 강화하기 위해 역할을 분리합니다. 정적 리소스(이미지, HTML)는 빠르고 가벼운 Web Server가, 복잡한 연산은 WAS가 처리하게 합니다.
- 구조적 의미: 3-Tier Architecture(Client ↔ Web Server ↔ WAS ↔ DB)의 핵심 구성 요소입니다.
- 면접 의도: 단순히 "둘 다 서버 아닌가요?"가 아니라, 정적/동적 컨텐츠 처리의 차이와 Reverse Proxy로서의 Web Server 활용 능력을 검증하려 합니다.
Core Concept (핵심 개념 정리)
| 요소 | Web Server | WAS (Web Application Server) |
| 개념 정의 | 클라이언트(브라우저)로부터 HTTP 요청을 받아 정적 컨텐츠를 제공하는 서버. | Web Server 기능에 더해, 동적 컨텐츠(DB 조회, 비즈니스 로직)를 수행하기 위한 컨테이너를 포함한 서버. |
| 주요 역할 | HTML, CSS, Image, JS 파일 등 이미 만들어져 있는 파일을 그대로 전송. | JSP, Servlet, API 로직 등을 실행하여 결과물을 생성해서 전송. |
| 구성 요소 | HTTP Daemon (프로세스) | Web Server + Web Container (JSP/Servlet Container) |
| 대표 제품 | Nginx, Apache HTTP Server, IIS | Tomcat, Jeus, WebLogic, JBoss |
| 동작 흐름 | 요청 → Web Server → (정적이면 응답 / 동적이면 WAS로 토스) | Web Server로부터 요청 받음 → 로직 수행/DB 연결 → 결과 생성 → Web Server에 반환. |
Interview Answer Version (면접 답변식 요약)
"Web Server는 이미지나 HTML 같은 정적 리소스를 빠르게 처리하는 데 특화되어 있고, WAS는 비즈니스 로직을 수행하거나 DB에 접근하여 동적 데이터를 생성하는 데 특화되어 있습니다.
Spring Boot를 예로 들면, 내장된 Tomcat이 WAS 역할을 수행합니다.
실무에서는 부하 분산과 보안을 위해 **Nginx 같은 Web Server를 앞단(Reverse Proxy)**에 두고, 뒷단에 WAS를 배치하여 역할을 분리하는 구조를 주로 사용합니다."
Practical Tip (실제 사용 예시 및 구성)
1. Spring Boot 개발 시 (Embedded WAS)
- 개발 중인 Spring Boot 프로젝트에는 **Tomcat이 내장(Embedded WAS)**되어 있습니다.
- 따라서 별도의 웹 서버 설치 없이 Run만 해도 localhost:8080으로 웹 서비스가 가능한 것입니다. 이때 Tomcat이 웹 서버 역할과 WAS 역할을 동시에 수행합니다.
2. 실제 배포 환경 (Web Server + WAS 조합)
- 실제 서비스 배포 시에는 **Nginx(Web Server)**를 앞단에 두고, Spring Boot(WAS)와 연결합니다. 이를 Reverse Proxy 구성이라고 합니다.
- 이유 1 (로드 밸런싱): Nginx 하나가 뒤에 있는 여러 개의 Spring Boot 서버로 요청을 나눠줄 수 있습니다.
- 이유 2 (보안): 실제 WAS의 포트(8080)를 외부에 노출하지 않고, Nginx(80/443)만 노출합니다.
- 이유 3 (HTTPS): SSL 인증서 처리를 Nginx가 담당하여 WAS의 부담을 줄입니다.
[Nginx 설정 예시 - nginx.conf]
Nginx
server {
listen 80;
server_name my-service.com;
# 1. 정적 파일은 Nginx가 직접 처리 (빠름)
location /static/ {
root /var/www/html;
}
# 2. 동적 요청은 WAS(Spring Boot)로 넘김 (Proxy)
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 오해하기 쉬운 점
- "WAS는 정적 컨텐츠를 처리 못하나요?" -> 아닙니다. Tomcat 5.5 이후부터는 정적 처리 성능도 매우 좋아졌습니다. 하지만 로드 밸런싱과 무중단 배포 등을 위해 여전히 Web Server를 앞단에 두는 것이 표준 아키텍처입니다.
예상 꼬리질문 정리
- Q: Reverse Proxy가 무엇이고 왜 쓰나요?
- 핵심 키워드: 클라이언트 대신 서버에 요청을 보내주는 대리자. 보안(서버 IP 숨김), 로드 밸런싱, 캐싱, SSL 처리를 위해 사용.
- Q: 서블릿 컨테이너(Servlet Container)란 무엇인가요?
- 핵심 키워드: WAS의 핵심 부품으로, 자바 서블릿(Servlet)의 생명주기를 관리하고 요청을 처리하는 주체. (ex: Tomcat).
- Q: 로드 밸런싱을 할 때 세션(Session)은 어떻게 관리해야 하나요?
- 핵심 키워드: Sticky Session(특정 사용자를 특정 서버에 고정) 또는 Session Clustering(Redis 등을 이용한 세션 공유) 사용.
'Archive > Daily Dev Q&A' 카테고리의 다른 글
| Daily Dev Q&A: 영속성 컨텍스트 (0) | 2026.01.09 |
|---|---|
| Daily Dev Q&A: ORM (Object-Relational Mapping)의 개념과 한계(Trade-off) (0) | 2026.01.07 |
| Daily Dev Q&A: JPA (0) | 2026.01.05 |
| Daily Dev Q&A: RESTful API 설계 원칙과 애매한 상황(Edge Case)의 현실적 해결 전략 (0) | 2025.12.31 |
| Daily Dev Q&A: session 로그인 방식과 token 로그인 방식 (0) | 2025.12.31 |