서블릿(Servlet)이란
서블릿이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 응용 프로그래밍 기술이다. 즉, 자바를 사용하여 웹을 만드는 기술
웹을 구성할때는 클라이언트에서 요청을 하고 서버에서 응답을 해주어야하는데 이 역할을 대신해주는 자바 프로그램
예로 들면, 사용자가 정보를 서버에 보내게 되면, 서버는 정보를 확인하고 그에 맞는 응답 페이지를 띄우거나 전송하는 형식이다.
Servlet 동작 과정 |
서블릿에서 서비스를 호출한 후, 서비스에서는 doGet(), doPost()를 호출. 해당 메서드에서 동적 페이지 생성 후 객체에 응답을 보낸다.
서블릿은 웹 서버안에 웹 컨테이너에서 실행
서블릿 컨테이너 (Servlet Container)란
서블릿 Class의 규칙에 맞게 서블릿을 관리해주는 컨테이너
서블릿 컨테이너는 클라이언트의 요청을 받고 응답할 수 있게, 웹 서버와 통신을 한다.
서블릿 컨테이너로는 예로들면, 웹서버인 톰캣이 있다.
서블릿 컨테이너의 기능
1. 웹 서버와 통신 지원
서블릿과 웹 서버간의 통신을 도와준다.
웹 서버와 소켓을 만들어서 통신을 하는데 소켓을 만들고 특정 포트를 리스닝하고, 스트림 생성 및 요청을 받는 역할을 대신한다.
따라서 개발자는 더욱 더 비즈니스 로직에 집중이 가능하다.
2. 생명주기 관리
서블릿 컨테이너는 서블릿 클래스를 로딩해서 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 서블릿 메서드와 매핑을 하는 역할을 한다.
그 후 서블릿이 제 기능을 다하는 순간 Garbage Collection(GC)를 통해 메모리상에서 서블릿을 제거한다.
3. 멀티쓰레드 관리
서블릿 컨테이너는 요청이 들어올 때마다 매번 쓰레드를 새로 생성한다. 따라서 동시에 여러 HTTP 메서드 요청이 들어올 시 동시에 작업이 가능.
작업이 다 완료된 후, 쓰레드는 자동으로 소멸된다. 즉, 자동으로 쓰레드 생성 및 종료를 담당.
4. 선언적인 보안관리
보안 관련 기능을 제공. 보안이슈가 생겨 수정할 일이 생길 때 자바 소스를 직접 수정하여 컴파일 하지 않아도 됨.
Servlet 생명주기 및 참고할 예시 코드
Servlet 생명주기 동작 과정
클라이언트 요청이 들어오면 서블릿 컨테이너는 서블릿 인스턴스가 메모리에 존재하는지 확인. 없을 시, init()메소드를 통해 쓰레드를 생성. 그 후, Service()를 통해 요청과 응답을 처리해주고 destroy()메소드를 실행하여 HttpServletRequest, HttpServletResponse 객체를 소멸.
위에서 설명한 Servlet 참고 코드
public class myServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init method 호출!");
}
@Override
public void destroy() {
System.out.println("destroy 호출");
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("doGet 호출!");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("doPost 호출!");
}
}