CS로 알아보는 프로젝트 - Spring MVC 일까? (개인 견해 포함)

 

안녕하세요.

 

오늘은 Spring이 MVC 일까? 에 대해 다루어보고 저의 생각을 녹여볼까 합니다. 

 

**주의 : 본 포스팅은 견해가 포함되어 있습니다. **

 

물론 MVC 패턴이 맞습니다.

 

하지만 의문이 드는 점이 있어 해당 포스팅을 준비하게 되었으니 여러분들의 의견도 적극적으로 댓글 남겨주시면 감사하겠습니다.

 

 

 

여러분들이 사용하고 있는 Spring은 어떤 패턴을 가지고 있나요?? 

 

스크롤을 내리기 전에 속으로 대답해 주세요.

 

 

아마 대부분 MVC 패턴이라고 말씀해 주셨을 거라 생각합니다.

 

그럼 여러분이 알고 있는 MVC 모델에 대해 말씀해 보시고 M, V, C 가 어떤 역할을 하는지에 대해 설명해 보세요!!!

 

MVC 패턴이란 아래와 같이 설명됩니다. 

  • Model, View, Controller로 이루어진 디자인 패턴
  • 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있는 패턴

장점 : 재사용성과 확장성이 용이하다

단점 : 복잡해질수록 모델과 뷰의 관계가 복잡해진다

 

 

그럼 각각의 Model, View, Controller에 대해 하나하나 알아볼까요?? 

 

먼저 Model의 경우, 어플리케이션의 데이터인 데이터 베이스, 상수, 변수 등을 의미하고 있습니다

 

글자의 위치, 포멧, 위치 정보 등 데이터에 대한 모든 정보를 가지고 있죠.

 

뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신하는 역할을 수행합니다.

 

그럼 View는 무엇일까요??

 

InputBox, CheckBox, TextArea 등 사용자 인터페이스 요소를 나타냅니다.

 

즉, 모델을 기반으로 사용자가 볼 수 있는 화면을 의미하게 됩니다.

 

또한, 화면에 대한 정보만 가지고 있고 모델이 가지고 있는 정보를 가지고 있지 않아야 합니다.

 

변경이 발생하면 Controller에 전달합니다.

 

 

그럼 마지막으로 Controller는 무엇을 의미할까요?

 

하나 이상의 모델과 하나 이상의 뷰를 잇는 다리 역할을 하며 이벤트 등 메인 로직을 담당하고 있습니다. 

 

모델과 뷰의 생명주기를 관리하며, 모델이나 뷰의 변경 통지를 받으면 이를 해석해서 각각의 각각의 요소에 해당하는 내용에 대해 알려주는 역할을 수행합니다. 

 

그럼 Spring에서의 MVC는 어떤 것일까요?? 

 

왜 그렇게  MVC 패턴이라고 불리는 걸까요?

 

아래 이미지와 같이 Spring을 REST 하게 사용하기 전에는 JSP를 통해 View를, Servlet을 통해 Controller를, DTO, DAO, Service를 통해 Model을  담당하고 있었습니다.

 

그렇기 때문에 완벽하게 MVC 구조로 Spring을 활용하고 있었죠. 

 

하지만 현재와 같이 Spring을 RESTful 하게 사용하는 지금.. 과연 MVC 패턴을 활용한다고 말할 수 있을까요?? 

이러한 의문이 발생하게 된 이유를 아래에서 다루어 보겠습니다. 

 

지금처럼 WAS와 Web Server의 구분이 명확하지 않던 시절에는 아파치와 같은 환경에서는 순수 HTML을 작성하고 Spring을 통해 View를 반환받는 형식으로 코딩을 진행했다고 합니다.

 

하지만 처리해야 하는 데이터의 량이 많아지고 동시에 접속하는 유저가 많아지다 보니 WAS인 Spring에 부담이 커지게 되어 해당 영역을 분리하여 개발을 진행하게 되었다고 합니다.

 

 

이로 인해 MVVM 패턴이 나오게 되었는데요. 

 

FE영역 와 BE를 분리하여 개발을 진행할 수 있도록 개발 영역이 분리된 것입니다.

 

View를 React나 Vue와 같은 프론트 프레임워크에서 개발하고 Spring으로부터 ViewModel를 반환받아 사용하는 형태로 개발을 수행하고 있는 것이죠.

 

그렇기 때문에 현재 저희가 보고 있는 다음과 WAS와 Web Server를 분리한 형태로 개발을 진행하고 있는 것이라 생각합니다.

 

 

여기까지 보셨다면 Spring은 현재 MVC 패턴인가에 대한 의문이 드는 분도 있으리라 생각합니다. 

 

" View에 해당하는 부분이 없으니까 MC 패턴 아니야?? ": 

 

"JSON 객체를 View라고 보면 View에 해당하는 부분이 있으니까 MVC 패턴이 아닐까?? "

 

이러한 의문이 드시는 분들도 있다고 생각합니다.

 

저는 Spring이 MVC 패턴이 아니라고 부정을 못 하겠으나 확실히 이전 대비 애매해진 부분은 다수 존재한다고 생각합니다. 

 

결론적으로 MVC 패턴이지만 MVC에서 V적 요소가 굉장히 약해졌다 정도로 말씀드리고 싶습니다.

 

여러분들의 생각은 어떠한가요??? 

 

저도 다양한 분들의 의견을 들어보고 싶습니다. 아래 댓글 통해 자신의 의견을 공유해 주시면 감사하겠습니다.!!!!