Spring Web MVC 란 ?

- Spring Web MVC는 Servlet API를 기반으로 구축 된 웹 프레임 워크

- Model 2 MVC 패턴을 지원

- Spring Web MVC는 유연하고 느슨하게 결합된 웹 애플리케이션을 개발하는 데 사용할 수 있는 Model-View-Controller아키텍쳐 및 준비된 구성요소를 제공한다.

- MVC 패턴은 애플리케이션의 다양한 측면(입력 로직, 비즈니스 로직 및 UI로직)을 분리하는 동시에 이러한 요소간에 느슨한 결합을 제공한다.

 1) Model은 애플리케이션 데이터를 캡슐화하며 일반적으로 POJO로 구성

 2) View는 모델 데이터를 렌더링하는 역할을 하며 일반적으로 클라이언트의 브라우저가 해석 할 수 있는 HTML output을 생성

 3) Controller는 사용자 요청을 처리하고 적절한 모델을 구축하고 렌더링을 위해 뷰를 전달

- Spring Web MVC는 모든 HTTP 요청 및 응답을 처리하는 DispatcherServlet을 기반으로 설계되었다.

- 스프링 프레임워크 5 버전부터 리액티브 스택 기반으로 웹 애플리케이션을 개발할 때 사용할 수 있는 스프링 Webflux를 제공

 

Spring MVC Architecture

- Model, View, Controller를 분리한 디자인 패턴

- Model

 1) 애플리케이션의 상태(data)를 나타낸다

 2) 일반적으로 POJO로 구성

 3) Java Beans

- View

 1) 디스플레이 데이터 또는 프리젠테이션

 2) Model data의 렌더링을 담당하며, HTML output을 생성

 3) JSP, 타임리프(Thymeleaf), 그루비(Groovy), 프리마커(Freemarket) 등 여러 Template Engine이 있다.

- Controller

 1) View와 Model 사이의 인터페이스 역할

 2) Model, View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를 Model에 담아 View에 전달.

 즉, Model Object와 이 Model을 화면에 출력할 View Name을 반환

 

String MVC 처리과정

1) DispatcherServlet이 클라이언트의 요청을 받는다.

2) DispatcherServlet은 적절한 컨트롤러를 선택하는 작업을 HandlerMapping에 전달한다. HandlerMapping은 들어오는 요청 URL에 매핑된 컨트롤러를 선택하고, 선택된 Handler 및 Controller를 DispatcherServlet에 반환한다.

3) DispatcherServlet은 Controller의 비즈니스 로직 실행 작업을 HandlerAdapter에 전달한다.

4) GandlerAdapter는 Controller의 비즈니스 로직 프로세스를 호출한다.

5) 컨트롤러는 비즈니스 로직을 실행하고 처리 결과를 Model에 설정하고 뷰의 논리적 이름을 HandlerAdapter에 반환한다.

6) DispatcherServlet은 View 이름에 해당하는 View를 해결하는 작업을 ViewResolver에 전달한다. ViewResolver는 View 이름에 매핑된 View로 전달한다.

8) View는 모델 데이터를 렌더링하고 응답을 반환한다.

 

Spring MVC 주요 컨포넌트

1) DispatcherSerlvet

- Spring Framework가 제공하는 Servlet 클래스

- 사용자의 요청을 받는다.

- DispatcherServlet이 받은 요청은 HandlerMapping으로 넘어간다.

- Front Controller Pattern

 모든 리소서(Resource)요청을 처리해주는 하나의 컨트롤러(Controller)를 두는 패턴

 DispatcherServlet이 Front Controller의 역할을 수행한다.

 

2) HandlerMapping

- 사용자의 요청을 처리한 Controller를 찾는다.

- 요청 uri에 해당하는 Controller 정보를 저장하는 table을 가진다. 클래스에 @RequestMapping("/uri") annotation을 명시하면 해당 URL에 대한 요청이 들어왔을 때 table에 저장된 정보에 따라 해당 클래스 또는 메소드에 Mapping한다.

 

3) Controller

- 요청에 맵팽된 Controller에게 위임됨(@Controller)

- @RequestMapping을 통하여ㅠ 요청을 처리할 메소드를 호출

- 필요한 비즈니스 로직을 처리

- View에 전달할 결과 데이터(Model)와 이동할 화면(View) 정보를 스프링 MVC가 제공하는 ModelAndView 인스턴스에 담아 DispatcherServlet에 반환

- DispatcherServlet는 ViewResolver에게 뷰 논리정보(View Name)를 전달

 

4) ModelAndView

- Controller에서 처리 결과를 View에 전달할 결과 데이터(Model)와 이동할 화면(View)정보를 담는 클래스

- Controller메소드에서 리턴 타입이 String 인 경우에도 핸들러에서 ModelAndView인스턴스에 View정보를 넣는다.

 

5) ViewResolver

- ViewResolver는 View Name을 이용해 알맞는 view객체를 찾는다.

 1) Controller가 반환한 View Name에 prefix와 suffix를 적용하여 View Object를 반환한다.

 2) View Name : 'home', prefix : '/WEB-INF/views/', suffix : '.jsp'인 경우 => '/WEB-INF/views/home.jsp' 라는 위치의 View(JSP)에 Controller에게 받은 Model을 전달한다.

- View에 Model을 redering 하여 View 인스턴스를 다시 DispatcherServlet에 반환한다.

- DispatcherServlet은 최종 결과를 클라이언트에 응답

 

6) View

- 결과 데이터인 Model 객체를 출력한다.

 

+ Recent posts