[Spring] Spring MVC 구조
Spring MVC
스프링의 웹 계층을 담당하는 모듈 중에 서블릿 API를 기반으로 클라이언트의 요청을 처리하는 모듈을 spring-webmvc라고 하고 MVC는 각각 Model, View, Controller에 해당한다.
Model
Spring mvc 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받고 요청 사항을 처리하기 위한 작업을 하는데, 처리하고 클라이언트에게 응답으로 돌려주는 데이터
View
Model 데이터를 이용해서 클라이언트 애플리케이션의 화면에 보여지는 리소스를 제공
- HTML
- HTML 페이지에 Model 데이터를 채우고 렌더링 해서 전송
- ex) Thymeleaf, FreeMarker,...
- PDF, Excel
- Model 데이터를 가공해서 PDF나 Excel 문서를 클라이언트에 전송
- XML, JSON
- Model 데이터를 특정 프로토콜 형태로 변환해서 전송
- 데이터만 전송하고 클라이언트 측에서 HTML 페이지를 만드는 방식
JSON : 클라이언트와 서버가 주고받는 데이터 형식 {"속성 : 값"}의 형태
Controller
클라이언트의 요청을 직접적으로 전달받는 엔드포인트. Model과 View의 중간에서 상호 작용하는 역할
동작 방식
1. 클라이언트가 요청을 전송하면 DispatcherServlet에 전달
2. DispatcherServlet은 클라이언트의 요청을 처리할 Controller에 대한 검색을 HandlerMapping에 요청
3. HandlerMapping은 요청에 매핑되는 핸들러 객체를 찾아서 DispatcherServlet에 전달
4. HandlerAdapter에 Handler 메서드 호출을 위임
5. DispatcherServlet으로부터 전달받은 핸들러 정보를 가지고 Controller 호출
6. Controller에서 비즈니스 로직을 처리 후 Model 데이터를 HandlerAdapter에 전달
7. Model 데이터와 View 정보를 DispatcherServlet에 전달
8. ViewResolver에 View 정보를 전달해서 검색 요청
9. ViewResolver는 View정보를 바탕으로 View를 전달
10. View 객체를 통해 Model 데이터를 넘겨주고 응답 데이터 생성 요청
11. 응답 데이터를 생성해서 DispatcherServlet에 전달
12. 최종적으로 클라이언트에게 데이터 전달
DispatcherServlet
동작 방식을 보면 DispatcherServlet이 모든 과정에서 일을 하고 있다.
HandlerMapping, HandlerAdapter, ViewResolver, View 등 상호작용을 하는데 실제로는 요청에 대한 처리는 구성 요소들에게 위임한다.
이처럼 가장 앞에서 모든 요청을 받아 요청에 따른 컨트롤러를 호출하는 패턴을 Front Controller 패턴이라고 한다.
'Programming > Spring' 카테고리의 다른 글
[Spring] 스프링 컨테이너와 빈 (0) | 2023.02.13 |
---|---|
[Spring] 예외처리 - ExceptionHandler, ControllerAdvice (0) | 2022.10.30 |
[Spring] 스프링 의존관계 주입 방법 (0) | 2022.10.24 |
[Spring] 컴포넌트 스캔(ComponentScan) (1) | 2022.10.23 |
[Spring] 싱글톤과 스프링 컨테이너 (0) | 2022.10.20 |