(Java) 서블릿(Servlet)이란

제로코딩

·

2022. 6. 29. 00:11

반응형

서블릿(Servlet)이란 

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

 

웹을 구성할때는 클라이언트에서 요청을 하고 서버에서 응답을 해주어야하는데 이 역할을 대신해주는 자바 프로그램입니다. 서블릿은 웹 요청 및 응답을 대신해서 다루어줍니다. 

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

 

Servlet 동작 방식

위 그림에서 web.xml을 기반으로 들어온 URL이 어느 서블릿에 해당하는지 매핑 분석을 시도합니다. 그 후 찾은 서블릿을 기반으로 서블릿에서 서비스를 호출한 후, 서비스에서는 doGet(), doPost()를 호출합니다. 해당 메서드에서 동적 페이지 생성 후 객체에 응답을 보냅니다.

서블릿은 웹 서버안에 웹 컨테이너에서 실행됩니다.

 

⚡️ 서블릿(Servlet) 특징

 

1.클라이언트의 요청에 의해 동적으로 작동됨

 

2.MVC패턴의 Controller역할 수행

 

 

⚡️ 서블릿 컨테이너

 

서블릿 Class의 규칙에 맞게 서블릿을 관리해주는 컨테이너

서블릿 컨테이너는 클라이언트의 요청을 받고 응답할 수 있게, 웹 서버와 통신을 합니다. (Ex. Tomcat)

 

 

 

📌 서블릿 컨테이너의 기능

 

1. 웹 서버와 통신 지원

 서블릿과 웹 서버간의 통신을 도와줍니다. 웹 서버와 소켓을 만들어서 통신을 하는데 소켓을 만들고 특정 포트를 리스닝하고, 스트림 생성 및 요청을 받는 역할을 대신해줍니다. 이로 인해 개발자는 더욱 더 비즈니스 로직에 집중할 수 있게 됩니다.

 

2. 생명주기 관리

 서블릿 컨테이너는 서블릿 클래스를 로딩해서 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 서블릿 메서드와 매핑을 하는 역할을 합니다. 그 후 서블릿이 제 기능을 다하는 순간 Garbage Collection(GC)를 통해 메모리상에서 서블릿을 제거합니다.

 

3. 멀티쓰레드 관리

서블릿 컨테이너는 요청이 들어올 때마다 매번 쓰레드를 새로 생성합니다. 따라서 동시에 여러 HTTP 메서드 요청이 들어올 시 동시에 작업이 가능합니다. 작업이 다 완료된 후, 쓰레드는 자동으로 소멸됩니다. 즉, 자동으로 쓰레드 생성 및 종료를 담당합니다.

 

4. 선언적인 보안관리

보안 관련 기능을 제공합니다. 보안이슈가 생겨 수정할 일이 생길 때 자바 소스를 직접 수정하여 컴파일 하지 않아도 됩니다. 

 

 

 

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

 

 

init()

서블릿이 처음 요청될 때 초기화해주는 메소드.

 

service()

클라이언트 요청을 받고 응답을 줄 때 필요한 메소드.

 

destroy()

사용되지 않는 서블릿 클래스는 destroy()를 통해 제거.

 

 

반응형