📍 전체 흐름
📍 Web Server(웹 서버)
- 역할
- 정적인 콘텐츠를 처리하고 클라이언트로부터의 HTTP 요청에 대한 응답을 처리한다.
- 주로 정적인 자원(HTML, 이미지, CSS 등)을 제공하며, 동적인 자원은 서블릿 컨테이너에게 전달하여 처리한다.
- 특징
- Apache HTTP Server, Nginx 등이 대표적인 웹 서버이다.
- 정적인 콘텐츠를 빠르게 서빙하고, 보안 설정, 부하 분산, SSL 종단 지원 등을 담당한다.
📍 Servlet Container(서블릿 컨테이너)
-
역할
- 동적인 콘텐츠를 처리하고, 서버 측에서 비즈니스 로직을 실행하여 웹 애플리케이션의 동작을 관리한다.
- 서블릿의 생명주기를 관리하고 실행 환경을 제공한다.
-
특징
- 서블릿 컨테이너는 주로 WAS에 내장되어 있다.
📍 Servlet(서블릿)
-
역할
- 자바로 구현된 서버 측 프로그램으로, 클라이언트의 요청에 대해 동적인 콘텐츠를 생성한다.
- Java EE 스펙에 따라 웹 애플리케이션의 로직을 구현하는 데 사용된다.
-
특징
- HttpServlet 클래스를 상속받아 구현되며, HTTP 프로토콜을 기반으로 클라이언트 요청을 처리한다.
- 서블릿은 WAS 내의 서블릿 컨테이너에서 실행되며, 동적인 웹 애플리케이션 로직을 처리한다.
📍 WAS(Web Application Server, 웹 애플리케이션 서버)
- 역할
- 웹 서버와 서블릿 컨테이너를 포함하는 개념이다.
- 정적인 컨텐츠를 처리하는 웹 서버의 기능보다는 동적인 컨텐츠를 처리하는 서블릿 컨테이너의 기능이 메인이다.
- 특징
- 동적인 자원을 생성하고 실행하는 데 특화되어 있으며, 트랜잭션 관리, 스레딩, 세션 관리 등을 담당한다.
📍 비교
- 역할 분리
- 웹 서버는 주로 정적인 자원을 처리하고, 서블릿 컨테이너는 동적인 자원 및 비즈니스 로직을 처리한다.
- 언어
- 웹 서버는 다양한 언어로 작성된 스크립트를 실행할 수 있지만, WAS는 주로 Java를 사용한다.
- 종속성
- 서블릿은 WAS 내에서 동작하므로 WAS에 종속적이다.
📍 헷갈릴 수 있는 것들
- Apache Tomcat은 ①별도의 웹 서버를 두어 서블릿 컨테이너의 역할만 수행하기도 하고, ②웹 서버 기능이 내장되어 있어 경량화된 WAS로 사용되기도 한다.
- 일반적으로 "아파치"는 Apache HTTP Server(웹 서버)를, "톰캣"은 Apache Tomcat을 의미한다.
- Servlet은 개발자가 직접 작성하는 Java 클래스이다. HttpServlet 클래스를 상속받아 구현된다.
- 웹 서버가 처리하는 정적 콘텐츠는 웹 페이지 로고 출력, 페이지 레이아웃 출력과 같은 것이다. 서블릿 컨테이너가 처리하는 동적 콘텐츠는 장바구니에 물품 추가 시 장바구니 목록 업데이트, 실시간 주식 가격 업데이트와 같은 것이다.
References
🔗 https://www.geeksforgeeks.org/servlet-flow-of-execution
🔗 Servlet, Tomcat, Apache, Nginx.. 이게 다 뭘까 - 곽유영(네이버페이 기술 블로그)