새소식

반응형
Spring/etc

[Spring] Dispatcher Servlet

  • -
반응형

대략적인 목차 

 

- Servlet이란

- 기존 Servlet 사용 시 문제점

- Dispatcher Servlet이란

- Dispatcher Servlet Context 계층 구조 


Servlet이란

Servlet은 간단하게 정의하면 아래와 같다

Web 기반의 요청에 대한 동적인 처리가 가능한 클래스
WebPage를 동적으로 생성하는 서버 측 프로그램
Client 요청에 의해 서버에서 실행되는 Java 프로그램 

 

기존 Servlet 사용 시 문제점

기존에는 요청 url당 servlet을 생성하고 그에 맞는 Controller에게 요청을 보내주는 코드를 각각 모두 작성해야 했다.

이러한 형태는 개발자가 서비스 로직 이외에 중복적인 작업을 해야 하는 불편함을 불러일으킨다.

Serlvet마다 Thread가 할당되어서, Servlet의 수가 증가하면 서버에 부하가 증가하는 구조이다.

또한 모든 Servlet에 대한 공통 로직( 인코딩 처리, 에러 페이지 처리..)을 각각의 서블릿에 모두 적용하기 까다롭다는 것이다.

//web.xml example
<servlet>
    <servlet-name>Hello_servlet</servlet-name>// servlet name은 class를 부르는 이름.
    <servlet-class>Hello.Hello_servlet</servlet-class>// servlet class
</servlet>
<servlet-mapping>
    <servlet-name>Hello_servlet</servlet-name>
    <url-pattern>/Hello</url-pattern>
</servlet-mapping>

출처 : https://ahea.wordpress.com/2018/05/11/spring-%EC%96%B4%EB%94%94%EA%B9%8C%EC%A7%80-%EA%B9%8C%EB%B4%A4%EB%8B%88-%EB%B0%B0%EA%B2%BD%EC%A7%80%EC%8B%9D-%EC%9E%91%EC%84%B1%EC%A4%91/

Dispatcher Servlet

Spring에서 Front Controller Pattern을 취하는 Servlet

Front Controller Pattern :
서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러를 가지는 패턴 

출처:  https://stellan.tistory.com/entry/MVC-Front-Controller-패턴  [NGenius]

이러한 형태의 Dispatcher Servlet을 두는 것의 장점으로는 

URL마다 생성해야하는 Servlet이 사라지고, web.xml 파일의 관리가 편해졌다

Front Controller를 통해 모든 요청이 들어오므로 모든 요청에 대한 공통 작업을 한 곳에서 처리할 수 있다

 

정리하면 Dispatcher Servlet은 

기존에 각 url마다 존재하던 servlet을 모두 통합하는 Front Controller 패턴을 취하는 하나의 Servlet 

( Servlet이 통합되었다는것 이외에도 다양한 동작을 수행하는 장점이 있다//TODO)

 

 

Context 계층 구조

Dispatcher Servlet은 일반적으로 계층 구조를 갖습니다.

대부분의 애플리케이션은 단일 DispatcherServlet, 단일 WebApplicationContext를 갖는 간단한 스타일로 만듭니다.

출처: https://docs.spring.io/spring-framework/docs/current/reference/html/web.html

WebApplicationContext 루트 컨텍스트

  • 모든 서블릿이 공유할 수 있는 Service, Repository와 같은 스프링 빈을 구성

DispatcherServlet 자식 컨텍스트 

  • 요청에 대응할 수 있는 Controller, ViewResolver, HandlerMapping과 같은 스프링 빈(Beans)을 구성

대부분의 경우 스프링 애플리케이션에 하나의 Dispatcher Servlet을 가지지만, 

Dispatcher Servlet을 여러 개 가지고 있는 케이스도 존재한다.

그렇기 때문에 모든 Dispatcher Servlet에서 공유하는 Bean은 Root에 두고 

그 이외에 것들을 각 Dispatcher Servlet이 가지고 있는 구조로 만들어 두었다고 한다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.