
웹 서버(Web Server)와 WAS(Web Application Server)는 어떻게 다른걸까?
웹 서버는 클라이언트(웹 브라우저)로부터 HTTP 요청을 받아 요청에 맞는 응답 결과를 전송하는 역할을 한다.

클라이언트 URL을 입력하여 요청을 보내고, 이 URL이 웹 서버의 주소 식별자이다.
클라이언트와 웹 서버의 통신 방식
1. 클라이언트는 URL을 사용하여 서버의 IP 주소를 찾음.
2. 클라이언트는 원하는 정보를 위한 HTTP 요청을 보냄.
3. 웹 서버는 데이터베이스와 통신하여 관련 데이터를 찾음.
4. 웹 서버는 HTML 페이지, 이미지, 파일 등과 같은 정적 리소스를 HTTP 형태로 응답을 생성하여 클라이언트에게 반환함.
5. 응답 결과를 받은 클라이언트가 사용자에게 정보를 표시함.
✅ 이때 정적 리소스(정적 콘텐츠)란,
변경되지 않는 파일로, 사용자가 요청할 때마다 서버는 동일한 데이터를 반환한다.
예시로는 HTML 파일, CSS 스타일, JavaScript 파일, 이미지, 동영상 등이 있다.
일반적인 서비스에서 정적인 콘텐츠만 제공해주는 경우는 잘 없다.
새로운 데이터가 필요한 경우가 있다.
만약, 사용자로부터 동적인 요청이 들어오면, 웹 서버에서 자체적으로 동적인 콘텐츠를 생성할 수 없기에 WAS에 요청한다.
WAS는 일반적으로 애플리케이션 서버라고도 부른다.
애플리케이션 서버는 웹 서버가 할 수 없는 동적 콘텐츠 생성, 애플리케이션 로직 및 다양한 리소스와의 통합을 지원하여 웹 서버의 기능을 확장한다.
✅ 동적 콘텐츠란,
사용자의 요청에 따라 그때그때 서버에서 생성되어 제공되는 콘텐츠를 말한다.
예시로 사용자별 맞춤 페이지나 인터넷 뉴스 최신 피드, 게시판 글 목록 등 늘 동일하지는 않은 데이터이다.
클라이언트에서 동일한 URL로 요청해도 사용자마자 다른 결과를 얻을 수 있다.

애플리케이션 서버는 클라이언트와 직접 소통하지 않는다.
늘 다음과 같은 방식으로 통신한다.
"애플리케이션 서버가 동적으로 생성 → 웹 서버가 클라이언트에게 전달"
그렇다면 애플리케이션 서버와 클라이언트 사이에 낀 웹 서버가 동적 콘텐츠를 전달하는 모양이니까
웹 서버가 동적 콘텐츠를 제공한다고 볼 수 있는 거 아닌가?라는 의문이 들 수도 있다.
애플리케이션이 동적으로 데이터를 생성하여도 "완성된 상태"로 클라이언트에 제공하면 더 이상 변하지 않는 고정된 상태가 된다.
즉 최종적으로 클라이언트가 받는 것은 정적 콘텐츠이고, 웹 서버는 정적인 형태로 리소스를 제공한다.
| 구분 | 웹 서버 (Web Server) | 애플리케이션 서버 (WAS) |
|---|---|---|
| 역할 | 정적 콘텐츠 제공 (HTML, CSS, JS, 이미지 등) | 동적 콘텐츠 처리 (비즈니스 로직, DB 연동) |
| 작동 방식 | HTTP 요청을 받아 정적 파일을 반환 | 비즈니스 로직 실행 후 HTML, JSON 등의 동적 데이터 생성 |
| 요청 처리 방식 | 클라이언트 요청을 받아 정적 파일 제공 또는 필요에 따라 WAS로 전달 | 웹 서버에서 전달받은 요청을 처리하고 응답 생성 |
| 클라이언트와의 관계 | 클라이언트와 직접 통신 | 보통 웹 서버를 통해서만 클라이언트와 통신 |
| 데이터 연동 | 없음 (파일만 제공) | 데이터베이스와 연동하여 동적 콘텐츠 생성 |
| 예시 | Apache, Nginx, IIS | Tomcat, JBoss, WebLogic, Flask, Express.js |

Apache Tomcat
톰캣은 Java 기반 웹 애플리케이션을 실행하는 오픈 소스 웹 컨테이너 및 WAS이다.
✅ 웹 컨테이너란?
서블릿(Servlet)과 JSP(Java Server Pages)와 같은 Java 기반 웹 애플리케이션을 실행하는 환경으로, 서블릿을 실행하는 핵심 모듈이다.
❇️ 서블릿이란?
Java 기반 웹 애플리케이션에서 HTTP 요청을 처리하고 동적 웹 페이지를 생성, 응답을 반환하는 클래스이다.
❇️ JSP란?
JSP(Java Server Pages)는 서버 측에서 실행되는 HTML 페이지로, Java 코드를 HTML 안에 삽입하여 동적인 웹 페이지를 생성할 수 있게 해주는 기술이다.
즉, 톰캣은 서블릿과 JSP를 실행할 수 있는 서버로 Spring Boot의 내장 서버이기도 하다.
비즈니스 로직을 수행하고 동적인 콘텐츠를 생성할 수 있다는 점에서 톰캣은 WAS의 역할을 수행할 수 있다고 본다.
그러나 일반적인 WAS(예: JBoss, WebLogic 등)에서 가능한 트랜잭션 처리나 보안 기능 같은 추가 기능은 포함되어 있지 않아 웹 컨테이너라고 부르는 게 가장 적합하지 않을까?
'웹'이란 글자를 너무 많이 보았더니 글자가 되게 이상하게 생긴 것 같다...(?)
ㅇㅜㅔㅂ...
ㅇ ㅔ
ㅜ
ㅂ ...
AWS: 웹 서버와 애플리케이션 서버의 차이점은 무엇인가요?
웹 서버와 WAS
[TOMCAT] 🐱 아파치 톰캣 개념 구성 & 설정 💯 정리