Spring MVC? MVC 패턴? 뭐가 다른 건가

2022. 9. 28. 00:28Spring

728x90

스프링의 정석(이하 스정)에서 Spring MVC 에 대한 이론적인 정리를 했을 때 다음과 같았다.

Spring MVC 패턴

1. 컨트롤러의 코드들을 크게 분류하면 3 가지이다

  1. 입력
  2. 처리
  3. 출력

2. 각 컨트롤러마다 처리의 과정은 다르지만, 입출력의 과정은 거의 비슷하다. 

즉, 모든 컨트롤러가 위의 3 가지를 다 가지고 있다면 입출력 코드의 중복을 초래한다.

 

3. 이를 위해 모든 입력을 받는 DispatcherServlet 을 만들고,

들어온 입력에 대해 처리를 하는 Controller,

그리고 이러한 처리의 결과를 출력한 View 로 나누게 된다.

 

4. 이때 Controller 와 View 는 별개이므로,

처리의 결과물을 출력쪽으로 보내기 위한 매개체로 Model 을 사용한다.

그리고 이는 DispatcherServlet 이 만든다.

 

 

이렇게 이해를 하고 나서, 다른 공신력 있는 사이트에서는 뭐라고 설명하는 지 궁금해

"MVC 패턴" 이라는 키워드로 검색을 했는 데 다음과 같은 설명이 나왔다.

MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴입니다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다.

이러한 "관심사 분리" 는 더나은 업무의 분리와 향상된 관리를 제공합니다.

MVC 소프트웨어 디자인 패턴의 세 가지 부분은 다음과 같이 설명할 수 있습니다.
모델: 데이터와 비즈니스 로직을 관리합니다.
뷰: 레이아웃과 화면을 처리합니다.
컨트롤러: 명령을 모델과 뷰 부분으로 라우팅합니다.

출처 : https://developer.mozilla.org/ko/docs/Glossary/MVC
이게 무슨 말이지...??? MVC 패턴이나 Spring MVC 패턴이나 같은 뜻이 아닌가...
비즈니스 로직은 Controller 에서 호출하는 Service 가 처리하는 거 아니었나..
뭔지는 모르겠지만 일단 둘은 다른 의미를 뜻하는 단어네...

라는 의문이 들어 MVC 패턴에 대해 알아보았다.

 

먼저 MVC 패턴은 디자인 패턴 중 하나라는 것은 알고 있었기에, 

먼저 디자인 패턴에 대한 단어를 검색해보았다.

3. 디자인 패턴 (Design Pattern)
ㅇ 모든 프로그램 형식에,
- 일반적으로 적용 가능한,
- 자료 구조 및 프로그램 구조를 다루는 이론

ㅇ 주로, 소프트웨어 아키텍처 수준 보다 낮은 수준의 설계 문제에서,
- 재사용 가능한 솔루션을 제공하기 위함

출처 : http://www.ktword.co.kr/test/view/view.php?nav=2&no=6552&sh=%EB%94%94%EC%9E%90%EC%9D%B8+%ED%8C%A8%ED%84%B4

"디자인 패턴 = 일반적으로 적용 가능한 프로그램 구조를 다루는 이론"  라고 정리할 수 있을 것이다.

 

그렇다면 MVC 또한 디자인 패턴중 하나이니 프로그램 구조를 다루는 이론일 것임을 일단 알 수 있다.

그렇다면 어떻게 프로그램 구조를 다루는 이론인가에 대해 구글링을 해보니 다음과 같았다.

MVC Pattern stands for Model-View-Controller Pattern. This pattern is used to separate application's concerns.
[해석]
MVC 패턴은 Model-View-Controller Pattern의 약자로, 애플리케이션의 관심사를 분리하는 데 사용되는 패턴입니다.
[출처] : https://www.tutorialspoint.com/design_pattern/mvc_pattern.htm

