개발공부/WEB

Spring : 서블릿(servlet)이란?

tigre 2022. 3. 1. 14:25
728x90
반응형

서블릿 이란?

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

서블릿은 자바언어로 작성되어 있어 자바의 일반적인 특징을 모두 가진다. 그러나 서블릿은 일반 자바 프로그램과 다르게 독자적으로 실행되지 못하고 톰캣과 같은 JSP/Servlet 컨테이너에서 실행된다는 점에서 차이가 있다.

 

서블릿은 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹브라우저에 결과를 전송한다. 서버에서 실행되므로 보안과 관련된 기능도 훨씬 안전하게 수행할 수 있다.

 

서블릿 동작 과정

클라이언트가 웹 서버에 요청하면 웹 서버는 그 요청을 톰캣과 같은 웹 어플리케이션 서버(WAS)에 위임한다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행한 뒤, 요청에 대한 기능을 수행한 후 결과를 반환하여 클라이언트에게 전송하는 것이다.

 

서블릿의 특징

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

 

서블릿 API 계층 구조와 기능

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

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

 

서블릿 API 기능

 

Servlet 인터페이스

- Servlet 관련 추상 메서드를 선언합니다.

- init(), service(), destroy(), getServletInfo(), getServletConfig()를 선언한다.

 

ServletConfig 인터페이스

- Servlet 기능 관련 추상 메서드가 선언되어 있다.

- getInitParameter(), getInitParameterNames(), getServletContext(), getServletName()이 선언되어 있습니다.

 

GenericServlet 클래스

- 상위 두 인터페이스를 구현하여 일반적인 서블릿 기능을 구현한 클래스

- GenericServlet을 상속받아 구현한 사용자 서블릿은 사용되는 프로토콜에 따라 각각 service()를 오버라이딩해서 구현

 

HttpServlet 클래스

- GenericServlet을 상속받아 HTTP 프로토콜을 사용하느 웹 브라우저에서 서블릿 기능을 수행한다

- 웹 브라우저 기반 서비스를 제공하는 서블릿을 만들 때 상속받아 사용한다

- 요청시 service()가 호출되면서 요청 방식에 따라 doGet()이나 doPost()가 차례대로 호출된다.

 

서블릿 생명주기 메서드

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

 

따라서 서블릿 생명주기 메서드란 서블릿 실행 단계마다 호출되어 기능을 수행하는 콜백 메서드를 말한다.

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

 

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

destroy()는 서블릿이 메모리에서 소멸될 때 여러 가지 종료 작업을 수행한다. 따라서 이런 기능이 필요없으면 생략해도 된다.

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

728x90
반응형