[Spring] MVC Framework

Juhye Pyoun·2023년 9월 19일

Spring

목록 보기
2/7

MVC란?

MVC 패턴은 애플리케이션 개발 시 사용하는 디자인 패턴으로, 애플리케이션을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식이다

Model
애플리케이션의 데이터이며, 정보들의 가공을 책임지는 컴포넌트이다.
Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다. 이후 클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터를 Model이라 한다.

View
시각적인 UI 요소를 나타낸다. 즉 Model을 이용하여 웹 브라우저와 같은 애플리케이션의 화면에 보이는 리소스를 제공하는 역할을 한다.

Controller
Model과 View의 중간에서 상호작용을 해주는 역할을 한다.
클라이언트 측의 요청을 전달받아 비즈니스 로직을 거친 후, Model 데이터가 만들어지면, 이 Model 데이터를 View로 전달하는 역할을 한다.

 

MVC1, MVC2

MVC 패턴에는 Model1과 Model2가 있다.

  1. Model1 : JSP에서 출력과 로직을 모두 처리(View, Controller)

  2. Model2 : JSP에서 출력만 처리(View)

💡여기서 Model2 구조는 MVC(Model-View-Controller) Pattern을 웹 개발에 도입한 구조이다.

 

Spring MVC

Spring Framework에서 MVC 모델을 조금 더 발전시켜 Spring MVC가 나왔다. 정확히는 MVC2 모델이 기반인 웹 모듈이다.

구조 및 구성 요소

DispatcherServlet

  • 모든 request를 처리하는 중심 컨트롤러
  • 서블릿 컨테이너에서 http 프로토콜을 통해 들어오는 모든 request에 대해 제일 앞단에서 중앙집중식으로 처리해주는 핵심적인 역할
  • 기존에는 web.xml에 모두 등록해줘야 했지만, Dispatcher Servlet이 모든 요청을 핸들링하면서 작업을 편리하게 할 수 있음

HandlerMapping

  • Client의 요청 url을 어떤 컨트롤러가 처리해야 할 지 찾아서 Dispatcher Servlet에게 전달해주는 역할
  • 컨트롤러 상에서 url을 매핑시키기 위해 @RequestMapping을 사용하는데, 핸들러가 이를 찾아주는 역할을 함

Controller

  • 실질적인 요청을 처리하는 곳
  • Dispatcher Servlet - 프론트 컨트롤러
    Controller - 백엔드 컨트롤러
    * 프론트 컨트롤러(Front Controller) : 주로 서블릿 컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 모든 요청을 받아서 처리해주는 컨트롤러로, MVC 구조에서 함께 사용되는 패턴
  • 모델의 처리 결과를 담아 Dispatcher Servlet에게 반환

ViewResolver

  • 컨트롤러의 처리 결과를 만들 view를 결정해주는 역할
  • 스프링에서 다양한 종류 제공 -> 상황에 맞게 활용

 

처리 순서

  1. 클라이언트가 url을 요청하면, 웹 브라우저에서 스프링으로 request가 보내진다.

  2. DispatcherServlet이 request를 받으면, HandlerMapping을 통해 해당 url을 담당하는 Controller(=Handler)를 찾아 반환한다.

  3. DispatcherServlet은 반환된 Controller를 실행할 수 있는 적절한 HandlerAdapter에게 전달합니다.

  4. HandlerAdapter는 DispatcherServlet의 요청과 더불어 Controller 정보를 가지고 해당 Controller의 Handler 메소드를 호출한다.

  5. Controller의 Handler 메소드는 비즈니스 로직을 처리한 후 결과를 Model에 저장하고 HandlerAdapter에게 반환한다.

  6. HandlerAdapter는 반환받은 Model 데이터와 View 이름을 다시 DispatcherServlet에게 반환한다.

  7. DispatcherServlet은 View 이름을 가지고 ViewResolver에게 해당 View를 달라고 요청한다.

  8. ViewResolver는 논리적인 View를 물리적인 View로 변환한 뒤, 변환된 View를 DispatcherServlet에게 반환한다.

  9. DispatcherServlet은 ViewResolver에게 받은 View 객체에게 Model 데이터를 넘겨주면서 클라이언트에게 전달할 응답 데이터 생성을 요청한다.

  10. View는 응답 데이터를 생성해서 다시 DispatcherServlet에게 반환한다.

  11. DitpatcherServlet은 View로부터 받은 응답데이터를 마지막으로 클라이언트에게 응답하여 화면에 출력한다.

 

[참고자료]

링크1🔗
링크2🔗
링크3🔗
링크4🔗

0개의 댓글