Create by. ChatGPT
Spring MVC에서 DispatcherServlet은 모든 HTTP 요청을 가장 먼저 받아
적절한 컨트롤러와 뷰로 전달해주는 프론트 컨트롤러(Front Controller) 입니다.
한 문장 요약
DispatcherServlet은 Spring 웹 애플리케이션에서 모든 요청의 흐름을 제어하는 중앙 관문이다.
DispatcherServlet이란?
DispatcherServlet은 Spring MVC의 핵심 컴포넌트로,
클라이언트의 HTTP 요청을 직접 처리하지 않고 요청 처리 전체 흐름을 조율합니다.
즉, DispatcherServlet의 역할은 다음과 같습니다.
- 어떤 컨트롤러가 요청을 처리할지 결정
- 컨트롤러 실행 결과를 어떤 뷰로 보여줄지 연결
- 요청 처리 과정 전반을 중앙에서 관리
왜 DispatcherServlet이 필요한가?
DispatcherServlet이 없다면 개발자는 다음 작업을 모두 직접 구현해야 합니다.
- URL과 컨트롤러 매핑
- 요청 분기 처리
- 공통 예외 처리
- 뷰 선택 로직
DispatcherServlet은 이러한 공통 처리를 한 곳에 모아
개발자가 비즈니스 로직에만 집중할 수 있도록 도와줍니다.
요청 처리 흐름 (Step by Step)
- 클라이언트가 요청을 보냄
GET /hello - DispatcherServlet이 요청을 가장 먼저 받음
- HandlerMapping을 통해
/hello를 처리할 Controller를 찾음 - Controller 실행
- 비즈니스 로직 처리
- Model과 View 이름 반환
- ViewResolver가
View 이름을 실제 템플릿 파일로 변환
(예:hello→templates/hello.html) - 최종 HTML 응답을 클라이언트에 반환
요청 흐름을 단순화하면 다음과 같습니다.
Client
↓
DispatcherServlet
↓
Controller
↓
View (HTML)
DispatcherServlet이 하지 않는 일
DispatcherServlet은 다음 작업을 직접 수행하지 않습니다.
- 비즈니스 로직 처리
- 데이터베이스 접근
- HTML 직접 생성
DispatcherServlet은 오직 요청 흐름 제어에만 집중합니다.
에러 로그에 DispatcherServlet이 자주 등장하는 이유
Spring 웹 애플리케이션에서 자주 보이는 에러 메시지입니다.
Servlet.service() for servlet [dispatcherServlet] threw exception
이 메시지의 의미는 다음과 같습니다.
- 요청은 DispatcherServlet까지 정상적으로 도달
- 이후 단계(Controller, View 처리 과정)에서 에러 발생
즉, DispatcherServlet 자체가 문제라기보다는
그 이후 로직에서 문제가 발생했음을 의미합니다.
대표적인 원인
- URL 매핑 오류 (
@GetMapping,@PostMapping불일치) - 존재하지 않는 View 이름 반환
- Thymeleaf 템플릿 파일 누락
- Model에 없는 값을 템플릿에서 참조
Spring Boot에서 DispatcherServlet
Spring Boot 환경에서는 DispatcherServlet이 다음과 같이 동작합니다.
- 자동으로 등록됨
- 별도 설정이 필요 없음
- 기본 설정으로 대부분의 웹 요청을 처리 가능
즉, 개발자는 DispatcherServlet을 직접 생성하거나
설정 파일에서 등록할 필요가 없습니다.
DispatcherServlet과 Controller의 관계
| 구분 | DispatcherServlet | Controller |
|---|---|---|
| 역할 | 요청 흐름 제어 | 비즈니스 로직 처리 |
| 요청 최초 수신 | O | X |
| 응답 생성 | 간접적 | 직접 |
| 개발자가 구현 | X | O |
핵심 포인트 정리
- DispatcherServlet은 Spring MVC의 입구
- 모든 HTTP 요청은 반드시 DispatcherServlet을 거친다
- 컨트롤러와 뷰를 연결하는 중앙 허브
- Spring MVC 구조 이해의 출발점
마무리
Spring MVC를 제대로 이해하려면
DispatcherServlet의 역할부터 명확히 이해해야 한다.