본문으로 바로가기

[Servlet] 서블릿(Servlet)이란?

category Web/Servlet, Jsp 2021. 9. 15. 18:55

서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스이다.

자바로 작동되어 있어 자바의 일반적인 특징을 모두 가지지만, 일반 자바 프로그램과 달리 독자적으로 실행되지 못한다. 그래서 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다는 차이가 있다.

   

서블릿 동작 과정

➞ 클라이언트가 웹 서버에 요청

➞ 웹 서버는 요청을 톰캣과 같은 웹 애플리케이션 서버(WAS)에 위임

➞ WAS는 각 요청에 해당하는 서블릿을 실행

➞ 서블릿은 요청에 대한 가능을 수행 후, 결과 반환하여 클라이언트에 전송

 

서블릿 특징

  • 서버 쪽에서 실행되면서 기능을 수행
  • 기존의 정적인 웹 프로그램의 문제점을 보완하여 동적인 여러가지 기능을 제공
  • 스레드 방식으로 실행
  • 자바로 만들어져 자바의 특징(객체지향)을 가짐
  • 컨테이너에서 실행
  • 컨테이너 종류에 상관없이 실행됨(플랫폼 독립적)
  • 보안 기능을 적용하기 쉬움
  • 웹 브라우저에서 요청 시 기능을 수행

  

  

서블릿 API 계층 구조와 기능


자바로 만들어져 클래스들간의 계층 구조를 가진다.

서블릿 API는 ServletServletConfig 인터페이스를 구현해 제공하며 GenericServlet 추상 클래스가 이 두 인터페이스의 추상 메서드를 구현한다. 그리고 이 GenericServlet을 다시 HttpServlet이 상속 받는다.

   

서블릿 API 기능

서블릿 구성요소 기능
Servlet 인터페이스 - javax.servlet 패키지에 선언
- Servlet 관련 추상 메서드 선언
- init(), service(), destory(), getServletInfo(), getServletConfig() 선언
ServletConfig 인터페이스 - javax.servlet 패키지에 선언
- Servlet 기능 관련 추상 메서드 선언
- getInitParameter(), getInitParameterNames(), getServletContext(), getServletName() 선언
GenericServlet 인터페이스  - javax.servlet 패키지에 선언
- 상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스
- GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩해서 구현
HttpServlet 인터페이스 - javax.servlet.http 패키지에 선언
- GenericServlet을 상속받아 HTTP 프로토콜을 사용하는 웹 브라우저에서 서블릿 기능을 수행
- 웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용
- 요청 시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 차례대로 호출

GenericServlet은 일반적인 여러 통신 프로토콜에 대한 클라이언트/서버 프로그램에서 서블릿 기능을 구현하는 클래스이다. HttpServlet은 이 GenericServlet을 상속받는데, HTTP 프로토콜을 이용하는 서블릿 기능을 구현하는 클래스이다.

서블릿은 이 HttpServlet을 상속받아 HTTP 프로토콜로 동작하는 웹 브라우저의 요청을 처리한다.

   

 

서블릿의 생명주기 메소드


서블릿 생명주기(Life Cycle) 메서드란 서블릿 실행 단계마다 호출되어 기능을 수행하는 콜백 메소드이다.

  

서블릿도 자바 클래스이므로 실행하면 초기화 과정 그리고 메모리에 인스턴스를 생성하여 서비스를 수행한 후 다시 소멸하는 과정을 거친다. 이러한 단계를 거칠 때마다 서블릿 클래스의 메서드가 호출되어 초기화, 데이터베이스 연동, 마무리 작업을 수행한다. 각 과정에서 호출되어 기능을 수행하는 메서드들이 서블릿 생명주기 메소드이다.

생명주기 단계 호출 메서드 특징
초기화 init() - 서블릿 요청 시 맨 처음 한 번만 호출
- 서블릿 생성 시 초기화 작업을 주로 수행
작업 수행 doGet()
doPost()
- 서블릿 요청 시 매번 호출
- 실제로 클라이언트가 요청하는 작업을 수행
종료 destory() - 서블릿이 기능을 수행하고 메모리에서 소멸될 때 호출
서블릿의 마무리 작업을 주로 수행

init() 메서드는 실행 초기에 서블릿 기능 수행과 관련된 기능을 설정하는 용도로 많이 사용된다.

destory()는 서블릿이 메모리에서 소멸될 때 여러 가지 종료 작업을 수행하는데, 이런 기능이 필요없다면 생략도 가능하다.

doGet()이나 doPost() 같이 do로 시작하는 메서드는 서블릿의 핵심 기능을 처리하므로 반드시 구현해야 한다.