Spring,SpringBoot

MVC, MVC1, MVC2 그리고 스프링의 MVC처리과정

Lahezy 2023. 3. 27.
728x90

MVC(Model-View-Controller) 패턴

https://www.intuz.com/blog/guide-on-mvc-vs-mvvm (pinterest)

  • 소프트웨어 디자인 패턴 중 하나로, 사용자 인터페이스와 비즈니스 로직을 분리하여 구현하는 방법을 제공하는 패턴이다.

MVC 패턴은 애플리케이션을 세 가지 역할로 분리된다.

모델(Model)

애플리케이션의 데이터와 비즈니스 로직을 담당한다. 모델은 데이터베이스, 파일, 메모리 등에서 데이터를 읽어오거나 저장하는 역할을 수행하며, 비즈니스 로직을 처리하여 데이터를 가공한다

 

뷰(View)

사용자 인터페이스를 담당한다. 뷰는 모델에서 처리된 데이터를 출력하거나 사용자의 입력을 받아 모델에 전달하는 역할을 수행한다

 

컨트롤러(Controller)

모델과 뷰 사이의 인터페이스 역할을 수행한다. 컨트롤러는 사용자의 요청을 받아 해당 요청을 처리할 모델을 선택하고, 모델에서 처리된 결과를 뷰에 전달한다

 

장점:

  • MVC 패턴은 각각의 역할을 분리하여 개발해서, 유지보수성과 확장성이 높아진다.
  • 여러 개발자가 협업하여 애플리케이션을 개발할 때 역할 분담이 쉬워진다.
  • 유지보수 및 개발 효율성이 높아진다.

한계

  • 복잡한 대규모 프로그램의 경우 다수의 뷰와 모델이 컨트롤러를 통해 연결되기 때문에 컨트롤러가 불필요하게 커지는 현상이 발생한다. 복잡한 화면을 구성하는 경우에도 동일한 현상이 발생하는데 이를 'Massive-View-Controller'라고 한다.

MVC 패턴은 웹 개발에서 가장 널리 사용되는 패턴 중 하나로 스프링 프레임워크도 MVC 패턴을 기반으로 한 웹 개발을 지원한다.


MVC 1 , MVC 2

MVC1

[사진 출처]https://chanhuiseok.github.io/posts/spring-3/

초기의 웹 애플리케이션 개발 패턴 중 하나이다.

JSP(JavaServer Pages)와 같은 뷰(View) 기술과 Servlet(서블릿)과 같은 컨트롤러(Controller) 기술을 이용하여 개발한다.
(View와 Controller를 모두 JSP가 담당하는 형태를 가진다)

모델(Model)은 보통 JavaBean과 같은 자바 객체를 사용한다.

 

➡️ JSP 하나에서 MVC 가 모두 이루어지다보니 간단한 애플리케이션에서는 유용할 수 있지만, 복잡한 애플리케이션에서는 유지보수성과 확장성이 떨어지는 단점이 있다. 재사용성도 매우 떨어지고, 읽기도 힘들어진다.

 

MVC2

[사진출처]https://chanhuiseok.github.io/posts/spring-3/

JSP와 같은 뷰 기술과 Servlet과 같은 컨트롤러 기술을 사용하되, 모델을 담당하는 컴포넌트를 추가하여 뷰와 컨트롤러를 분리한다. (MVC1과는 다르게 Controller, View가 분리되어 있다.)

 

모델, 뷰 , 컨트롤러 중 수정해야 할 부분이 있다면, 그것만 꺼내어 수정하면 된다.

모델과 뷰, 컨트롤러를 분리하여 각각의 역할에 집중할 수 있기 때문에 유지보수성과 확장성이 높아지는 장점이 있습니다.

이렇게 분리된 컴포넌트는 POJO(Plain Old Java Object)와 같은 자바 객체를 사용하며, 비즈니스 로직을 처리하고 데이터를 가공한다.

 

✨ MVC1 뷰와 컨트롤러를 하나의 파일에 함께 작성하여 처리하는 방식으로 단순하고 간단한 애플리케이션에서는 유용할 수 있으나, 복잡한 애플리케이션에서는 유지보수성과 확장성이 떨어진다.

 MVC2는 모델과 뷰, 컨트롤러를 분리하여 각각의 역할에 집중할 수 있기 때문에 유지보수성과 확장성이 높다.


스프링의 MVC 처리과정

인프런 -  스프링 MVC 1편

클라이언트의 요청(Request)을 처리하는 과정은 다음과 같은 순서로 이루어진다.

  1. 클라이언트 요청(Request) 처리
    • 클라이언트에서 HTTP 요청(Request)을 보낸다.
    • DispatcherServlet이 이 요청을 받아들인다.
  2. HandlerMapping
    • DispatcherServlet은 HandlerMapping을 이용해 요청(Request)에 해당하는 Controller를 찾는다.
  3. Controller 처리
    • 찾은 Controller는 요청(Request)을 처리하고, 결과를 Model 객체나 ModelAndView 객체에 담아 DispatcherServlet에 반환한다.
  4. ViewResolver
    • DispatcherServlet은 ViewResolver를 이용해 요청(Request)에 해당하는 View를 찾는다.
  5. View 처리
    • 찾은 View는 Model 객체나 ModelAndView 객체에 담긴 데이터를 이용하여 클라이언트에게 응답(Response)을 보낸다
  6. 클라이언트 응답(Response) 처리
    • 클라이언트는 응답(Response)을 받고, 이를 처리한다.

 

https://velog.io/@eunhye_k/MVC-%ED%8C%A8%ED%84%B4%EC%9D%98-%EC%9D%B4%ED%95%B4 https://kim6394.tistory.com/161

https://jeong-pro.tistory.com/96

https://chanhuiseok.github.io/posts/spring-3/

https://hanamon.kr/mvc%EB%9E%80-mvc-design-pattern/

https://www.boostcourse.org/web326/lecture/58979?isDesc=false 

 

728x90

댓글