본문 바로가기
Spring

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

by 민죠미 2022. 7. 28.

서블릿(Servlet) 이란?

서블릿(Servlet)이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다.

서블릿을 사용하는 이유

회원의 이름과 나이를 DB에 저장하는 간단한 WAS를 예로 들어보자.

// 웹 브라우저가 생성한 요청 HTTP 메시지 - 회원 저장
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
username=kim&age=20
// 서버에서 HTTP 응답 메시지 생성
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
 <body>...</body>
</html>

위와 같은 작업을 수행할 때 서버에서 처리해야 하는 업무는 다음과 같다.

  1. 서버 TCP/IP 연결 대기, 소켓 연결
  2. HTTP 요청 메시지를 파싱해서 읽기
  3. POST 방식, /save URL 인지
  4. Content-Type 확인
  5. HTTP 메시지 바디 내용 피싱
    • username, age 데이터를 사용할 수 있게 파싱
  6. 저장 프로세스 실행
  7. 비즈니스 로직 실행
    • 데이터베이스에 저장 요청
  8. HTTP 응답 메시지 생성 시작
    • HTTP 시작 라인 생성
    • Header 생성
    • 메시지 바디에 HTML 생성에서 입력
  9. TCP/IP에 응답 전달, 소켓 종료

서블릿을 사용하지 않을 경우 1~9 단계를 모두 구현하여야한다. 하지만 실질적으로 의미있는 비즈니스 로직은 7번 뿐인데, 서블릿을 사용할 경우 7번만을 구현하면 된다.

서블릿의 주요 특징

  • 클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • 기존의 정적 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공
  • JAVA의 스레드를 이용하여 동작
  • MVC 패턴에서 컨트롤러로 이용됨
  • 컨테이너에서 실행
  • 보안 기능을 적용하기 쉬움

서블릿의 동작

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet{
        @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
        //애플리케이션 로직
    }
}
  • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
    • HTTP 서블릿을 통해 요청 정보를 제공하기 위한 인터페이스. ServletRequest 인터페이스를 상속(extends) 했다.
  • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
    • 응답을 HTTP 스펙에 맞춰 제공하기 위한 인터페이스. ServletResponse 인터페이스를 상속(extends) 했다. HTTP 헤더와 쿠키에 접근하는 메서드가 포함되어 있다.
  • 서블릿 컨테이너는 HttpServletRequest , HttpServletResponse 객체를 생성하여 서블릿의 service 메서드(ex. doGet, doPost)의 argument로 넘긴다.

동작 순서

  1. 클라이언트 요청
  2. HttpServletRequest, HttpServletResponse 객체 생성
  3. Web.xml이 어느 서블릿에 대해 요청한 것인지 탐색
  4. 해당하는 서블릿에서 service() 메소드 호출
  5. doGet() 또는 doPost() 호출
  6. 동적 페이지 생성 후 ServletResponse 객체에 응답 전송
  7. HttpServletRequest, HttpServletResponse 객체 소멸

서블릿 컨테이너

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
  • 서블릿 객체는 싱글톤으로 관리
    • 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율
    • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
    • 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
    • 공유 변수 사용 주의
    • 서블릿 컨테이너 종료시 함께 종료
  • JSP도 서블릿으로 변환 되어서 사용
  • 동시 요청을 위한 멀티 쓰레드 처리 지원

Reference

https://velog.io/@falling_star3/Tomcat-서블릿Servlet이란

댓글