웹 서버(WS)
-
클라이언트의 요청을 받아 정적 데이터(HTML, Image 등)를 HTTP 프로토콜을 통해 전송한다.
-
클라이언트의 요청이 동적인 데이터를 요구하는 요청이라면 WAS에 처리를 요청한다.
-
정적인 데이터를 처리해주기 때문에 WAS의 부담을 줄여주는 역할도 한다.
-
ex) Apache, Nginx, IIS, WebtoB 등
웹 어플리케이션 서버(WAS)
동적인 데이터를 제공하기 위해선 WAS(웹 어플리케이션 서버)가 필요하다.
-
웹 서버(WS)에게 받은 요청(동적 데이터 처리)을 처리하여 웹 서버에게 제공한다.
-
일반적으로 웹 서버의 기능을 내제하고 있어 웹 서버 없이도 서비스가 가능하다.
-
ex) Tomcat, WebLogic, WebSphere, Jeus, JBoss 등
-
WAS의 내부 구조
WAS의 내부구조
-
웹 서버의 요청이 들어오면 제일 먼저 컨테이너가 이를 알맞게 처리한다.
-
컨테이너는 배포서술자(web.xml)를 참조하여 해당 서블릿에 대한 쓰레드를 생성하고
요청(httpServletRequest) 및 응답(httpServeletResponse)객체를 생성하여 전달한다. -
다음으로 컨테이너는 서블릿을 호출(service())한다.
-
호출된 쓰레드(서블릿의 작업을 담당)는 요청에 따라 doPost() 또는 doGet()을 호출한다.
-
호출된 doPost() 또는 doGet() 메소드는 생성된 동적 데이터를 Response객체에 담아 컨테이너에 전달한다.
-
컨테이너는 전달받은 Response객체를 HTTPResponse 형태로 전환하여 웹 서버에 전달하고
생성되었던 쓰레드를 종료하고 요청(httpServletRequest) 및 응답(httpServeletResponse) 객체를 소멸시킨다.
Container
- 컨테이너에는 여러 종류가 있으며(Servlet 컨테이너, JSP 컨테이너, EJB 컨테이너 등)
다양한 컴포넌트들을 내장하고 있다.
서블릿 컨테이너(Servlet Container)
WAS별로 다양한 종류의 컨테이너를 내장하고 있으며
이들 중 서블릿에 관련된 기능을 모아놓은 것을 서블릿 컨테이너라 부른다.
-
서블릿 컨테이너는 위 그림 처럼 servlet를 실행하고 관리하는 역할을 하는데
개발자가 신경써야 할 복잡한 부분을 대신 처리하여 주기 때문에 편리하다. -
한가지 예로 자바애플리케이션 개발시 필요한 main()메소드가 존재하지 않는 것이 이때문이다.
-
다음은 서블릿 컨테이너의 주된 역할이다.
-
생명 주기 관리
-
초기화 : 서블릿을 로드해 초기화(init)한다.
-
호출 : 클라이언트의 요청을 받으면 서블릿 메소드를 호출한다.
-
종료 : 서블릿 컨테이너가 종료되면 서블릿을 종료시키고(destroy 메소드 호출) 메모리를 정리한다.
-
-
통신 지원
-
웹 서버로부터 받은 요청을 분석해 서블릿을 실행시키고
-
서블릿에서는 웹 서버의 정보를 확인 할 수 있도록 하는 기능을 제공한다.
-
-
멀티스레딩 지원
-
클라이언트의 요청에 따라 서블릿을 생성하고
-
이미 생성된 서블릿에 대한 요청은 스레드를 생성해 실행한다.
-
컴포넌트(Component)
-
특정 기능이나 관련된 기능을 재사용 가능한 형태(블록)으로 만들어
-
소프트웨어 개발을 레고 블록 쌓듯이 진행 할 수 있도록 하는 기술을 말한다.