MVC란?

Model, View, Controller 로 구성

소프트웨어가 서비스하는 방식에 대한 패턴을 지칭

!! 프레임워크/라이브러리가 아님 !!

 

MVC 특징

소프트웨어 서비스를 위한 여러 과정과 처리를 기능 단위 별로 나눠서 작성하여 코드 가독성 증대

 

Model

데이터와 비즈니스 로직을 관리

어플리케이션이 포함해야 될 데이터가 무엇인지 정의

Java Beans

Dao, Dto, Service 등

 

View

컨트롤러와 소통

레이아웃과 화면 처리

어플리케이션의 데이터를 보여주는 방식 정의

JSP, Thymeleaf, Groovy 등 여러 템플릿 엔진 존재

Html, JSP, Json 등

 

Controller

View에서 액션, 이벤트에 대한 input 처리

Model에게 데이터 전달하기 전 가공 가능

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

어플리케이션 사용자의 입력에 대한 응답으로 Model 및 View를 업데이트하는 로직 포함

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

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

Controller -> Service -> Dao -> DB

 

 

 

Spring MVC 란?

 

Spring에서 MVC패턴을 구성하고 구성요소들을 확장할 수 있게 만든 도구

 

 

Spring MVC 구조

주요 구성요소는 Model, View, Controller 이지만, 이들이 유기적으로 동작하기 위한 다양한 구성요소가 포함

 

  • DispatcherServlet(Front Controller)
  • Handler(Controller)
  • ModelAndView
  • ViewResolver

 

 

Spring MVC 동작 과정

 

1. 사용자 요청(HTTP Request)을  DispatcherServlet이 FrontController로써 받음

2. HandlerMapping에게 Controller 선택 위임

3-1. HanlerMapping은 사용자의 요청 경로를 이용해 처리할 Controller객체를 찾아 DispatcherServlet에 리턴

3-2. DispatcherServlet은 @Controller 어노테이션을 사용해서 구현한 Controller

       HttpRequestHandler 인터페이스를 구현한 Contorller클래스를 실행 후 ControllerAdapter(HandlerAdapter)객체에 요청 처리 위임

4. ControllerAdapter(HandlerAdapter)객체는 Controller의 알맞은 메소드를 호출, Service의 동작 수행

5. Service수행 결과 Controller에 리턴

6-1. ControllerAdapter(HandlerAdapter)에게 결과 전달

6-2. ControllerAdapter(HandlerAdapter)는 리턴받은 객체를 ModelAndView객체에 담아 DispatcherServlet에 전달

7. ViewResolver에게 ModelAndView객체를 전달

8. ViewResolver는 ModelAndView객체에 담긴 View Name을 이용해서 View 객체를 찾거나 생성하여 리턴

     DispatcherServlet이 ViewResolver가 리턴한 View 객체에게 응답 결과 생성 요청

9.  View객체가 사용자에게 전송할 응답 결과 생성 (JSP 사용하는 경우 View객체는 JSP실행)

     ModelAndView 의 Model 객체에 담겨 있는 데이터가 응답 결과에 필요하면 Model 에서 데이터를 꺼내 JSP 에서 사용할 수 있다.

 

 

DispatcherServlet

제일 앞단에서 HTTP Request를 처리하는 Controller

Dispatcher (보내다) 라는 뜻에 알맞게 HTTP Request로 들어오는 요청을 가장 먼저 받아 적합한 Controller에 전달해주는 Front Controller 

 

 

Handler(Controller)

HTTP Request를 처리해 Model을 만들고 View 지정

DispatcherServlet 에 의해 배정된 Controller는 HTTP Request를 처리하고, HTTP Request 처리해 필요한 데이터를 Model에 저장

HTTP Request에 따라 HTTP가 보여줄 View Name을 지정

View Name 뿐만 아니라 View를 직접 리턴 가능

 

 

ModelAndView

Model :  Map 자료구조를 사용

데이터를 Key-Value 쌍으로 만들어 저장

 

ModelAndView객체는 모델과 같은 동작을 수행

 

	@GetMapping("/test2")
	public String getTest2(Model model) {
		
		SampleVO vo = new SampleVO();
		vo.setId(0);
		vo.setName("name");
		
		model.addAttribute("value" , vo);
		
		return "test2";
		
	}

 // 결과
test2.jsp 
id:<c:out value="${value.id}"/>
	<br/>
name:<c:out value="${value.name}"/>

Model 사용

Model의 Attribute로 Value 라는 Key, vo 라는 Value를 설정해서 test2 String으로 리턴

 

@GetMapping("/test2")
	public ModelAndView getTest2(ModelAndView modelAndView) {
		
		SampleVO vo = new SampleVO();
		vo.setId(0);
		vo.setName("name");
		
		modelAndView.addObject("value", vo);
		modelAndView.setViewName("test2");
		
		return modelAndView;
		
	}

// 결과
test2.jsp 
id:<c:out value="${value.id}"/>
	<br/>
name:<c:out value="${value.name}"/>

ModelAndView객체 사용

addObject로 Key : value, Value : vo 값 저장

setViewName 으로 test2 String 저장

ModelAndView객체 자체를 리턴

 

 

 

ViewResolver

어떤 View를 사용할 것인지 설정하는 역할

예를 들어 데이터를 API형태로 제공하길 원한다면 ViewResolver를 통해 Json형태로 전달 가능

** Thymeleaf, Velocity, FreeMarker, JSP, JsonView 등의 View를 골라 설정

 

 

 

 

 

1.
핸들러 조회 : 핸들러 매핑을 통해 URL에 매핑된 핸들러(컨트롤러) 조회
2.
핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터 조회
3.
핸들러 어댑터 실행: 핸들러 어댑터 실행
4.
핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행
5.
ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해 반환.
6.
viewResolver 호출: 뷰 리졸버를 찾아 실행한다.
⇒ JSP: InternalResourceViewResolver가 자등 등록되어 사용된다.
7.
View 반환: 뷰 리졸버는 뷰의 논리 이름을 물이 이름으로 바꾸고 렌더링 역할을 담당하는 뷰 객체 반환.
⇒ JSP: InternalResourceView(JstlView)를 반환하는데, 내부에는 forward() 가 있다.
8.
뷰 렌더링: 뷰를 통해서 뷰를 렌더링한다.

'끄적 > BE' 카테고리의 다른 글

Dependency Injection (의존성 주입)  (0) 2023.01.03
Persistence Context (영속성 컨텍스트)  (0) 2023.01.01
JPA, Spring Data Jpa  (0) 2022.12.28
JPA  (0) 2022.12.28
Token을 사용한 로그인 인증  (0) 2022.12.28

+ Recent posts