백엔드/SpringBoot

서블릿(Servlet)이란

주디(Junior developer) 2025. 5. 24. 17:02

 

 

 

 

🍀 서블릿이란?

- Java에서 HTTP 요청과 응답을 처리해주는 클래스이다.

 

 

개발자가 HTTP 요청이 올때마다 해당 요청을 파싱하고, 또 HTTP 스펙에 맞게 응답 메세지를 생성하는 것은 어려울 것이다..!

서블릿은 개발자가 비즈니스 로직에 집중할 수 있도록 도와주는 역할을 한다.

Servlet을 이용해 동적으로 웹페이지를 만들 수도 있고, json 형식으로 데이터를 클라이언트에게 보내줄 수도 있다. 

 

스프링 프로젝트에서 말하는 서블릿은 거의 "javax.servlet.http.HttpServlet" 을 말한다고 한다. 이는 Servlet 인터페이스를 구현한 구현체 중 하나이다.
즉, HTTP 응답과 요청을 처리하는 서블릿은 HttpServlet 이라고 볼 수 있다.

 

public interface Servlet {
    void init(ServletConfig config) throws ServletException;
    
    /**
     * Called by the servlet container to allow the servlet to respond to a request.
     */
    void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;

    /**
     * Called by the servlet container to indicate to a servlet that the servlet is being taken out of service.
     */
    void destroy();
}

 

 

실제 인터페이스가 어떻게 구현되어있는지 궁금해서 코드를 살펴봤다. (실제는 더 다양한 메서드가 있다.)

 

1. init(ServletConfig config)

  • 서블릿 객체가 처음 생성될 때 단 한 번만 호출
  • 서블릿 컨테이너가 서블릿을 로드할 때 ServletConfig를 전달하며 초기화 용도로 사용됨
  • 즉, 한 서블릿 클래스 당 init()은 딱 한 번만 실행됨

 

2. service(ServletRequest req, ServletResponse res)
  • 클라이언트 요청이 들어올 때마다 호출됨
  • 동시에 여러 요청이 올 수 있으므로, 내부 코드에서 thread-safe하게 동작해야 함
  • GET, POST 등의 요청에 따라 doGet, doPost 등을 호출하는 역할도 이 안에서 처리됨 (HttpServlet 기준)

 

 

3. destroy()

  • 서블릿이 컨테이너에서 내려갈 때(종료되거나 재배포 등) 단 한 번 호출됨
  • 리소스 정리, 연결 종료 등 마무리 작업에 사용됨

 

 

🍀 서블릿 컨테이너

- 서블릿 객체의 생성, 소멸, 호출, 초기화 등의 생명주기를 관리한다.

- 과거에는 톰캣의 서블릿 컨테이너가 해당 기능을 수행했다면, 이제 스프링 MVC 프레임워크에서 서블릿 컨테이너의 역할을 스프링 컨테이너(ApplicationContext) 가 대신하고 있다.

- HTTP 요청이 오면 서블릿 컨테이너는 적절한 Target Servlet(대상 서블릿, 요청 url과 HTTP 메서드 일치)으로 요청을 전달한다.

- ⭐️멀티 스레드를 지원한다.

 

 

 

 

🍀 서블릿과 싱글톤

- 서블릿 객체는 싱글톤으로 관리된다.

- request 객체와 response 객체는 HTTP 요청마다 달라지므로 그때그때 새로운 객체가 생성되지만, 서블릿 객체는 그럴 필요가 없으며, 매번 객체를 생성하게 되면 비효율적이다.

- 최초 로딩 시점에 서블릿 객체를 만들어두고, 재사용한다.

- 서블릿 컨테이너 종료시 같이 소멸된다.

 

 

 

 

 

🍀 스프링에서 서블릿을 등록하는 방법

스프링부트 프로젝트에서 HTTP 요청을 전달받아 처리하는 방법에는 여러가지가 있다.

  • web.xml 파일에서 직접 서블릿 등록 (Tomcat's Servlet Container)
  • @WebServlet 어노테이션 + HttpServlet 클래스 상속 + @ServletComponentScan (Spring Container, Bean)
  • @Controller or @RestController 어노테이션 (Spring Container, Bean)

 

 

 

 

다음 편에는 스프링 MVC의 서블릿 - 디스패처 서블릿에 대해서 이어서 다뤄보겠습니다.

 

 

 


참고한 블로그

https://velog.io/@ddangle/Spring-Servlet-%EA%B3%BC-Servlet-Container

 

[Spring] Servlet 과 Servlet Container

Servlet과 Servlet Container 에 대해 알아보자

velog.io

https://sh970901.tistory.com/111

 

서블릿(Servlet) VS 스프링(Spring)

처음 웹 서버는 정적인 요청에 대한 응답만 가능했다. 동적인 페이지를 만들기 위해 프로그램을 붙였고 대표적인 것이 서블릿이다. 초기에는 CGI 구현체를 활용했지만 요청마다 새로운 프로세스

sh970901.tistory.com