우와한 개발자

[Spring] Spring MVC란? - DispatcherServlet과 전체 동작 흐름

by 우와한개발자

 

[ Spring MVC ]

1. Spring MVC란

  • Servlet API를 기반으로 구축된 웹 프레임워크
  • 정식 명칭은 Spring Web MVC이지만 주로 Spring MVC로 불림
  • Spring Framework이 제공하는 DI, AOP 뿐 아니라 웹 개발을 위한 기능을 제공
  • DispatcherServlet(Front Controller)을 중심으로 설계되어 ViewResolver, HandlerMapping, Controller와 함께 요청을 처리
주요 기능 설명
요청 처리 클라이언트 요청을 적절한 컨트롤러로 매핑
View 선택 및 렌더링 응답 화면 View를 선택하고 결과를 전달
데이터 바인딩 요청 파라미터를 자바 객체로 자동 변환
예외 처리 공통 예외를 한 곳에서 처리
유효성 검사 입력값 검증 기능 제공

 

[ Spring MVC 동작 흐름 ]

  1. Client → Dispatcher Servlet : 클라이언트가 HTTP 요청(request)을 보내면 가장 먼저 Dispatcher Servlet이 받음
  2. Dispatcher Servlet → Handler Mapping : Dispatcher Servlet은 어떤 핸들러(컨트롤러)가 이 요청을 처리해야 하는지 알기 위해 Handler Mapping에 핸들러 조회를 요청.
  3. Handler Mapping → Dispatcher Servlet : Handler Mapping은 요청 URL에 맞는 핸들러를 찾아 Dispatcher Servlet에게 반환.
  4. Dispatcher Servlet → Handler Adapter : Dispatcher Servlet은 찾아낸 핸들러를 실행할 수 있도록 Handler Adapter에게 핸들러 실행을 요청
  5. Handler Adapter → Controller : Handler Adapter는 실제 비즈니스 로직이 담긴 Controller(핸들러)를 호출.
  6. Controller → Handler Adapter : Controller는 로직을 처리한 뒤 결과 데이터를 ModelAndView 또는 데이터 형태로 Handler Adapter에 반환.
  7. Handler Adapter → Dispatcher Servlet : Handler Adapter는 Controller로부터 받은 ModelAndView 또는 데이터를 Dispatcher Servlet에게 전달.
  8. Dispatcher Servlet → View Resolver : Dispatcher Servlet은 반환된 view name을 가지고 View Resolver에게 어떤 View를 사용할지 조회.
  9. View Resolver → Dispatcher Servlet : View Resolver는 view name에 해당하는 실제 View 객체를 찾아 Dispatcher Servlet에 반환.
  10. Dispatcher Servlet → View : Dispatcher Servlet은 Model 데이터를 View에 전달하여 렌더링을 요청.
  11. View → Dispatcher Servlet : View는 Model 데이터를 기반으로 HTML, JSON 등의 최종 결과물을 생성하여 반환.
  12. Dispatcher Servlet → Client : Dispatcher Servlet은 최종 응답(response)을 클라이언트에게 전송.

 

[ Spring MVC 구성요소 ]

1. DispatcherServlet

  • 모든 웹 요청을 받아 컨트롤러에 전달하고 처리된 결과를 View로 전달
  • Front Controller 역할 : 모든 요청을 하나의 중앙 컨트롤러가 먼저 받아서 처리

 

2. HandlerMapping

  • 요청 URL에 따라 어떤 컨트롤러를 호출할지 결정
  • "이 URL은 이 컨트롤러로 가면 돼" 라고 DispatcherServlet에 알려줌
  • Spring에 기본으로 내장되어 있어 servlet-context.xml에 별도 설정 불필요

 

3. HandlerAdaptor

  • HandlerMapping이 찾아준 컨트롤러를 실제로 실행하는 역할
  • DispatcherServlet은 컨트롤러를 직접 호출하지 않고 HandlerAdapter에 위임
DispatcherServlet
    ├── @Controller 방식   →  RequestMappingHandlerAdapter 가 실행
    ├── HttpRequestHandler →  HttpRequestHandlerAdapter 가 실행
    └── 구버전 Controller  →  SimpleControllerHandlerAdapter 가 실행

 

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기