서블릿(Servlet)이란

enjoy89·2022년 6월 21일
3
post-thumbnail
post-custom-banner

서블릿(Servlet)

  • 웹 페이지의 동적 컨텐츠를 제공할 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
  • 웹 페이지에서 클라이언트의 다양한 요청(Request)응답(Response)을 개발자가 일일이 처리하면 굉장히 힘들어질테니 Servlet이 역할을 대신하여 간단한 메서드 호출만으로 이를 체계적으로 다룰 수 있게 해준다.
  • 예를 들어 사용자가 웹 사이트에 로그인을 하려고 할 때, 사용자는 아이디와 비밀번호를 입력하고 로그인 버튼을 누른다. 이때 서버는 클라이언트의 아이디와 비밀번호의 정보를 확인하고, 다음 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는 것이 바로 서블릿이다.
  • 즉, 서블릿은 자바를 사용하여 동적인 웹 서비스를 만들기 위해 필요한 프로그램이다.

서블릿(Servlet) 특징

  • 클라이언트의 요청(Request)에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
  • HTML을 사용하여 요청에 응답(Response)
  • Java Thread를 이용하여 동작
  • MVC 패턴에서 Controller로 이용된다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.

서블릿 컨테이너(Servlet Container)

  • 서블릿을 담고 관리해주는 컨테이너이다.
  • 클라이언트에서 요청을 보내면 서블릿 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성하며 GET, POST 여부에 따라 동적인 웹 페이지를 생성한 후 응답을 보낸다.

HttpServletRequest

  • HTTP 프로토콜의 요청 정보를 서블릿에게 전달하기 위한 목적으로 사용한다.
  • 헤더 정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메서드와 Body의 Stream을 읽어 들이는 메서드를 가지고 있다.

HttpServletResponse

  • 해당 클라이언트에게 응답을 보내기 위한 객체를 생성하여 서블릿에게 전달한다.
  • 이 객체를 활용하여 Content type, 응답 코드, 응답 메시지 등을 전송한다.

서블릿 컨테이너(Servlet Container)의 역할

  • 웹 서버와의 통신 지원
    • 웹 서버와의 통신을 할 때 소켓을 만들고, listen, accept 등의 과정을 서블릿 컨테이너가 API로 제공하여 복잡한 과정은 생략하고 서블릿과 웹 서버가 쉽게 통신할 수 있도록 해준다.
    • 이를 통해 개발자는 비즈니스 로직에만 더욱 집중할 수 있게 된다.
  • 서블릿 생명주기 관리
    • 서블릿 컨테이너가 기동되는 순간 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 호출한다.
    • 서블릿이 생명을 다 한 순간에는 Garbage Collection을 진행하여 알아서 메모리에서 지워준다.
  • 멀티스레드 지원 및 관리
    • 서블릿이 동시에 여러 요청이 들어와도 멀티스레드로 동시다발적인 작업을 관리할 수 있다.
  • 선언적인 보안 관리
    • 서블릿 또는 자바 클래스 안에 보안 관련된 메서드를 구현하지 않아도된다.

서블릿 생명주기(Servlet LifeCycle) 메서드

  • init()
    • 서블릿을 초기화하며 처음에 한 번만 실행된다.
  • service()
    • 요청(Request)응답(Response)을 처리하며 요청이 GET인지 POST인지 구분하여 doGet() 또는 doPost()로 분기된다.
  • destroy()
    • 서블릿을 종료할 때 한 번만 실행된다.

서블릿(Servlet) 동작 과정

  1. 클라이언트가 URL을 입력하면 HTTP Request가 서블릿 컨테이너로 전송한다.
  2. 요청을 받은 컨테이너는 HttpServletRequest, HttpServletResponse 두 객체를 생성하고 서블릿 분석 파일인 web.xml 을 참고하여 어느 서블릿에 대한 요청인지 찾는다.
  3. 해당 서블릿에서 service 메서드를 호출한 후 클라이언트의 GET, POST 여부에 따라 doGet() 또는 doPost() 를 호출하여 동적인 웹 페이지를 생성한 후 응답을 보낸다.
  • 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.

Reference

https://mangkyu.tistory.com/14

https://kadosholy.tistory.com/47

profile
Backend Developer 💻 😺
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 12월 4일

글에 감동을 받았습니다.

답글 달기