Home 서블릿
Post
Cancel

서블릿

웹 서버 VS 웹 애플리케이션 서버


웹 서버정적인 리소스만 제공되는 서버다. 정적인 리소스는 HTML, CSS와 같은 즉시 응답 가능한 파일을 말한다. 반면 웹 애플리케이션 서버(WAS)는 동적인 웹 페이지를 만들고 응답해준다. WAS는 웹 서버가 할 수 있는 기능도 처리가 가능하며 비즈니스 로직을 수행할 수 있어 클라이언트에게 동적인 컨텐츠를 전달할 수 있다. WAS의 대표적인 예로는 Tomcat, JBoss등이 있으며 Tomcat에서는 서블릿을 이용해 동적인 요청을 처리해준다.

서블릿이란?


서블릿이란 서버에서 실행되는 작은 자바 프로그램으로 동적인 컨텐츠를 제공할 수 있는 기능을 제공한다. 서블릿은 서블릿 컨테이너에 의해 관리되며 서블릿의 생명주기도 컨테이너가 관리하게 된다. 다음 그림은 서블릿의 생명주기를 나타낸다.

Untitled.png

생명주기 흐름을 나타내면 다음과 같다.

  1. init()으로 서블릿이 초기화 되어 생성된다.
  2. 서블릿 컨테이너가 일치하는 url에 해당하는 서블릿 스레드를 생성해 service()를 호출한다.
  3. destroy()로 서블릿이 종료된다.

위의 과정이 일반적인 서블릿의 생명주기이며 서블릿 인터페이스는 다음 코드로 구성되어 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package javax.servlet;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public interface Servlet {
    public void init();
 
    public void service(HttpServletRequest request, HttpServletResponse response)
        throws IOException;
 
    public void destroy();
}

init(), service(), destroy()는 서블릿 인터페이스로 제공되는 메서드들로, 서블릿 생명주기를 이용해 필요시에 비즈니스 로직을 구성할 수 있다.

클라이언트 요청과 응답 흐름


서블릿은 클라이언트로부터 요청이 들어오면 서블릿 컨테이너에 의해 관리되게 된다. HTTP 요청이 오면 서블릿의 실행 흐름은 다음과 같다.

Untitled.png Untitled.png

  1. 클라이언트로부터 HTTP 요청이 오면 서블릿 컨테이너가 요청온 URL가 매칭되는 서블릿이 존재하는지 확인한다.
  2. 서블릿 컨테이너는 HttpServletRequest, HttpServletResponse 객체를 생성하고 찾은 서블릿에게 스레드를 할당 해 매개변수로 요청과 응답 객체가 전달되어 service(request, response)를 호출한다.
  3. service()는 HTTP 메서드에 따라 해당되는 메서드를 찾아 실행한다.
  4. 서블릿은 클라이언트에게 응답을 반환해주고 서블릿의 생명주기는 끝나게 된다.

서블릿 컨테이너는 클라이언트의 요청마다 스레드를 생성해 서블릿에게 스레드를 할당한다. 따라서 서블릿을 사용할때는 스레드 동기화에 대한 문제가 생길 수 있어 공유되는 변수는 조심해서 사용해야 한다.