웹 서버, WAS, Servlet 정리
02 Apr 2023스프링 MVC 1편 강의 정리
웹 서버(Web Server)
- HTTP 기반으로 동작하는 서버
- 정적 리소스 제공, 기타 부가 기능
- 정적 (파일) HTML, CSS, JS, 이미지, 영상
- 예: NGINX, APACHE
웹 애플리케이션 서버(WAS - Web Application Server)
- HTTP 기반으로 동작
- 웹 서버 기능 포함하여 정적 리소스 제공 가능
- 코드를 실행해서 애플리케이션 로직 수행
- 사용자에 따라 다른 화면을 보여줄 수 있음
- 동적 HTML, HTTP API(JSON)
- Servlet, JSP, Spring MVC
- 예: Tomcat, Jetty, Undertow
웹 서버와 웹 애플리케이션 서버의 차이
- 웹 서버는 정적 리소스, WAS는 애플리케이션 로직
- 웹 서버도 프로그램을 실행하는 기능을 포함하기도 하며 WAS도 웹 서버의 기능 제공
- WAS는 애플리케이션 코드 실행에 특화
웹 시스템 구성 - WAS & DB
- WAS, DB만으로 시스템 구성 가능
- WAS는 정적 리소스, 애플리케이션 로직 모두 제공 가능함
- WAS가 너무 많은 역할을 담당하게 되면 서버 과부하 위험
- 정적 리소스 때문에 비싼 애플리케이션 로직 수행이 어려울 수 있음
- WAS 장애시, 오류 화면 노출 불가능
웹 시스템 구성 - WEB & WAS & DB
- 정적 리소스는 웹 서버가 처리
- 웹 서버에서 애플리케이션 로직같은 동적 처리가 필요할 때 WAS에 요청 위임
- WAS는 중요한 애플리케이션 로직 처리 전담
- 효율적 리소스 관리 가능
- 정적 리소스가 많이 사용되면 웹 서버 증설
- 애플리케이션 리소스가 많이 사용되면 WAS 증설
- 정적 리소스만 제공하는 웹 서버는 잘 죽지 않지만, 애플리케이션 로직이 동작하는 WAS는 잘 죽음
- WAS 또는 DB 장애시 웹 서버에서 오류 화면 제공 가능
Servlet
- 비즈니스 로직 처리를 제외한 기능 처리
- TCP/IP, 소켓 연결
- HTTP 요청 파싱
- HTTP method, URL 확인
- 응답 메세지 생성
- TCP/IP 응답 전달 및 소켓 종료
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
// 비즈니스 로직
}
}
urlPatterns
의 url이 호출되면 서블릿 코드가 실행됨- HttpServletRequest: HTTP 요청 정보 사용 가능
- HttpServletResponse: HTTP 응답 정보 제공 가능
- 개발자는 HTTP 스펙을 편하게 사용할 수 있음
원리
- 브라우저에서 요청
- WAS 내부에서 request, response 객체 생성
- 서블릿 컨테이너에서 생성된 request, response 객체와 함께 서블릿 실행
- 서블릿이 종료되면서 response 객체 정보로 HTTP 응답 생성
Servlet Container
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라 함
- 서블릿 컨테이너가 서블릿 객체를 생성, 호출, 관리함
- 서블릿 객체는 싱글톤으로 관리
- 요청이 올 때마다 객체를 생성하는 것은 비효율
- 최초 로딩 시점에 서블릿 객체를 미리 만들고 재사용
- 모든 요청은 동일한 서블릿 객체 인스턴스에 접근
- 공유 변수 사용 주의해야 함
- 서블릿 컨테이너 종료시 함께 종료
- JSP도 서블릿으로 변환되어 사용
- 동시 요청을 위한 멀티 스레드 처리 지원