Posts [Spring] Spring의 MVC 패턴과 MVC1과 MVC2 비교
Post
Cancel

[Spring] Spring의 MVC 패턴과 MVC1과 MVC2 비교


[Spring] Spring Framework의 MVC 패턴 살펴보기

스프링 프레임워크는 MVC 패턴을 준수합니다. 여기서 말하는 MVC 패턴이란 무엇일까요?

출처 : 위키백과 - 모델-뷰-컨트롤러

  • 소프트웨어 디자인 패턴 중 하나

  • M (Model) / V (View) / C (Controller)

    • Model : 어플리케이션의 정보나 데이터, DB 등을 말합니다.
    • View : 사용자에게 보여지는 화면, UI를 말합니다. 모델로부터 정보를 얻고 표시합니다.
    • Controller : 데이터와 비즈니스 로직 사이의 상호 동작을 관리합니다. 즉, 모델과 뷰를 통제합니다. MVC 패턴에서 View와 Model이 직접적인 상호 소통을 하지 않도록 관리합니다.

이렇게 모델, 뷰, 컨트롤러의 세 가지 요소로 나누어진 패턴을 MVC 패턴이라고 합니다.

MVC 패턴은 크게 MVC 1 패턴과, 스프링이 채택한 MVC 2 패턴으로 나눌 수 있습니다.

MVC1

MVC1 패턴의 경우 View와 Controller를 모두 JSP가 담당하는 형태를 가집니다. 즉 JSP 하나로 유저의 요청을 받고 응답을 처리하므로 구현 난이도는 쉽습니다.

단순한 프로젝트에는 괜찮겠지만 내용이 복잡하고 거대해질수록 이 패턴은 힘을 잃습니다. JSP 하나에서 MVC 가 모두 이루어지다보니 재사용성도 매우 떨어지고, 읽기도 힘들어집니다.유지보수에 있어서 문제가 발생합니다.


MVC2

MVC2 패턴은 널리 표준으로 사용되는 패턴입니다. 요청을 하나의 컨트롤러(Servlet)가 먼저 받습니다. 즉 MVC1과는 다르게 Controller, View가 분리되어 있습니다. 따라서 역할이 분리되어 MVC1패턴에서의 단점을 보완할 수 있습니다. 그러므로 개발자는 M, V, C 중에서 수정해야 할 부분이 있다면, 그것만 꺼내어 수정하면 됩니다. 따라서 유지보수에 있어서도 큰 이점을 가집니다.

MV2는 MVC1 패턴보다 구조가 복잡해질 수 있지만, 개발자가 이러한 세부적인 구성까지 신경쓰지 않을 수 있도록 각종 프레임워크들이 지금까지 잘 발전되어 왔습니다. 그 중에서 대표적인 것이 바로 스프링 프레임워크입니다.


Spring Framework의 MVC2 패턴

이제 스프링의 MVC 패턴에 대해 알아보겠습니다.

직접 스프링 프로젝트를 실행해 보면 그 구조를 보다 직접적으로 확인할 수 있습니다. 이 부분은 아래 적어둔 포스팅의 MVC 패턴 부분에 적혀 있으니 참고해 주시면 좋겠습니다.

Pet Clinic 프로젝트(2/4) : https://chanhuiseok.github.io/posts/spring-2/

스프링에서는 유저의 요청을 받는 DispathcerServlet이 핵심입니다. 이것이 Front Controller의 역할을 맡습니다.

Front Controller(프런트 컨트롤러)란, 우선적으로 유저(클라이언트)의 모든 요청을 받고, 그 요청을 분석하여 세부 컨트롤러들에게 필요한 작업을 나눠주게 됩니다.

자세한 과정은 위의 이미지를 참고하시면 됩니다. 그리고 위의 모든 과정은, 스프링 프로젝트를 실행하여 디버깅할 시 로그에서 모두 확인할 수 있습니다. 위에서 링크한 포스팅 중 일부 사진을 가져오면 다음과 같습니다.

DispatcherServlet과 HadndlerMapping, ViewResolver 등이 보입니다. 이로써 스프링은 MVC2 패턴을 준수하고 있음을 직접적으로 확인할 수 있습니다.