본문 바로가기
추가 공부/개념학습

서블릿(Servlet) 개념과 특징

by shyun00 2023. 4. 3.

서블릿(Servlet)

자바 코드를 작성하다 보면 종종 마주하게되는 서블릿(Servlet)이 있다. 과연 서블릿이란 무엇일까?

 

서블릿이란 자바를 사용해 웹페이지를 생성하는 서버측 프로그램, 혹은 그 사양을 의미한다. 

즉, 클라이언트가 요청을 하면 그에 대한 결과를 다시 전송해주는 역할을 하는 클래스를 말한다.

 

서블릿은 Java EE*에 포함된 스펙 중 하나로 자바에서 HTTP 요청과 응답을 처리하기 위한 내용을 담는다.

일반적으로 웹서버는 정적인 페이지를 제공하는데, 동적인 페이지 제공을 위해서는 다른곳에서 필요한 정보를 가져와야한다.

이 때 동적인 페이지 정보를 가져올 수 있도록 도와주는 애플리케이션이 서블릿이이다.

[Servlet 동작 방식]

출처: https://mangkyu.tistory.com/14

1. 클라이언트가 요청 보내면 Servlet Container로 HTTP Request가 전송됨

2. Servlet Container가 HttpServletRequest, HttpServletResponse 객체를 생성함

3. 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 검색함

4. 타겟 서블릿에서 해당하는 메서드(service) 호출한 뒤 HTTP 요청에 따른 동작을 수행함(ex. Post, Get 등)

5. post, get 메소드를 통해 동적 페이지 생성 후 HttpServletResponse 객체에 응답을 보냄

6. 응답이 종료되면 HttpServletRequest, HttpServletResponse 객체를 소멸시킴

 

위 과정에서 언급되는것이 Servlet Container이다.

Servlet Container는 Web Container라고도 불리며 서블릿의 생명주기를 관리하고 URL과 특정 서블릿을 매핑하는 역할을 한다.

클라이언트의 요청을 받고 응답할 수 있도록 웹서버와 소켓으로 통신한다. 대표적으로 톰캣(Tomcat)이 있다.

[Servlet 생명주기]

서블릿의 생명 주기는 초기화(initialize), 서비스(service), 소멸(destroy)의 세단계로 구성된다.

일반적으로 웹 애플리케이션은 HTTP 프로토콜을 기반으로하므로 추상클래스인 HttpServlet을 상속받아서 만들게 된다. 

출처: https://mangkyu.tistory.com/14

1. 초기화: 클라이언트 요청이 들어오면 해당 서블릿이 메모리에 있는지 확인하고, 없을 경우 init() 메서드를 호출해 적재한다.

2. 서비스: 클라이언트 요청에 따라서 service() 메서드를 통해서 요청에 맞는 동작을 수행한다.

3. 소멸: 컨테이너가 서블릿에 종료 요청을 하거나 런타임 오류가 발생하면 서블릿이 언로드 된다.

[DispatcherServlet]

우리가 쉽게 접할 수 있는 서블릿으로 DispatcherServlet이 있다. Spring MVC(API 계층)에서 언급했던 내용이다.

DispatcherServlet도 HttpServlet 을 상속받은 클래스로 클라이언트의 요청을 받고 적합한 응답을 리턴해준다.

참고: 2023.04.11 - [부트캠프 개발일기/Spring MVC] - 부트캠프 41일차 - Spring MVC(API 계층)

 

부트캠프 41일차 - Spring MVC(API 계층)

Sping MVC Spring 모듈 중 웹 계층을 담당하는 모듈이 있다. 그 중 Servlet API를 기반으로 클라이언트 요청 처리하는 모듈을 spring-webmvc라고 한다. 이를 줄여서 Spring MVC라고 한다. * 서블릿(Servlet): 클라이

shyun00.tistory.com

 

실제로 현재 구현중인 커피 주문 애플리케이션을 실행하고 Coffee 메뉴 Post 요청을 하면,

아래와 같이 DispatcherServlet이 호출되는것을 볼 수 있다.

별도로 설정을 하지 않았는데도 DispatcherServlet 이 설정되는 이유는 스프링 부트의 자동 설정기능때문이다.

스프링 부트의 spring-boot-starter-web 의존성을 추가하면 웹 애플리케이션 개발을 위한 여러가지 설정이 자동으로 추가된다.

따라서 클라이언트로부터 요청이 왔을 때 자동으로 생성된 DispatcherServlet이 요청을 받고, 적절한 응답을 할 수 있도록 해준다.

 

* 개인 학습용 기록입니다. 잘못된 부분이나 추가가 필요한 부분이 있다면 편하게 말씀해주세요 :)

 

참고자료

자바 서블릿

웹 컨테이너

도서: 스프링부트로 배우는 자바 웹개발(저자: 윤석진, 출판사: 주식회사 제이펍)