[Spring] DispatcherServlet ( feat. ApplicationContext, WebApplicationContext )

Woo Yong·2024년 1월 22일
0

Spring

목록 보기
14/15
post-thumbnail

이전 글에서는 ApplicationContext가 어떠한 역할을 수행하고, xml방식과 어노테이션을 이용하여 초기화하는 방법에 대해 알아보았다.

이번 글에서는 Spring MVC와 연동하기 위해 DispatcherServlet에 대해 알아보려고한다.

DispatcherServlet

DispatcherServlet은 웹 애플리케이션의 Front Controller로서, 클라이언트로부터 들어오는 모든 요청을 받아들이고 처리하는 역할을 담당한다.

이때, DispatcherServlet은 SpringMVC 설정에 따라 적절한 컨트롤러에게 요청을 전달하고, 뷰를 렌더링하여 응답합니다.

이전 글에서 ContextLoaderListener를 통해 웹 애플리케이션이 시작되면 ApplicationContext 생성되어사 초기화가 이루어지고, 모든 서블릿이 접근할 수 있도록 바인딩한다고 하였다.

그리고 이러한 ApplicationContext를 가지는 것이 바로 DispatcherServlet이다.

하지만, 정확히 말하면 DispatcherServlet이 가지는 것은 WebApplicationContext이다 .

생각을 해보면 Spring MVC는 애플리케이션에서 전체 애플리케이션의 컨텍스트가 아니다.
특정 웹 요청에 대한 컨텍스트만 가지고 있어야한다.

왜냐하면, Spring MVC는 웹 요청을 처리하는 핵심 컴포넌트이기 때문이다.

따라서 각 웹 요청에 대한 별도의 WebApplicationContext를 유지함으로써 다중 클라이언트 요청 간 Bean들이 서로 영향을 미치지 않도록 합니다.

그렇기 때문에 WebApplicationContext는 주로 ContextLoaderListener나 자바 설정 클래스에서 설정한 ApplicationContext를 부모로 가지며, 필요에 따라 Servlet마다 별도로 생성될 수 있습니다.
이러한 WebApplicationContext는 해당 서블릿에 속하는 Controller, View Resolver, Handler Mapping 등과 관련된 빈들을 관리합니다.

ApplicationContext vs WebApplicationContext

DispatcherServlet에 대해 학습하면서 WebApplicationContextApplicationContext가 헷갈려서 정리해보고자 한다.

WebApplicationContextApplicationContext는 스프링에서 사용되는 두 가지 주요 컨텍스트 인터페이스이다.

이 두 인터페이스는 상속 관계에 있며, WebApplicationContext(자식)ApplicationContext(부모)를 확장한 것이다.

즉, WebApplicationContextApplicationContext에 정의된 모든 기능을 포함하면서 웹 애플리케이션에서 필요한 웹 관련 기능을 추가로 제공합니다.

그리고 ApplicationContext는 애플리케이션 전반에 걸쳐 싱글톤 빈, 프로토타입 빈 등을 관리하고, 빈의 라이프 사이클을 관리합니다.

하지만 WebApplicationContext는 스프링 웹 애플리케이션에서 사용되며, 스프링 MVC와 같은 웹 프레임워크에서 사용됩니다.
그리고 WebApplicationContextDispatcherServlet을 통해 생성되고 초기화 됩니다.

  1. 웹 애플리케이션 시작 시 ContextLoaderListener가 Root Application Context를 초기화합니다.
  2. ContextLoaderListnerDispatcherServlet을 초기화하면서 DispatcherServlet이 사용할 WebApplicationContext를 생성하고 설정합니다.
  3. DispatcherServlet은 클라이언트의 요청을 처리하며, 해당 요청에 대한 WebApplicationContext를 사용하여 웹 관련 Bean들을 관리합니다.

이처럼 루트 애플리케이션 컨텍스트와 서블릿마다 별도의 WebApplicationContext를 가질 수 있고, 각각의 DispatcherServlet은 웹 관련 빈들을 독립적으로 관리할 수 있습니다.

요약하면, ApplicationContext는 일반적인 스프링 애플리케이션의 컨텍스트를 나타내며, WebApplicationContext는 웹 애플리케이션에서 사용되는 특수한 유형의 컨텍스트입니다. WebApplicationContext는 주로 웹 애플리케이션의 생명주기와 관련된 초기화 및 종료 시점에 사용되며, 서블릿 컨텍스트의 생명주기에 따라 유지되고 소멸됩니다.

profile
Back-End Developer

0개의 댓글