Servlet은 Java 웹 애플리케이션의 핵심 요소 중 하나로, 동적인 웹 컨텐츠를 생성하고 처리하는 Java 클래스입니다. Servlet은 클라이언트의 요청을 받아들이고, 서버 측에서 해당 요청을 처리하며, 그 결과를 클라이언트에게 반환합니다. 주로 HTTP 프로토콜을 기반으로 작동하며, 클라이언트의 요청에 따라 doGet(), doPost() 등의 메서드를 통해 처리됩니다.
++ 초기의 Servlet 설계는 다양한 프로토콜을 기반으로 통신할 수 있게 설계되었으나 웹 프로토콜이 HTTP프로토콜로 자리잡게 되며 HttpServlet을 기반으로 한 Servlet들이 사용 됨
Servlet의 생명주기는 초기화(init), 서비스(service), 소멸(destroy)의 세 가지 단계로 나누어집니다.
Servlet Container는 서블릿의 실행 환경을 제공하는 컨테이너입니다. 서블릿 컨테이너는 서블릿의 라이프사이클 관리, 요청-응답 관리, 멀티스레딩 지원 등의 기능을 담당합니다. 대표적인 서블릿 컨테이너로는 Apache Tomcat, Jetty 등이 있습니다.
++ Servlet들의 배치 정보를 Mapping해줌
컨텍스트 초기화(Context Initialization): 서블릿 컨테이너가 시작될 때, 웹 애플리케이션의 컨텍스트를 초기화합니다. 이 단계에서는 컨텍스트 초기화 리스너(Context Initialization Listener)가 실행될 수 있습니다. 이 리스너는 컨텍스트 초기화 이벤트에 대한 처리를 담당합니다.
필터 체인 실행(Filter Chain Execution): 클라이언트의 요청이 서블릿에 도달하기 전에 필터 체인이 실행됩니다. 필터는 클라이언트의 요청을 가로채고 수정하는 역할을 수행합니다. 필터는 서블릿 컨테이너의 생명주기와 관계없이 요청에 따라 실행됩니다(필터도 배치 정보에 따른 매핑).
++ filter 객체는 dofilter를 통해 호출 스택을 쌓음(--> 과도한 filter는 오버헤드)
서블릿 생명주기(Servlet Lifecycle): 클라이언트의 요청이 특정 서블릿에 도달하면 해당 서블릿의 생명주기가 시작됩니다. 서블릿 컨테이너는 서블릿의 초기화(init), 서비스(service), 소멸(destroy) 메서드를 호출하여 요청을 처리합니다.
컨텍스트 소멸(Context Destruction): 서블릿 컨테이너가 종료될 때, 웹 애플리케이션의 컨텍스트를 소멸시킵니다. 이 단계에서는 컨텍스트 소멸 리스너(Context Destruction Listener)가 실행될 수 있습니다. 이 리스너는 컨텍스트 소멸 이벤트에 대한 처리를 담당합니다.
이러한 과정을 통해 서블릿 컨테이너는 웹 애플리케이션의 실행 및 종료를 관리하고, 각각의 구성 요소들이 적절한 시점에 초기화되고 제거될 수 있도록 합니다. 각 구성 요소들은 서로 다른 생명주기를 갖고 있으며, 이를 통해 웹 애플리케이션의 동작을 제어하고 조정할 수 있습니다.
Listener....
Front Controller 패턴은 웹 애플리케이션의 진입점을 단일화하여 중앙 집중적으로 처리하는 디자인 패턴입니다. 모든 클라이언트 요청을 받아들이고, 요청에 대한 적절한 처리를 수행합니다. Front Controller는 주로 디스패처 서블릿(Dispatcher Servlet)으로 구현되며, 클라이언트 요청에 따라 적절한 핸들러(Handler)로 요청을 분배하고, 처리 결과를 클라이언트에게 반환합니다.
ApplicationContext는 스프링 프레임워크에서 제공하는 빈 컨테이너입니다. 빈 컨테이너는 스프링 애플리케이션의 객체를 생성하고 관리하며, 의존성 주입(Dependency Injection)을 통해 객체 간의 관계를 관리합니다. ApplicationContext는 XML, Java Config, Annotation 등의 방법을 통해 설정될 수 있으며, 스프링 애플리케이션의 주요 구성 요소 중 하나입니다.