본문 바로가기

WS & WAS/common

Web Application Server

Web Application Server

 

WAS 는 HTTP 통신을 하는 Web Server 와

비즈니스 로직을 처리가 가능한 Servlet 을 실행/ 관리하는 서블릿 컨테이너(Web Container)를 가지고 있다.

 

socket listen, accept 등과 같은 HTTP 통신 부분을 서블릿 컨테이너와 분리해서

서블릿 컨테이너는 비즈니스 로직 처리에 집중하게 한다.

여러개의 서블릿 컨테이너를 가지고 있을 수 있고 Context Path 로 구분한다.

 

 

웹서버와 서블릿 컨테이너로 분리되어있다.

 

 

WAS에서는 서블릿의 라이프 사이클과 멀티스레드를 지원한다.

 

WAS 의 동작과정

1. 앞단에 웹서버가 별도로 있다면 클라이언트의 요청을 받게 되고 이 요청을 WAS의 웹서버에 보내게 된다.

 

2. WAS는 요청에 해당되는 서블릿 인스턴스가 존재하는지 확인하고,

존재하지 않으면 스레드 풀에서 새로운 스레드에 서블릿을 생성하고 해당 서블릿의 init() 메소드를 호출하여 서블릿을 초기화 시킨다.

 

3.  사용자 요청을 기반으로 HttpServletRequest와 HttpServletResponse 객체를 생성해서 해당 서블릿에 전달한다.

 

4. 객체를 받은 서블릿은 service() 메소드를 호출하게 되고 service 메소드에서는 요청 http 메소드에 맞게 

doGet(), doPost()... 를 알맞게 호출한다.

 

5. 실행이 끝나면 HttpServletResponse를 HTTP 응답 메시지로 변환해서 클라이언트에 전송하게 된다.

 

6. 생성된 스레드를 종료하고 HttpServletRequest와 HttpServletResponse 객체를 제거한다.

 

 

 

public class TestServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	...
    }
}

서블릿 예제

 

 

클라이언트의 요청이 왔을때 WAS가 서블릿을 실행하기 위해 HTTPServlet 이라는 공통된 인터페이스를 사용한다.

모든 서블릿은 요청을 전달받기 위해 HTTPServlet을 상속해야만 한다.

 

 

HTTP 요청이 처리되는 과정을 보면 HTTP 요청이 올때마다 서블릿 인스턴스가 생성되는게 아니고

기존의 메모리에 올라와 있는 서블릿 인스턴스를 이용하게 된다. 

 

따라서 여러개의 요청을 하나의 서블릿 인스턴스가 처리하게 되기 때문에

스레드 세이프 하지 않다.

스레드 세이프한 변수를 사용하기 위해서는 지역변수를 사용해야 한다.

 

서블릿 컨테이너는 사용하지 않아서 제거해야될 서블릿 인스턴스는 인스턴스의 destroy 메소드를 호출해서

GC에서 인스턴스를 제거할수있게 표시를 해둔다.

 

'WS & WAS > common' 카테고리의 다른 글

Servelet Container - Spring Framework  (0) 2021.08.13
Servlet  (0) 2021.08.13
Web Server  (0) 2021.08.12