Dispatcher Servlet 이란?
Dispatcher Servlet에서 dispatch는 "보내다" 라는 사전적 의미를 가지고 있습니다.
본격적으로 Dispatcher Servlet에 대해 설명하기 앞서 FrontController 패턴의 개념을 살펴보고 가겠습니다.
1. FrontController 패턴 이란?
우리는 사용자의 요청을 Servlet에게 전달하기 위해 web.xml
에 servlet을 등록하고 mapping하는 과정이 필요합니다. 하지만 수 많은 요청이 필요한 경우 계속해서 이 작업을 필요로 하기 때문에 이 점을 해소하고자 FrontController 패턴이 생겨났습니다.
Front Controller 패턴
Front Controller는 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서
처리해주는 컨트롤러이며, MVC 구조에서 함께 사용되는 패턴이다.
1.1 기존의 Servlet
기존의 방식은 요청 url당 servlet을 생성하고 해당 Controller에게 요청을 보내는 코드를 따로 작성해야 했습니다.
1.2 Front Controller 패턴 적용
위 구조와 같이 FrontController 패턴을 적용하게 되면 하나의 Servlet에서 요청을 받아들여 적절한 Controller로 요청을 위임합니다.
이렇게 FrontController 패턴을 적용하면 한 곳에서 모든 사용자의 요청을 컨트롤할 수 있기 때문에 기본적으로 사용자의 모든 요청에 대해 인코딩처리, 에러페이지 처리, 공지 등에 대한 처리를 한 곳에서 처리할 수 있습니다.
2. Dispatcher Servlet
위에서 설명한 FrontController 패턴을 취하는 구조를 Spring Framework에서는 Dispatcher Servlet이라는 것으로 만들어 두었습니다.
2.1 Dispatcher Servlet 의 역할
모든 요청을 한 곳에서 받아서 필요한 처리를 한 뒤, 요청에 맞는 handler로 요청을 Dispatch하고, 해당 Handler의 실행 결과를 Http Response형태로 만드는 역할을 합니다.
2.2 Dispatcher Servlet의 흐름
위에서 Servlet 대신 Dispatcher Servlet이라는 Servlet이 사용자의 모든 요청을 받아 여러 작업을 거친 뒤 Controller에게 역할을 위임합니다.
Spring은 유연하고 다양한 설계를 위해 이런 구조를 채택했고 개발자는 Dispatcher Servlet에 붙어있는 Handler Mapping, Handler Adapter 등을 설정하여 요청 받았을 때 어떻게 동작할 것인지 정해줄 수 있습니다. (web.xml)
[요청받았을 때 거치는 순서]
1. Handler Mapping - 요청받은 URL에 해당하는 Controller 검색 / 결정 역할
2. Handler Adapter - 결정된 Controller의 메서드 호출 역할
3. Controller, Service, Repository - DB 데이터 Model에 저장 및 view이름 결정하여 전달
4. View Resolver - 어떤 종류의 view(jsp, html 등)를 사용할 것인지 선택 & 사용할 view 선택 역할
위와 같은 단계를 거쳐 사용자에게 응답하며, 중요한 것은 각각의 단계를 설정할 수 있기 때문에 유연하게 프로그래밍이 가능하다는 장점이 있습니다.
'Programming > Spring' 카테고리의 다른 글
[Spring] Mybatis - foreach 사용법 및 예제 / 동적 반복 sql 처리 (0) | 2022.06.26 |
---|---|
[JPA] findBy를 이용한 쿼리 메소드 작성하기(조건처리, like구문 처리) (0) | 2022.02.02 |
[Spring] RestController, ResponseEntity란? (Controller와 RestController의 차이점 포함) (0) | 2021.05.24 |
[Spring] Ioc 컨테이너 - DL(Dependency Lookup) 과 DI(Dependency Injection) (2) | 2021.05.19 |
[Spring] Ajax 활용하여 로그인 처리 (JSON데이터, 로그인 Session 관리) (1) | 2021.03.18 |