스프링 MVC ( Model- View- Controller ) Pattern
Model
- 어플리케이션 상태의 캡슐화
- 어플리케이션의 기능 표현
- 상태 쿼리에 대한 응답
- 변경을 view에 전달
View
- 모델에게 업데이트 요청
- 모델을 화면에 시각적으로 표현
- 사용자의 입력을 컨트롤러에 전달
- 컨트롤러가 View를 선택하도록 허용
Controller
- 사용자 액션을 모델 업데이트와 Mapping
- 응답에 대한 view를 선택.
Spring MVC의 구성요소
DispatcherServlet (Front Controller) |
클라이언트의 요청을 받는다. Controller에게 클라이언트의 요청을 전달한다. Controller가 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성한다. |
HandlerMapping | 클라이언트의 요청 URL을 어떤 Controller가 처리할지 결정한다. URL과 요청 정보를 기준으로 어떤 핸들러 객체를 사용할지 결정하는 객체이다. DispatcherServlet은 하나 이상의 핸들러 매핑을 가질 수 있다. |
Controller | 클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에 알려준다, |
ModelAndView | Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체이다. |
ViewResolver | Controller가 리턴 한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 결정한다. |
View | Controller의 처리 결과를 보여줄 응답화면을 생성한다. |
Spring MVC 요청 흐름
요청흐름
1. 핸들러 조회
2. 핸들러 어댑터 조회
3. 핸들러 어댑터 실행
4. 핸들러 어댑터를 통해 핸들러 실행
5. ModelAndView 실행 -> 뷰 렌더링 호출
6. 뷰 리졸버를 통해 뷰 찾기
7. 뷰 변환
8. 뷰 렌더링
스프링의 MVC의 실행순서는 클라이언트의 요청이 서버에 도달하여 처리되기까지의 과정이다.
동작순서
1. 핸들러 조회
- 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
2. 핸들러 어댑터 조회
- 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
3. 핸들러 어댑터 실행
- 핸들러 어댑터를 실행한다.
4. 핸들러 실행
- 핸들러 어댑터가 실제 핸들러를 실행한다.
5. ModelAndView 반환
- 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
6. viewResolver 호출
- 뷰 리졸버를 찾고 실행한다.
7. View 반환
- 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링역할을 담당하는 뷰 객체를 반환한다.
8. 뷰 렌더링
- 뷰를 통해 뷰를 렌더링한다.
스프링 MVC의 큰 강점은 DispatcherServlet 코드의 변경없이, 원하는 기능을 변경하거나 확장할 수 있다는 점이다.
스프링 부트는 InternalResourceViewResolver 라는 뷰 리졸버를 자동으로 등록하는데,
이때 application.properties에 등록한다.
ViewResolver란?
웹 애플리케이션에서 사용자에게 보여지는 화면을 생성하는 역할을 담당하는 중요한 구성 요소이다.
뷰 리졸버는 컨트롤러(Controller)가 처리한 결과 데이터를 기반으로 어떤 뷰(View)를 사용할지를 결정하고 해당 뷰를 찾아 반환하는 역할을 수행하는 것이다.
'✨ Back-end > etc' 카테고리의 다른 글
@ModelAttribute사용하여 극한으로 코드 줄이기 (0) | 2023.09.02 |
---|---|
@RequiredArgsConstructor , @PostConstruct (0) | 2023.09.02 |
@RestController와 @RequestMapping @PathVariable ( 경로변수 ) (0) | 2023.08.28 |
로깅(Logging) 에 대해서, 왜 써야하는지? @Slf4j 어노테이션 (0) | 2023.08.27 |
[Spring] AOP 개념과 용어 8가지 (0) | 2023.08.25 |
댓글