작지만 꾸준한 반복

Dispatcher Servlet은 뭐하는 놈일까? 본문

공부기록/Spring

Dispatcher Servlet은 뭐하는 놈일까?

iamjooon2 2023. 4. 23. 20:23

Spring MVC 구조를 공부하고 있었다.

 

 

위와 같은 구조로, Dispatcher Servlet이란 놈이 중심이 되어 일을 하고 있었다.

열정맨 디스패쳐 서블렛... 이놈은 대체 무슨 놈일지 궁금해서 찾아본 것을 정리해보려 한다.

 

1. Servlet은 뭘까?

Dispatcher Servlet에 대해 알기 전에, Servlet부터 알아보자.

Dispathcer는 '보내다, 파견하다'라는 뜻을 가지고 있다. 그럼 Servlet은 뭘까?

 

자바 서블릿은, 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다.
흔히 서블릿이라고 부른다. 출처: 위키백과

 

본명은 Java Servelt이고, 자바에서 HTTP 기술을 사용하기 위해 쓰는 놈이다

 

2. Dispatcher Servlet, 어떻게 일하니?

어떻게 동작하는지 알아보기 전에, Front Controller라는 패턴부터 살펴보자.

 

 

Front Controlelr 패턴

Front Controller는 주로 Servlet 엔진의 제일 앞단에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러로써, MVC 구조에서 함께 사용되는 디자인 패턴이다. 출처 : 위키백과

 

일종의 클라이언트가 사용하는 서버의 인터페이스라고 볼 수 있겠다.

 

갑자기 분위기 Front Controller?

 

스프링이 이 Front Controller 패턴을 사용하고, 이를 Dispatcher Servlet이 맡기 때문이다.

Front Controller처럼, Dispatcher Servlet은 직접 일하지 않는다.

적절한 핸들러에게 요청을 위임하고, 해당 핸들러의 실행 결과를 응답 형태로 반환한다.

 

Dispatcher Servlet 동작 과정

 

각 동작 과정은 다음과 같다

 

1. 클라이언트의 요청을 디스패처 서블릿이 받는다

2. 요청 정보를 통해 요청을 위임할 컨트롤러를 찾는다(핸들러 매퍼에게 위임한다)

3. 요청을 컨트롤러로 위임할 핸들러 어댑터를 찾아서 전달한다

4. 핸들러 어댑터가 컨트롤러로 요청을 위임한다

5. 비즈니스 로직을 처리한다.

6. 컨트롤러가 값을 반환한다

7. 핸들러 어댑터가 반환값을 처리한다

8. 서버의 응답을 클라이언트로 반환한다

 

3. Dispatcher servlet, 그래서 왜?

초기의 Spring MVC는 모든 서블릿을 URL 매핑을 위해, web.xml이라는 파일에 전부 등록해주어야 했다고 한다.

하지만 dispatcher servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주고, 공통 작업을 처리하면서

URL 매핑 과정이 상당히 편리해졌다고 한다.

 

공통 작업?

 

모든 웹 요청이 들어올 때마다 일일히 매핑한다면... 작성해야할 코드가 늘어날 것이고, 중복 코드가 늘어날 것이다.

우리는 개발자다. 중복되는 부분이 있으면 불편함을 느껴야 한다.

공통되는 HTTP를 웹 요청 응답을 공통적으로 처리하여, 코드의 중복성을 줄이고 유지보수를 간편하게 만들 수 있다.

프레임워크의 본질인 반복은 공통으로 처리하는 곳에서 구현하고, 개발자는 비즈니스 로직에 집중하기 위함과 같다고 생각한다.

 

 

 

레퍼런스

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:ptl:spring_mvc_architecture

https://mangkyu.tistory.com/18

https://tecoble.techcourse.co.kr/post/2021-06-25-dispatcherservlet-part-1/

https://docs.spring.io/spring-framework/docs/3.0.0.M4/spring-framework-reference/html/ch15s02.html