Ssup2 Blog logo Ssup2 Blog

Servlet과 Servlet Container를 분석한다.

1. Servlet

Servlet은 Java EE의 표준중 하나로 javax.servlet Package를 기반으로 Server에서 동작하는 Class들을 의미한다. 각 Servlet은 init(), service(), destory() 3개의 method를 반드시 정의해야 한다.

2. Servlet Container

[그림 1] Servlet Container

Servlet Container는 Servlet Instance를 생성하고 관리하는 역할을 수행한다. Web Container라고도 불린다. [그림 1]은 3 Tier Architecture로 서버를 구성할때의 Servlet Container의 위치를 나타내고 있다. HTTP 요청을 다음과 같은 과정을 통해 처리된다.

public class MyServlet extends HttpServlet {
    private Object thisIsNOTThreadSafe;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Object thisIsThreadSafe;
    }
}
[Code 1] Servlet 예제

HTTP 요청 처리 과정을 보면 Servlet Instance는 HTTP 요청이 올때마다 하나씩 생성하는게 아니라 기존의 Servlet Instance를 이용한다. 즉 하나의 Servlet Instance가 여러개의 HTTP 요청을 동시에 처리하게 된다. 따라서 Servlet Instance는 Thread-Safe하지 않는다. [Code 1]의 HtttpServlet 예제처럼 Servlet의 멤버 변수는 Thread-Safe하지 않는다. Thread-Safe한 변수를 이용하기 위해서는 Method의 지역변수를 이용해야 한다. Servlet Container는 사용되지 않아 제거되야할 Servlet Instance의 destory() method를 호출하고 JVM의 GC(Garbage Collector)에서 Servlet Instance를 해지할 수 있도록 표시해둔다. GC는 표시된 Servlet Instance를 해지한다.

3. 참조