Header

서블릿(Servlet)에 대하여

서블릿(Servlet)이란 


서블릿이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 응용 프로그래밍 기술이다. 즉, 자바를 사용하여 웹을 만드는 기술


웹을 구성할때는 클라이언트에서 요청을 하고 서버에서 응답을 해주어야하는데 이 역할을 대신해주는 자바 프로그램

 

예로 들면, 사용자가 정보를 서버에 보내게 되면, 서버는 정보를 확인하고 그에 맞는 응답 페이지를 띄우거나 전송하는 형식이다.

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 호출!");		
    }
	
}










댓글 쓰기

0 댓글