CS/Spring
Front Controller & DispatcherServlet
leah-only
2025. 5. 26. 16:49
⚠️ MVC 패턴의 한계
단점
- forward 중복
- View로 이동하는 코드가 항상 중복 호출되어야 한다.
- ViewPath에 중복
- 공통 처리가 어렵다.
이 문제를 해결하려면 Controller 호출 전에 먼저 공통 기능을 처리해야 한다.
그것이 바로 프론트 컨트롤러 패턴이다.
Front Controller Pattern 특징
- 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음
- 프론트 컨트롤러가 요청에 맞게 컨트롤러를 찾아서 호출
- 입구 하나 → 공통 처리가 가능
- 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨
스프링 웹 MVC와 Front Controller
- 스프링 웹 MVC의 핵심 = Front Controller
- DispatcherServlet이 Front Controller 패턴으로 구현되어 있음
DispatcherServlet
DispatcherServlet은 Front Controller 패턴의 구현체이다.
또한 Spring MVC에서 모든 HTTP 요청을 처리하는 중앙 컨트롤러이다.
즉, 클라이언트의 요청을 받아서 적절한 컨트롤러로 전달하고, 응답을 생성해 반환하는 역할을 한다.
- 클라이언트 요청 수신 (HTTP 요청)
- HandlerMapping을 통해 어떤 컨트롤러(Handler)가 이 요청을 처리할지 결정
- HandlerAdapter를 통해 컨트롤러 호출
- 컨트롤러가 반환한 ModelView 정보를 받아
- ViewResolver로 뷰를 결정 → 렌더링
- 최종 HTML 응답을 반환
📌 HandlerMapping
- 요청 URL과 매핑되는 컨트롤러(Handler)를 찾는 컴포넌트
- ex: /user/list 요청 → UserController.list() 매핑
- 요청 정보를 기반으로, 어떤 컨트롤러가 해당 요청을 처리할지를 결정
📌 HandlerAdapter
- 다양한 종류의 컨트롤러를 호출할 수 있게 해주는 어댑터
- 찾은 컨트롤러를 실제로 실행할 수 있도록 돕는 어댑터
- 컨트롤러 호출, 실행 결과(ModelAndView) 반환