The Model View Controller (MVC) design pattern specifies that an application consist of a data model, presentation information, and control information. The pattern requires that each of these be separated into different objects.
MVC is more of an architectural pattern, but not for complete application. MVC mostly relates to the UI / interaction layer of an application. You’re still going to need business logic layer, maybe some service layer and data access layer.
[해석]
MVC(Model View Controller) 디자인 패턴은 애플리케이션이 데이터 모델, 프리젠테이션 정보, 제어 정보로 구성되도록 명세합니다. 이 패턴은 이러한 각각을 서로 다른 객체로 분리함을 요구합니다.
MVC는 완전한 애플리케이션을 위한 것은 아니라 아키텍처 패턴에 가깝습니다. MVC는 대부분 애플리케이션의 UI/상호작용 레이어와 관련됩니다. 여전히 비즈니스 로직 레이어, 일부 서비스 레이어 및 데이터 액세스 레이어가 필요할 것입니다.
[출처] : https://www.geeksforgeeks.org/mvc-design-pattern/


Model–view–controller(MVC) is a software architectural pattern commonly used for developing user interfaces
 that divide the related program logic into three interconnected elements. This is done to separate internal representations of information from the ways information is presented to and accepted from the user.
[해석]
MVC(Model-View-Controller)는 사용자 인터페이스 개발에 일반적으로 사용되는 소프트웨어 아키텍처 패턴입니다. 관련된 프로그램 로직을 세 개의 상호 연결된 요소로 나누는 것입니다. 이것은 정보가 사용자에게 제공되고 사용자로부터 수락되는 방식에서 정보의 내부 표현을 분리하기 위해 수행됩니다.
[출처] : https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

(번역은 구글 번역기를 통해 했지만, 문장과 문장 사이의 매끄러움을 위해 의역이 있습니다)

즉 MVC 패턴은 UI 와 비즈니스 로직을 분리시키기 위해 고안된 디자인 패턴이고,

분리하기 위해 Model, View, Controller 이 3 가지로 분리했다는 걸 알 수 있다.

 

하지만 여전히 MVC 패턴 과 Spring MVC 의 차이를 모르겠어서,

Spring 공식 문서를 통해 찾아보기로 했다.

근데 공식 문서를 찾아보니, Spring Framework 의 주요 기능 중 하나가 Spring MVC 라는 부분을 읽을 수 있었다.

그래서 Spring Framework, Spring MVC 에 대해 찾아보기로 했다.

Spring Framework 란?
The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.
[해석]
Spring Framework는 모든 종류의 배포 플랫폼에서 최신 Java 기반 엔터프라이즈 애플리케이션을 위한 포괄적인 프로그래밍 및 구성 모델을 제공합니다.
[출처] : https://spring.io/projects/spring-framework


Spring MVC 이란?
Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source module (spring-webmvc), but it is more commonly known as “Spring MVC”.
(중략)
Spring MVC, as many other web frameworks, is designed around the front controller pattern where a central 
Servlet, the DispatcherServlet, provides a shared algorithm for request processing, while actual work is performed by configurable delegate components. 
[해석]
Spring Web MVC는 Servlet API를 기반으로 구축된 독창적인 웹 프레임워크로, 처음부터 Spring Framework에 포함되어 왔으며, 정식 명칭인 "Spring Web MVC"는 소스 모듈(spring-webmvc)의 이름에서 따온 것으로, 그러나 "Spring MVC"로 더 일반적으로 알려져 있습니다.

다른 많은 웹 프레임워크와 마찬가지로 Spring MVC는 중앙에 있는 front controller 패턴을 중심으로 설계되었습니다. DispatcherServlet인 Servlet은 요청 처리를 위한 공유 알고리즘을 제공하지만 실제 작업은 구성 가능한 대리자 구성 요소에 의해 수행됩니다.

[출처] : https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc

(Front Controller 패턴을 여기서 설명하기에는 글이 너무 길어져, 다른 분의 블로그를 참조해주세요! )

 

즉 Spring Framework 란 IOC, AOP, Web MVC 등등 많은 모듈들이 있는 Framework 이고,

Spring MVC 는 MVC 디자인 패턴에 기반해 웹 어플리케이션을 만들기 위한 Spring 기능 중 하나임을 알 수 있다.

728x90