Spring MVC는 Spring에서 제공하는 웹 모듈로, Model, View, Controller 세가지 구성요소를 사용해 사용자의 다양한 HTTP Request을 처리하고 단순한 텍스트 형식의 응답부터 REST 형식의 응답은 물론 View를 표시하는 html을 return하는 응답까지 다양한 응답을 할 수 있도록 프레임크이다.
Spring MVC 이전에 서블릿에서 어떤 구조였는지 경험해보는 것을 추천한다. https://sh970901.tistory.com/111
1. Model(모델)
어플리케이션의 데이터이며, 모든 데이터 정보를 가공하여 가지고 있는 컴포넌트이다.
- 사용자가 이용하려는 모든 데이터를 가지고 있어야하며, View(뷰) 또는 Controller(컨트롤러)에 대해 어떤 정보도 알 수 없어야 한다.
- 변경이 일어나면 처리 방법을 구현해야 한다.
2. View(뷰)
시각적인 UI 요소를 지칭하는 용어이다.
- Model(모델)이 가지고 있는 데이터를 저장하면 안된다.
- Model(모델)이나 Controller(컨트롤러)에 대한 정보를 알면 안되며 단순히 표시해주는 역할을 가지고 있다.
- 변경이 일어나면 처리 방법을 구현해야 한다.
- Model의 데이터를 렌더링하는 작업을 주로 수행한다. 사용자가 브라우저에서 조회가 가능하도록 HTML 형태로 제공한다.
3. Controller(컨트롤러)
Model(모델)과 View(뷰)를 연결해주는 역할을 한다.
- Model(모델) 또는 View(뷰)에 대한 정보를 알아야 한다.
- Model(모델) 또는 View(뷰)의 변경을 인지하여 대처를 해야한다.
- Controller는 사용자 요청에 대해 적절한 모델을 호출하고 필요시 비즈니스 로직처리도 수행한다. 그 다음 결과를 View로 보낸다.
MVC 모델을 정리하면 사용자는 브라우저를 통해 요청(request)을 Controller에 보내고 Controller는 비즈니스 로직처리와 필요한 데이터를 Model에서 가져온다. 이렇게 조합된 정보는 다시 View로 보내져서 사용자에게 HTML형태로 브라우저에 제공된다.
ring MVC는 이름에서 알수 있듯이 MVC 모델을 사용해서 웹 어플리케이션을 만들기 위해 만들어 졌다. Spring MVC는 모든 HTTP 요청(request)과 응답(response)을 처리하는 DispatcherServlet이란 개념을 기반으로 설계되었다. 아래는 DispatcherServlet과 DispatcherServlet이 관리하는 컴포넌트들이다.
1️⃣ 동작 순서
- 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
- 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
- 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.
- 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다.
- ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서반환한다.
- viewResolver 호출 : 뷰 리졸버를 찾고 실행한다
- View반환 :뷰 리졸버는 뷰의 논리이름을 물리이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다
- 뷰 렌더링 : 뷰를 통해서 뷰를 렌더링한다.
2️⃣ 특징
- 서블릿 기반의 웹 프레임워크이다.
- 이 인터페이스들만 구현해서 DispatcherServlet 에 등록하면 우리들만의 컨트롤러를 만들 수도 있다.
- Spring의 다른 특징인 DI(의존성주입), AOP(관점지향프로그래밍)을 모두 사용할 수 있다.
- model2 방식을 활용
- Model2가 Model1에 비해 개발 초기의 부하가 비교적 높고, 아키텍처에 대한 수준 높은 이해를 요구하지만재사용성이 높고 확장이 Model1에 비해 용이하다. 무엇보다 Model2는 그 구조적 특징으로 인해 자연스럽게 MVC 각 영역의 역할이 구분되도록 해준다.
- 스프링 MVC의 큰 강점은DispatcherServlet 코드의 변경 없이, 원하는 기능을 변경하거나 확장할 수 있다는 점이다. 지금까지 설명한 대부분을 확장 가능할 수 있게 인터페이스로 제공한다.
'IT' 카테고리의 다른 글
알약 랜섬웨어 오류 해결 방법 (0) | 2022.08.30 |
---|---|
Linux(centOS9) 설정 1(CentOS, Virtural BOX, PuTTy 원격 접속) (0) | 2022.08.24 |
트리거 (TRIGGER) (0) | 2022.08.10 |
스프링 의존 관계 주입(DI) (0) | 2022.08.09 |
스프링 어노테이션 정리 (1) | 2022.08.09 |