카테고리 없음

[Servlet] Sevlet의 동작 흐름, 방식, 생명주기

ckm7907 2024. 4. 2. 10:55

개요

스프링의 동작하는 방식에 대해 고민을 할 때, 서블릿이 관련되어 있다.

servlet이 무엇일까?

서블릿을 한 줄로 정리하면 다음과 같다.

 

클라이언트 요청을 처리하고,
그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹프로그래밍 기술

 

Servlet 특징

- 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트

- html 을 사용하여 요청에 응답한다.

- Java Thread를 이용하여 동작한다.

- MVC 패턴에서 Controller로 이용된다.

- HTTP 프로토콜 서비스를 지원하는 HttpServlet 클래스를 상속받는다.

- UDP 보다 처리 속도가 느리다.

- HTML 변경 시 Servlet을 재 컴파일해야 하는 단점이 있다.

 

Servlet 동작 흐름

1. 클라이언트 : 웹 브라우저에서 사용자가 요청한 웹페이지를 요청합니다.

2. 웹 컨테이너 : 클라이언트의 요청을 받아서 Servlet을 실행하고, 그 결과를 다시 클라이언트에게 전달합니다.

3. Servlet : 웹 컨테이너에서 실행되는 Java 클래스로, 동적인 데이터 처리를 담당합니다.

Ioc

서블릿(Servlet)은 자바 클래스이지만, main 메서드가 없습니다.
이는 서블릿이 웹 컨테이너(Web Container)에서 실행되는 환경에서 동작하기 때문입니다. 그래서 서블릿은 사용자가 직접 제어하는 기술이 아닙니다.
그렇다면 누가 서블릿의 제어를 하게 될까요?
바로 웹 컨테이너입니다. 웹 컨테이너는 서블릿의 생명 주기를 관리하며, 요청에 따라 서블릿을 생성하고 실행합니다. 이러한 제어 방식을 IOC (Inversion of Control) 또는 제어의 역전이라고 합니다.

Servlet 동작 방식

1. 사용자가 URL을 입력하면 HTTP Request 가 Servlet Container로 전송합니다.

2. 요청을 전송받은 Servlet Container는 HttpServeltRequest, HttpServletResponse 객체를 생성합니다.

3. web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾습니다.

4. 해당 서블릿에서  service 메소드를 호출한 후 클라이언트의 GET, POST 여부에 따라 doGet() 또는 doPost() 호출합니다.

5. doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보냅니다.

6. 응답이 끝나면 HttpServletRequst, HttpServletResponse 두 객체를 소멸시킵니다.

 

Servlet 생명주기

1. 클라이언트의 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인한다.

  1 - 1 없을 경우 init() 메소드를 호출하여 적재합니다.

init() 메소드는 처음 한번만 실행되기 때문에, 서블릿의 쓰레드에서 공통적으로 사용해야하는 것이 있다면 오버라이딩하여 구현하면 됩니다.

만약, 실행 중 서블릿이 변경될 경우, 기존 서블릿을 파괴하고 init()을 통해 새로운 내용을 다시 메모리에 적재합니다.

2. init()이 호출된 후 클라이언트의 요청에 따라 service()메소드를 토해 요청에 대한 응답이 doGet()가 doPost()로 분기됩니다. 이 때 서블릿 컨테이너가 클라이언트의 요청이 오면 가장 먼저 처리하는 과정으로 생성된 HttpServletReques, HttpServletResponse에 의해 reqeust와 response 객체가 제공됩니다.

3. 컨테이너가 서블릿에 종료 요청을하면 destroy()메소드가 호출되는데 마찬가지로 한번 만 실행되며, 종료시에 처리해야하는 작업들은 destroy()메소드를 오버라이딩하여 구현하면 됩니다.

 

 

 

출처

https://mangkyu.tistory.com/14