Spring MVC의 핵심 중 하나인 DispatcherServlet은 웹 애플리케이션의 "중앙 제어자(Front Controller)" 역할을 합니다.
쉽게 말해, 모든 HTTP 요청을 받아서 어디로 보낼지 결정하고, 응답까지 책임지는 핵심 컴포넌트입니다.
✅ DispatcherServlet이란?
- Spring MVC의 핵심 컴포넌트
- 웹 애플리케이션의 Front Controller 패턴 구현체
- 모든 클라이언트 요청을 받아서 Controller, View, HandlerInterceptor 등으로 분배
📌 “Dispatcher” = 요청을 적절한 위치로 분배(dispatch) 하는 역할
✅ 동작 흐름 요약 (요청 → 응답)
1. 클라이언트 요청 (예: GET /users/1)
↓
2. DispatcherServlet이 요청 받음
↓
3. HandlerMapping → 어떤 Controller가 처리할지 찾음
↓
4. 해당 Controller 메서드 호출
↓
5. Controller가 결과(데이터 or 뷰 이름) 반환
↓
6. ViewResolver → View 결정 (JSP, Thymeleaf, JSON 등)
↓
7. 최종 View 렌더링 or JSON 응답
↓
8. 클라이언트에 응답 반환
✅ DispatcherServlet의 역할
역할 설명
| 🔁 요청 수신 | 모든 요청을 가로채고 처리 시작 (web.xml, Spring Boot는 자동 등록) |
| 🔍 핸들러 탐색 | HandlerMapping을 통해 요청에 맞는 Controller 찾기 |
| ⚙️ 요청 처리 | HandlerAdapter를 통해 Controller 메서드 실행 |
| 🔁 인터셉터 작동 | preHandle, postHandle, afterCompletion 호출 |
| 🔍 뷰 처리 | ViewResolver를 통해 어떤 화면(View)을 보여줄지 결정 |
| 📨 응답 전송 | 최종 결과를 HTTP 응답으로 클라이언트에 전달 |
✅ DispatcherServlet 흐름 그림
[Client] ──> [DispatcherServlet]
│
▼
[HandlerMapping] (어떤 컨트롤러?)
│
▼
[HandlerAdapter] (호출 방법 결정)
│
▼
[Controller] (비즈니스 로직)
│
▼
[ModelAndView] 반환
│
▼
[ViewResolver] (뷰 찾기)
│
▼
[View] (JSP, Thymeleaf 등)
│
▼
[Client 응답 반환]
✅ Spring Boot에서는 DispatcherServlet을 어떻게 등록하나요?
Spring Boot에서는 자동으로 등록됩니다.
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
application.properties로 URL 패턴 설정 가능:
spring.mvc.servlet.path=/api
✅ DispatcherServlet이 중요한 이유
이유 설명
| 모든 요청의 단일 진입점 | 보안, 로깅, 인증, 예외 처리 등 중앙 집중 관리 |
| 다양한 컴포넌트 연결 | Controller, Interceptor, View 등과 자동 연동 |
| 유연한 아키텍처 구현 가능 | REST API, 웹 페이지, 파일 다운로드 등 모두 가능 |
✅ DispatcherServlet 관련 컴포넌트 요약
컴포넌트 설명
| HandlerMapping | 어떤 Controller가 요청을 처리할지 결정 |
| HandlerAdapter | Controller를 호출할 수 있는 방법 제공 |
| ViewResolver | View 이름 → View 객체로 변환 |
| View | 최종 응답을 렌더링 (HTML, JSON 등) |
✅ 정리
항목 설명
| DispatcherServlet 역할 | 요청을 받아서 Controller로 전달하고, 응답을 조립해서 반환 |
| 위치 | Spring MVC의 중앙 허브 |
| 기술 패턴 | Front Controller 패턴 |
| 구성 요소 | HandlerMapping, HandlerAdapter, ViewResolver 등과 함께 동작 |
'탐구하기' 카테고리의 다른 글
| 인터셉터(Interceptor)와 필터(Filter) (1) | 2025.07.02 |
|---|---|
| @Controller와 @RestController의 차이점 (0) | 2025.07.01 |
| JPA와 MyBatis의 차이점 (0) | 2025.07.01 |
| JPA란 무엇일까? (0) | 2025.07.01 |
| MyBatis란 무엇일까? (0) | 2025.06.30 |