Having

[Servlet/JSP] Servlet이란 무엇이며 어떻게 동작할까? (feat. Servlet Container) 본문

Web

[Servlet/JSP] Servlet이란 무엇이며 어떻게 동작할까? (feat. Servlet Container)

GHM 2023. 1. 14. 20:48
  • 서블릿 정의, 아키텍처, 역할
  • 서블릿 컨테이너 정의, 역할
  • 서블릿 생명주기
  • 서블릿 동작과정

Servlet이란?

서블릿은 여러 방식으로 묘사된다.

  1. 서블릿은 Dynamic Web page를 만들기 위해 사용되는 자바의 웹 애플리케이션 프로그래밍 기술
  2. 서블릿은 웹 클라이언트의 요청을 처리하고 응답하는 클래스 (HttpServlet을 확장한 클래스)
  3. 서블릿은 웹 클라이언트의 요청을 처리하고 응답하는 작은 서버 측 프로그램
  4. 서블릿은 사용 전 dependency를 추가해야 하는 servlet API (javax.servlet-api)
  5. 서블릿은 servelt API에 속해있는 하나의 인터페이스 (javax.servlet.Servlet)

Servlet Architecture

출처 : https://www.educba.com/servlet-architecture/, https://www.educba.com/servlet-in-java/

Servlet의 역할은?

: Java Web Application 개발 환경에서 클라이언트의 요청을 받아 처리하고 dynamic web page를 응답해주는 역할을 한다.



요약해보자면,

서블릿이란 자바 웹 애플리케이션을 개발하기 위해 필요한 server-side 프로그램이고,
클라이언트에게 요청을 받아 비즈니스 로직을 수행한 뒤 dynamic web page를 응답해주는 역할을 한다.

 


Servlet Container

: 서블릿을 관리하고 실행시키는 또 다른 프로그램이며 Servlet Engine, Web Container라고도 불린다. 서블릿 컨테이너는 개발자가 자바 웹 애플리케이션을 개발할 때 비즈니스 로직(service method) 작성에만 전념할 수 있도록, 요청이 올 때마다 웹 서버에서 반복적으로 처리해야하는 작업을 대신 수행한다. 대표적인 예로 톰캣 이 있다.


반복적인 작업에는

  1. 서버 TCP/IP 연결 대기, 소켓 연결
  2. Request, Response 객체 생성
  3. HTTP 요청 메시지 파싱 후, Request 객체에 데이터 넣기
  4. Response 객체에 담긴 데이터로 HTTP 응답 메시지 작성
  5. TCP/IP에 응답 전달, 소켓 종료

등이 있다.

 

역할

  1. 서블릿 Life Cycle 관리
    : 서블릿 객체의 생성, 초기화, 호출, 종료를 관리한다. 서블릿 객체는 싱글톤으로 관리된다.
  2. 서블릿과 웹 서버의 통신 지원
    : 서블릿 컨테이너는 서블릿과 웹 서버가 통신할 수 있도록 해준다. 개발자는 비즈니스 로직에 더욱 집중할 수 있다.
  3. 동시 요청을 위한 멀티스레드 처리 지원
    : 서블릿 컨테이너는 요청이 올 때마다 새로운 자바 스레드를 생성한다. 동시에 여러 요청이 오더라도 멀티스레드 환경으로 동시에 작업을 수행할 수 있다.

Servlet 생명주기(Life Cycle)

출처 : https://www.geeksforgeeks.org/life-cycle-of-a-servlet/

 

  1. init() : 서블릿 객체를 사용하기 위해 선행되어야 하는 초기화 작업을 수행한다. 일반적으로 클라이언트의 최초 요청 시점에 서블릿 객체가 컨테이너에 생성되고 init method가 실행된다. 하지만, 초기화는 상대적으로 시간이 걸리는 작업이기 때문에, 서블릿 컨테이너를 처음 구동하는 시점에 초기화를 진행하는 것이 좋다. 또, 해당 메서드는 서블릿 객체당 한번씩만 호출되는데 그 이유는 싱글톤으로 관리되기 때문이다.
  2. service() : 호출된 서블릿 객체의 비즈니스 로직을 수행한다. HTTP 요청 타입(GET, POST, PUT, DELETE)에 맞는 적절한 메서드(doGet, doPost, doPut, doDelete method)를 호출하고 동적 웹 페이지 만드는 역할을 수행한다.
  3. destroy() : 서블릿 컨테이너가 서블릿 객체를 종료한다. 서블릿 객체는 하나로 재사용(공유)하기 때문에 init method와 동일하게 한번만 호출된다.

 


Servlet 동작 과정

출처 : https://healthdevelop.tistory.com/entry/tomcat2

  1. 웹 브라우저의 요청 시, HTTP 요청 메시지가 서블릿 컨테이너에 전송된다.
  2. 컨테이너는 HTTP 요청 메시지를 파싱한 후 request, response 객체를 생성한다.
    (request : 데이터가 담긴 객체, response : 빈 객체)
  3. 컨테이너는 web.xml 또는 @WebServlet을 기반으로, 요청 URL과 매핑된 서블릿 객체를 찾는다.
  4. 해당 서블릿의 최초 요청이었을 경우, 서블릿 객체를 생성하고 init method를 호출한 뒤, service method를 호출해 비즈니스 로직을 수행한다. (request 객체의 데이터를 사용해서 response 객체에 데이터를 담는다)
  5. 컨테이너는 response 객체에 담긴 데이터로 HTTP 응답 메시지를 생성하고 웹 브라우저로 전송한다.
  6. 전송 완료 후, 서블릿 컨테이너는 두 request, response 객체를 소멸시킨다.

 

Java Web Application 개발 과정을 포함한 Servlet 동작 과정

출처 : https://coding-factory.tistory.com/742

  1. 개발자가 서블릿 소스 코드를 작성한다.
  2. 컴파일러가 소스 코드를 컴파일한다.
  3. web.xml 또는 @WebServlet을 통해 서블릿 컨테이너에 서블릿 클래스를 등록하고 URL을 매핑한다.

    이하 과정은 위 Servlet 동작 과정과 동일




참고자료
https://www.geeksforgeeks.org/life-cycle-of-a-servlet/
https://coding-factory.tistory.com/742