[Spring]Spring MVC

김피자·2023년 2월 25일
0

Spring

목록 보기
10/30

Spring MVC구조와 동작과정을 살펴보도록 하겠습니다.

MVC

1. Model

애플리케이션의 정보(데이터)
모든 데이터 정보를 가공하여 가지고 있는 컴포넌트
(View에 출력할 데이터를 담아둔다.)
Model은 사용자가 편집하고자 하는 모든 데이터를 가지고 있어야 하지만 *View나 Controller에 대해서는 어떤 정보도 알 수 없어야한다..

의존하지 않아야한다 라는 말을 자주 들었는데 이는

Model 내부에 Controller와 View에 관련한 코드가 있으면 안된다.

라는 의미로 보면 된다.

2. View

시작적 UI 요소
View는 Model에 담긴 데이터를 사용해 화면을 그리는 데만 집중한다.
그래서 Model이 가지고 있는 데이터를 따로 저장하면 안된다.

View는 Model에만 의존해야하고, Controller에는 의존하면 안된다.

View가 Model로부터 데이터를 받을 때에는 사용자마다 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.

3. Controller

Model과 View를 연결해주는 역할로 요청을 받아 파라미터를 검증하고 비즈니스 로직을 실행한다.
또한, View에 전달할 결과 데이터를 조회해서 Model에 담는다.
구현 시 Controller 자체에 비즈니스 로직을 두기보단 Service 계층을 별도로 만들어 처리한다. (컨트롤러는 이 서비스를 호출해 비즈니스 로직을 실행)
Model 또는 View에 대한 정보를 알아야한다.

View가 Model로부터 데이터를 받을 때, 반드시 Controller에서 받아야 한다.


MVC 동작원리

  1. Request : 클라이언트가 URL을 통해 서버에 어떤 요청을 하게되면
    Dispatcher Servlet이라는 front Controller가 그 요청을 받는다.

  2. Dispatcher Servlet 은 요청된 URL을 Handler Mapping객체에 넘긴다.

[choose Handler] : Handler Mapping은 해당 요청을 매핑한 Controller가 있는지 검색하고 있으면 호출해야하는 Controller의 메소드(Handler) 정보를 다시 Dispatcher Servlet에게 반환한다.

  1. Dispatcher ServletHandler Adapter객체를 호출한다.

  2. Handler Adapter객체는 Handler(Controller의 메소드)를 직접 실행한다.

    자세히는 HandlerMapping은 DispatcherServlet로부터 전달받은 URL을 바탕으로 HandlerAdapter 객체를 포함하는 HandlerExecutionChain 객체를 생성하고, 이후 DispatcherServlet이 HandlerExecutionChain 객체로부터 HandlerAdapter 객체를 가져와서 해당 메소드를 실행하게 되는 것

[Execute Business Logic] : Controller의 메소드는 Service, DAO, DB를 거쳐 해당 비즈니스 로직을 수행하고

[Set Processing Result Models] : 그 결과를 바탕으로 View에 전달할 객체를 Model에 저장

  1. Handler Adapter에게는 이동해야할 View의 논리적인 이름만 돌려준다.(역할 끝)

Handler Adapter는 View Name을 받고 Dispatcher Servlet에게 전달한다.

  1. Dispatcheer ServletView Resolver에게 View Name을 전달하고, 해당 View 객체를 얻는다.

  2. DispatcherServletView 객체에 화면 표시를 의뢰한다.

  1. View 객체는 해당하는 뷰(ex. JSP, Thymeleaf)를 호출하며, Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리한다.

출처
https://velog.io/@matcha_/Spring-Spring-MVC-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC
https://velog.io/@matcha_/Spring-Spring-MVC-동작-원리
https://starkying.tistory.com/entry/Spring-MVC-동작원리-구성요소

profile
제로부터시작하는코딩생활

0개의 댓글