
Spring MVC에선 클라이언트의 요청이 들어오면 처리하고 응답으로 반환하기까지 여러 구성 요소들이 유기적으로 작동한다.
이 흐름은 Front Controller Pattern을 기반으로 설계되어 있으며, 모든 요청은 DispatcherServlet을 중심으로 전달되고 조율된다.
흐~름
1. 클라이언트가 요청을 전송하면 DispatcherServlet이라는 클래스에 요청이 전달됨
2. DispatcherServlet은 클라이언트의 요청을 처리한 Controller에 대한 검색을 HandlerMapping 인터페이스에 요청함
3. HandlerMapping은 클라이언트 요청과 맵핑되는 Handler 객체를 다시 DispatcherServlet에게 리턴해준다.
- Handler 객체는 해당 핸들러의 Handler 메서드 정보를 포함하고 있다
- Handler 메서드는 Controller 클래스 안에 구현된 요청 처리 메서드를 의미함
4. 요청을 처리할 Controller 메서드를 찾았다!
이제 실제로 클라이언트 요청을 처리할 Handler 메서드를 찾아서 호출한다.
DispatcherServlet은 Handler 메서드를 직접 호출하지 않고, HandlerAdapter에게 Handler메서드 호출을 위임한다.
5. HandlerAdapter는 DispatcherServlet으로부터 전달받은 Controller정보를 기반으로 해당 Controller의 Handler메서드 호출
Controller까지 왔으니 되돌아가기 //
6. Controller의 Handler 메서드는 비즈니스 로직 처리 후 리턴받은 Model 데이터를 HandlerAdapter에게 전달함
7. HandlerAdapter는
Controller의 Handler메서드로부터 받은 Model 데이터와 View 정보를 다시 DispatcherServlet에게 전달한다.
8. DispatcherServlet은 전달받은 View 정보를 다시 ViewResolver에게 전달해서 View 검색을 요청함
9. ViewResolver는 View 정보에 해당하는 View를 찾아서 다시 DispatcherServlet에게 리턴해준다.
10. DispatcherServlet은 ViewResolver로부터 전달받은 View 객체를 통해 Model 데이터를 넘겨주면서
클라이언트에게 전달할 응답 데이터 생성을 요청함.
11. View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 전달한다.
12. DispatcherServlet은 View로부터 전달받은 응답 데이터를 최종적으로 클라이언트에게 전달한다!
DispatcherServlet의 역할이 많아보일 수 있지만,
HandlerMapping, HandlerAdapter, ViewResolver, View 등 대부분의 Spring MVC 구성요소들에게 위임하고 있다.
이처럼 DispatcherServlet이 애플리케이션의 가장 앞단에 배치되어 다른 구성요소들과 상호작용하며 클라이언트의 요청을
처리하는 패턴을 Front Controller Pattern이라고 함.
//
JSON 응답을 처리하는 Spring MVC 흐~름(View를 거치지 않는다)
API 서버처럼 JSON으로 응답하는 구조에선 화면 렌더링(view)이 생략되고 클라이언트는 JSON 데이터를 바로 받아 처리한다.
그래도 DispatcherServlet을 중심으로 하는 핵심 구조는 동일하게 유지된다.
1. 클라이언트가 /api/users/1 같은 요청을 전송함
2. DispatcherServlet이 요청을 수신함
3. HandlerMapping이 URL에 해당하는 Controller 메서드를 찾음
4. HandlerAdapter가 해당 메서드를 실행함
5. Controller는 Java 객체(DTO) 반환
6. HttpMessageConverter가 Java객체를 JSON 문자열로 변환한다(Java - > JSON)
7. 변환된 JSON은 HTTP가 응답 본문으로 클라이언트에게 전송됨
정리 : View 기반 vs JSON 기반
| View 렌더링(SSR) | JSON 응답(API) | |
| 컨트롤러 | @Controller | @RestController or @Controller + @ResponseBody |
| 응답 결과 | View의 이름을 반환함(return "home" 등) | 객체 또는 문자열을 반환함(return dto 등) |
| 렌더링 처리 | ViewResolver, View를 거친다 | HttpMessageConverter를 통해 Java객체를 JSON으로 변환한다 |
| 최종 응답 | HTML 화면(JSP, Thymeleaf) | JSON |
| 사용대상 | 브라우저 기반 SSR 앱 | SPA, 모바일 앱, API 통신 |
오..
조금 머리에 들어옴..
공부할때 모르겠으면 다시 복습하자
'Spring Boot' 카테고리의 다른 글
| REST : 탄생배경과 개념 (7) | 2025.07.10 |
|---|---|
| MVC : Spring Boot 시작하기 (0) | 2025.07.06 |
| Spring MVC의 컴포넌트 (0) | 2025.07.02 |
| Spring MVC (2) | 2025.07.02 |
| 서블릿(Servlet) (2) | 2025.07.01 |