///////
Search
🍵

Spring MVC에서 HTTP 요청이 들어왔을 때의 흐름을 설명해 주세요

Spring MVC 요청 처리 흐름도

요소 별 기능

DispatcherServlet
- 클라이언트의 요청을 받아 컨트롤러에게 전달 - 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성
HandlerMapping
- 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정
HandlerAdapter
- DispatcherServlet의 처리 요청을 변환해서 컨트롤러에게 전달 - 응답 결과를 DispatcherServlet이 요구하는 형식으로 변환
Controller
- 클라이언트의 요청 처리 결과 리턴
Model
- 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 보관
ViewResolver
- 컨트롤러의 처리 결과를 보여줄 뷰를 결정
View
- 컨트롤러의 처리 결과 화면을 생성 (JSP 템플릿 파일 등)

처리 순서

1.
클라이언트의 요청을 Dispatcher Servlet이 받는다
2.
Dispatcher Servlet은 web.xml 또는 어노테이션에 정의된 URL 패턴에 맞는 요청을 받음
→ 요청 URL을 Handler Mapping에게 전달 (이 때 Handler Mapping 객체 생성)
→ Handler Mapping은 URL을 기준으로 현재 요청에 맞는 Controller와 Method를 확인
3.
Dispatcher Servlet은 HandlerAdapter에게 요청 처리를 위임
4.
Handler Adapter는 Controller와 해당 Method를 실행
→ Handler Mapping은 Dispatcher Servlet로부터 전달된 URL을 바탕으로 Handler Adapter 객체를 포함하는 HandlerExecutionChain 객체를 생성
→ Dispatcher Servlet이 HandlerExecutionChain 객체로부터 Handler Adapter 객체를 가져와서 해당 메소드를 실행
5.
Controller는 비즈니스 로직을 처리
→ 처리 결과를 바탕으로 View(ex. JSP)에 전달할 객체를 Model 객체에 저장
→ Dispatcher Servlet에게 View name을 리턴한다.
6.
Dispatcher Servlet은 View name, 헤더 정보(HTML, JSON, XML)를 View Resolver에게 전달
→ View Resolver는 컨트롤러가 처리한 결과를 보여줄 View를 결정
→ View Resolver는 매핑되는 View 객체를 획득 후 Dispatcher Servlet에 전달
JSP의 경우 JstlView 객체가 생성되며, JstlView 객체가 "xxxx,jsp"에 포워딩하여 결과를 보여준다.(JSP 객체를 생성하는 것이 아니다.)
7.
Dispatcher Servlet은 View 객체에 화면 표시를 요청
8.
View 객체는 해당하는 View(ex. JSP, Thymeleaf)를 호출
→ View는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리

참고