본문 바로가기

Develop/Spring

[Spring] Servlet관련 기본 개념

반응형

들어가면서

Spring 공부를 처음 시작하면 servlet의 개념에 대해서 매우 간단하게 배운 후 넘어가게 됩니다. 그러나 계속 공부하다보면 모든 요청, 응답이 servlet으로 동작하는 것을 알게 되고 이에 대한 자세한 이해가 요구됩니다.

이번 포스트에서는 servlet과 관련된 개념들에 대해 이해하고자 합니다.

개념

Servlet

Servlet의 docs를 보도록 합시다. 간단하게 요약하면 servlet은
web server에서 웹 클라이언트의 요청을 받고 처리(응답)하는 작은 자바 프로그램입니다. 이때 대부분 HTTP를 사용합니다. 그렇기 때문에 interface인 servlet의 구현체로 HttpServlet이 있는 것이죠.

servlet의 인터페이스는 life-cycle methods가 정의되어 있습니다.

  1. init: servlet을 생성 -> 초기화합니다.
  2. service: 들어온 요청을 보고, 그에 대해 알맞은 처리가 이루어집니다. docs를 보면 쉽게 알 수 있지만, request에 알맞은 doXXX (ex. doGet, doPost, ...) methods로 보내(dispatch) 요청에 응답하도록 합니다.
  3. destory: service가 끝나고 나면, destroy 매소드를 통해서 삭제됩니다.

정리해보자면, 웹 클라이언트로부터 요청이 들어오면, 서블릿이 생성돼서 요청에 맞는 처리를 하고 삭제되는 객체라고 생각할 수 있을 것 같습니다.

Servlet Container

Servlet docs에서 methods 부분을 읽다보면 공통적으로 등장하는 말이 있습니다. "Called by the servlet container ..." 이란 표현입니다. servlet의 세 매소드 모두 servlet container에 의해 사용된다는 것을 알 수 있습니다. 뭔가 서블릿 컨테이너라는 놈이 servlet을 관리하는 놈일 것 같다는 예상이 자연스럽게 들게 됩니다.

Servlet container란 웹 서버와의 통신 지원, 서블릿 생명주기 관리, 멀티쓰레드 지원 및 관리 선언적인 보안 관리를 해줍니다. 정리 도중 매우 잘 정리되어 있는 포스팅을 발견하여 래퍼런스를 걸어둡니다. 이곳에서 사용하는 이미지들이 이해하기 쉽게 도와줘서 참고하시는 것을 추천드립니다.

결국에 톰캣과 같은 Servlet Container는 웹 서버와 통신을 합니다. 이때 소켓을 만들어 통신하며 JSP(Java Server Page)와 Servlet이 작동할 수 있는 환경을 제공합니다.

서블릿 컨테이너의 가장 중요한 기능은 요청을 올바른 서블릿에 전달해서 처리되도록 하고, JVM이 해당 요청을 처리한 후에는 생성된 결과를 올바른 장소에 동적으로 반환해주는 것이다.

ref

[참고자료]

반응형