저는 수년동안 Spring 프레임워크를 이용해서 웹 애플리케이션을 개발해 왔습니다. 그러나 어느날 서블리컨테이너에 대해서 설명하려고 보니 말문이 막히는 제 자신을 발견하게 되었습니다. 그리고 혼자서 곰곰히 서블릿컨테이너에 대하여 정리해 보았습니다. 막상 정리하고 보니, 생각보다 간단하게 서블릿컨테이너의 개념에 대해서 간략히 설명할 수 있게 되었습니다.
이 포스트는 저처럼 오랜시간 동안 서블릿컨테이너를 사용해왔으나 비즈니스로직 구현에 고민하느라, 현재 내가 사용하고 있는 서블릿컨테이너에 대해서 깊이 고민하지 못했던 분들을 위해서 작성하였습니다.
서블릿은 SUN사에서 제안한 웹서비스를 위한 인터페이스로, 원칙적으로는 javax.servlet.Servlet 인터페이스의 구현체입니다. 일반적인 자바 독립 실행프로그램과 달리 main 메서드가 없으며, 서블릿 컨테이너에 등록된 후 서블릿 컨테이너에 의해 생성, 호출, 소멸이 이루어집니다.
서블릿 컨테이너는 이러한 서블릿을 관리하며 네크워크 통신, 서블릿의 생명주기 관리, 스레드 기반의 병렬처리를 대행합니다. 즉, 웹 클라이언트로 부터 HTTP 요청이 전달되면 해당 HTTP 요청을 해석하여 적정한 서블릿의 service 메서드를 ServletRequet, ServletResponse 매개변수와 함께 호출합니다.
GenericServlet은 service 메서드를 제외한 나머지 Servlet 인터페이스의 메서드를 구현해 놓은 abstract 클래스입니다. 이 클래스를 상속받아 실제 Http request 처리에 필요한 service 메서드를 구현해 놓은 것이 바로 HttpServlet 입니다.
참고로, 우리가 자주 접하였던 Spring framework 의 DispatcherServlet 은 아래와 그림과 같은 계층구조를 가지고 있습니다.
참고 : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF
출처 : http://guruble.com/about-servlet/