[Spring] Spring Web MVC
Spring Web MVC란?
- Servlet API를 기반으로 구축된 웹 프레임 워크를 말한다.
- Model2 MVC 패턴을 지원한다.
- 유연하고 느슨하게 결합된 웹 애플리케이션을 개발하는데 사용할 수 있는 Model-View-Controller 아키텍처 및 준비된 요소를 제공한다.
- MVC 패턴은 애플리케이션의 다양한 측면(입력, 로직, 비즈니스 로직 및 UI 로직)을 분리하는 동시에 이러한 요소간에 느슨한 결합을 제공한다.
- Model은 애플리케이션 데이터를 캡슐화하며 일반적으로 POJO로 구성된다.
- View는 모델 데이터를 렌더링하는 역할을 수행하며 일반적으로 클라이언트의 브라우저가 해석할 수 있는 HTML output을 생성한다.
- Controller는 사용자 요청을 처리하고 적절한 모델을 구축하고 렌더링을 위해 뷰로 전달한다.
- Spring web MVC는 모든 HTTP요청 및 응답을 처리하는 DispatcherServlet을 기반으로 설계되었다.
- 스프링 프레임워크 5버전부터는 리액티브 스택 기반으로 웹 애플리케이션을 개발할 때 사용될 수 있는 스프링 webflux를 제공한다.
Model | View | Controller |
1) 애플리케이션의 상태(data)를 나타낸다. 2) 일반적으로 POJO로 구성 3) Java Beans |
1)디스플레이 데이터 또는 프리젠테이션 Model data의 렌더링을 담당하며 HTML output을 생성 2) JSP, 타임리프, 그루비 등 여러 탬플릿 엔진 존재 |
1) View 와 Model 사이의 인터페이스 역할 2) model, view에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 겨로가를 model에 담에 view에 전달 3) model object와 model에 화면을 출력할 view name을 반환한다. |
Spring MVC 처리과정
1)DispatcherServlet이 클라이언트 요청을 받는다.
컨트롤러 중에서도, 맨 앞단에서 유저의 요청을 받는 컨트롤러를 프론트 컨트롤러라고 한다.
DispatcherServlet 객체가 이 역할을 한다.
2)DispatcherServlet은 적절한 컨트롤러를 선택하는 작업을 HandlerMapping 에 전달한다.
HandlerMapping은 들어오는 요청 URL 에 매핑된 컨트롤러를 선택하고, 선택된 Handler 및 Controller를 DispatcherServlet에 반환한다.
3)DispatcherServlet은 Controller의 비즈니스 로직 실행 작업을 HandlerAdapter에 전달한다.
4)HandlerAdapter는 Controller의 비즈니스 로직 프로세스를 호출한다.
5)컨트롤러는 비즈니스 로직을 실행하고 처리 결과를 Model에 설정하고 뷰의 논리적 이름을 HandlerAdapter에 반환한다.
6) DispatcherServlet은 view 이름에 해당하는 view를 해결하는 작업을 ViewResolver에 전달한다.
viewResolver는 view 이름에 매핑 된 view를 반환한다.
7) DispatcherServlet은 렌더링 프로세스를 반환 된 view로 전달한다.
8) view는 모델 데이터를 렌더링하고 응답을 반환한다.
Spring MVC의 주요 컴포넌트
주요 컴포넌트 | 설명 |
DispatcherServlet | - 스프링 프레임워크가 제공하는 서블릿 클래스 - 사용자의 요청을 받는다. - Dispatcher가 받은 요청은 HandlerMapping으로 넘어간다. -Front Controller Pattern : 모든 리소스 요청을 처리해주는 하나의 컨트롤러를 두는 패턴 |
HandlerMapping | - 사용자의 요청을 처리할 Controller를 찾는다. - 요청 url에 해당하는 Controller 정보를 저장하는 table을 가진다. -클래스에 @RequestMapping("/url") annotation을 명시하면 해당 URL에 대한 요청이 들어왔을 때 table에 저장된 정보에 따라 해당 클래스 또는 메소드에 Mapping한다. |
Controller | -요청에 맵핑 된 Controller 에게 위임됨 -@RequestMapping 을 통하여 요청을 처리할 메소드를 호출 -필요한 비즈니스 로직을 호출 - 해당 요청을 처리할 Service를 주입 받아 Service에게 위임 - Service에서는 비즈니스 로직을 구현 - 결과 데이터를 다시 Controller에게 전달 -View에 전달할 결과 데이터(Model)과 이동할 화면(View) 정보를 스프링 MVC가 제공하는 ModelAndView 인스턴스에 담아 DispatcherServlet에 반환된다. -DispatherServlet은 ViewResolver에게 뷰논리정보를 전달한다. |
ModelAndView | -Controller에서 처리 결과를 View에 전달할 결과 데이터와 이동할 화면 정보를 담는 클래스 -Controller 메소드에서 리턴 타입이 String인 경우에도 핸들러에서 ModelAndView 인스턴스에 View정보를 넣는다. |
ViewResolver | - ViewResolver는 View name을 이용해 알맞은 view객체를 찾는다. - Controller가 반환한 View Name에 prefix. suffic 접두사 접미사를 적용하여 view Object를 반환 -View에 model을 랜더링하여 view인스턴스를 다시 DIspatcherServlet에 반환한다. - DIspatcherServlet은 최종 결과를 클라이언트에 응답한다. |
View | - 결과 데이터인 Model 객체를 출력 |
'Framework > Spring' 카테고리의 다른 글
[Spring] @Controller @RequestMapping @GetMapping @PostMapping (0) | 2020.12.01 |
---|---|
[Spring] xml을 기반으로 한 bean 설정하기(1) (0) | 2020.11.24 |
[Spring] 스프링 컨테이너 & DI(Dependency Injection) (0) | 2020.11.24 |
[Spring] 스프링이란?? (0) | 2020.11.24 |
댓글