DispatcherServlet은javax.servlet.http.HttpServlet을 상속한 클래스로서, Spring MVC의 핵심 프론트 컨트롤러 역할을 수행하는 클래스이다.
클라이언트의 모든 요청을 중앙에서 받아 적절한 컨트롤러로 전달하고, 처리 결과를 View로 연결해주는 역할을 한다.
@SpringBootApplication에 의해 자동으로 등록되며, 기본 URL패턴인/에 매핑 된다.
DispatcherServlet은 기존 서블릿 기반 웹 애플리케이션 개발의 비효율성과 복잡성을 해결하기 위해 도입되었다.
1. 요청 처리 방식의 중복과 비효율성
과거 서블릿 기반의 개발방식에서는 요청을 처리하기 위해 매번 HttpServlet을 상속받아 doGet()이나 doPost() 메서드를 오버라이드해야 했다. 각 URL마다 서블릿을 하나씩 매핑해야 했기 때문에 구조가 점점 복잡해지고, 공통된 처리 로직이 여러 서블릿에 반복되는 문제가 발생했다.
2. 공통 기능 중복 문제
로그인 여부 확인, 요청 인코딩 설정, 공통적인 예외 처리 등은 거의 모든 서블릿에서 필요하지만, 이를 매번 각각의 서블릿에 작성했어야 했다. 이렇게 되면 유지보수가 어려워지고, 애플리케이션 전체의 일관성을 유지하기도 쉽지 않았다.
3. MVC 패턴 적용의 어려움
MVC 패턴을 적용하고 싶어도 서블릿 기반 개발에서는 모델, 뷰, 컨트롤러를 명확하게 분리하기가 쉽지 않았다. 모든 흐름을 개발자가 직접 조합해야 하고 요청 처리 후 어떤 뷰로 포워딩할지 결정하거나 데이터를 뷰에 전달하는 작업도 수동으로 처리해야 했기 때문에 구조화된 설계를 유지하기가 어려웠다.
4. 프론트 컨트롤러 패턴의 필요성
이런 문제들을 해결하기 위해 등장한 것이 바로 프론트 컨트롤러 패턴이다.
프론트 컨트롤러는 모든 요청을 하나의 진입점에서 받아 공통 처리를 한 뒤, 적절한 컨트롤러로 요청을 전달하는 구조이다.
프론트 컨트롤러를 통해 요청 흐름을 통합하면 공통 작업 처리, 일관성 있는 구조, 유지보수 용이성을 확보할 수 있다.
5. DispatcherServlet의 등장
Spring Web MVC에서 이 역할을 맡는것이 바로 DispatcherServlet이다.
DispatcherServlet은 웹 애플리케이션의 모든 요청을 한 곳에서 받아들이고, 그 요청에 알맞은 컨트롤러를 찾아 전달하며, 처리 결과를 다시 뷰로 연결해주는 중심 역할을 해준다.
덕분에 요청 흐름을 일관되게 관리할 수 있고, 공통 기능을 재사용하며, 명확한 구조로 개발할 수 있게 되었습니다.
1. 요청 수신
/, *.do 등 매핑 가능)2. 핸들러 매핑
HandlerMapping을 통해 어떤 컨트롤러(핸들러)가 이 요청을 처리할지 결정3. 핸들러 어댑터 실행
4. 모델과 뷰 반환
ModelAndView 객체 생성5. 뷰 리졸버 처리
ViewResolver를 통해 논리적 이름(view name)을 실제 뷰 파일로 변환6. 최종 렌더링

1. 클라이언트의 요청을 DispatcherServlet이 받음
2. HandlerMapping을 통해 해당 요청을 처리할 컨트롤러를 찾음
3. 해당 컨트롤러가 실행할 수 있는 HandlerAdapter를 찾아서 전달
4. HandlerAdapter가 컨트롤러로 요청을 위임
5. 컨트롤러가 비즈니스 로직을 처리
6. 컨트롤러가 반환값을 반환
7. HandlerAdapter가 반환값을 처리
8. 서버의 응답을 클라이언트로 반환
프론트 컨트롤러로써, 클라이언트의 모든 요청을 가로챈다.핸들러 매핑이다.MessageConverter를 사용해 객체를 직렬화하고 응답상태(HttpStatus)를 설정한다.ViewResolver를 통해 실제 뷰 파일 경로를 찾아 View 객체로 변환한다.HttpServletResponse를 통해 HTML, JSON, 파일 등 최종 응답 결과가 전송된다.