Spring

[Spring] Spring MVC 와 MVC2

코냥이 2023. 12. 17. 23:42

 

 

들어가기

Spring 프레임워크에는 웹 계층에서 서블릿(Servlet) API를 기반으로

클라이언트의 요청을 처리하는 Spring MVC가 있다.

* 서블릿(Servlet) 이란?
- 동적 웹 페이지 생성을 위한 Java 기반의 웹 애플리케이션 프로그래밍 기술이다.
- MVC 패턴에서 Controller로 사용된다.

 

 

 

 

 

 

 

💡 MVC 패턴이란?


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

 

MVC 패턴은 사용자 인터페이스(View)로부터 비즈니스 로직(Model)을 분리하여 관리하고,

View와 Model의 상호작용을 연결시켜주는 브릿지(Controller)를 통해 View와 Model의 의존성을 최소화한다.

MVC 아키텍처 구조

 

✔️ MVC 구성 요소

모델 (Model)

모델(Model)은 내부 비즈니스 로직을 처리하는 역할로, 애플리케이션의 데이터를 가공 처리하기 위한 컴포넌트이다.
  • 애플리케이션의 모든 데이터를 가지고 있어야 하며, View나 Controller에 대한 어떠한 정보도 알 수 없어야 한다.
  • View가 필요한 모든 데이터를 가지고 있기 때문에, View가 비즈니스 로직이나 데이터 접근에 대해 알 필요없이 화면 렌더링에 집중할 수 있도록 해준다.
  • DAO, Service 클래스가 Model에 해당된다.

 

뷰 (View)

뷰(View)는 Model에서 처리한 데이터와 작업 결과를 클라이언트에게 시각적으로 제공하는 역할을 한다.
  • View는 Model에 독립적이기 때문에 Model 데이터에 액세스하는 방법은 알고 있지만 그 데이터가 무엇을 의미하는지, 사용자가 이를 조작하기 위해 무엇을 할 수 있는지는 알 수 없다. 즉, View는 사용자 인터페이스를 변경해도 Model에 영향을 주지 않는다.
  • HTML, CSS, JavaScript 등을 사용하여 웹 브라우저가 출력할 수 있도록 UI를 만든다.

 

컨트롤러 (Controller)

컨트롤러(Controller)는 Model과 View를 연결해주는 역할로, 전체 메커니즘의 흐름을 제어한다.
  • 클라이언트의 요청을 받아 비즈니스 로직을 거친 후, Model 데이터를 만들어 View에게 전달한다.
  • Controller는 Model이나 View에 대해 알고 있어서, 변경사항을 모니터링하여 대처해야 한다.

 

 

 

 

 

 

💡 MVC1 vs MVC2


 

MVC 패턴은 크게 MVC1 패턴MVC2 패턴으로 나눌 수 있다.

 

✔️ MVC1

MVC1 구조

  • MVC1 패턴은 View와 Controller를 모두 JSP가 담당하는 형태이다. 
    • 장점 : 하나의 JSP로 클라이언트의 요청을 받고 응답을 처리하기 때문에 구현이 쉽다.
    • 단점 : 하나의 JSP로 MVC가 이루어지기 때문에 재사용성이 떨어지고, 유지보수가 어렵다.

 

✔️ MVC2

MVC2 구조

  • MVC2는 View와 Controller가 따로 존재하여 역할이 분리되어 있는 형태이다.
  • Model, View, Controller 중 수정해야 할 부분이 있으면 하나만 수정할 수 있다.
    • 장점 : MVC1의 단점을 보완할 수 있으며, 유지보수가 쉽다.  
    • 단점 : MVC1 보다는 구조가 복잡하다.
  • Spring은 MVC2 패턴을 기반으로한 Spring MVC 프레임워크를 제공한다.

 

 

 

 

 

💡 Spring MVC란?


Spring MVC는 Spring에서 제공하는 웹 모듈로,
Model, View, Controller 세 가지 컴포넌트를 통해 Servlet 기반의 웹 개발을 위한 프레임워크이다.

 

Spring MVC에는 Model, View, Controller 이 세 가지가 유기적으로 동작하기 위한 다양한 구성 요소가 있다.

 

 

✔️Spring MVC 구성 요소

DispatcherServlet

DispatcherServlet은 프론트 컨트롤러(Front Controller)로, 클라이언트의 모든 요청을 받아 Controller에게 넘겨주고,
처리한 결과를 받아 View에게 전달한다.

* 프론트 컨트롤러(Front Controller) : 앞단에서 처리하는 Controller를 두는 패턴

 

HandlerMapping

HandlerMapping은 클라이언트의 요청 URL과 요청 정보를 통해 어떤 Controller가 처리할지 결정한다.
DispatcherServlet은 하나 이상의 HandlerMapping을 가질 수 있다.

 

Controller

Controller는 클라이언트의 요청을 처리한 후, Model을 호출하여 Model에서 받은 결과를 DispatcherServlet에 전달한다.

 

ModelAndView

ModelAndView는 Controller가 처리한 데이터와 화면 정보를 보유한 객체이다.

 

ViewResolver

ViewResolver는 Controller가 return한 View 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 지정한다.

 

View

View는 Controller의 처리 결과를 보여줄 응답 화면을 생성한다.

 

 

 

 

✔️ Spring MVC 처리 과정

Spring MVC 처리 과정

1. 클라이언트가 서버에 요청(Request)을 날리면, DispatcherServlet에게 요청이 전달된다.
2. DispatcherServletHandlerMapping에게 어떤 Controller가 요청을 처리하면 좋을지 물어본다.
3. 요청에 매핑된 Controller가 존재하면, @RequestMapping을 통해 요청을 처리할 메소드에 도달한다.
4. Controller는 요청을 처리할 Service를 주입(DI)받아 비즈니스 로직을 Service에게 위임한다.
5. Service요청에 필요한 작업을 담당하고, 데이터베이스 접근이 필요하면 DAO를 주입받아 DB 처리를 DAO에게 위임한다.
6. DAO는 데이터베이스 설정을 통해 SQL 쿼리를 날려 DB에 저장되어 있는 정보를 받고 Service에게 전달한다.
7. Service모든 비즈니스 로직을 처리하면 결과물을 Controller에게 전달한다.
8. 결과물을 받은 Controller는 필요에 따라 Model 객체에 결과물을 넣거나, 어떤 View 파일을 보여줄 것인지와 같은 정보를 담아서 DispatcherServlet에게 전달한다.
9. DispatcherServletView에 대한 정보를 ViewResolver에게 전달한다.
10. ViewResolver응답할 View를 찾아서 DispatcherServlet에게 전달한다.
11. DispatcherServlet응답할 View에게 Render를 지시하고, View응답 로직을 처리한다.
12. DispatcherServlet클라이언트에게 Rendering 된 View를 응답한다.

 

 

 

 

 

 

 

 

출처

 

 

 

 

 

긴 글 읽어주셔서 감사합니다 🍀

잘못 작성된 내용은 피드백 주시면 반영하겠습니다 😎