https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256

😀

기본적인 설명에 대한 부분은 위키백과의 MVC 내용을 참고 하시면 좋을 것 같습니다.

모델-뷰-컨트롤러 - 위키백과, 우리 모두의 백과사전
모델-뷰-컨트롤러(Model-View-Controller, MVC)는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여…ko.wikipedia.org

MVC 패턴이 무엇인가요?

누군가 MVC를 물어보면 대답할 수 있을 줄 알았는 데,

무엇부터 이야기 해야될 지 망설이게 되는 모습에…

다시 공부도 하고 복습을 위해 정리해봤습니다.

설명한다면? 어떻게 해야되지?… 어렵네요.. 적어봅니다.읽기 전 참고사항
- 저는 잡스러운 개발자(조금씩 어려분야)이지만, iOS 개발을 메인으로 하고 있습니다. 모바일 개발자 입장에서 MVC에 대한 내용을 작성되었을 것 입니다. 😓
- 마지막에 요약한 내용을 작성해 두었습니다.

 

MVC Model-View-Controller 의 약자입니다.

개발 할 때, 3가지 형태로 역할을 나누어 개발하는 방법론입니다.

비지니스 처리 로직과 사용자 인터페이스 요소를 분리시켜 서로 영향없이 개발 하기 수월하다는 장점이 있습니다.

 

 

Model

* 모델은 클라이언트에 노출되지 않습니다.
연산처리  DB  주 된 목적입니다.
컨트롤에서 요청이 들어오면 해당 연산처리 후 정보를 return 합니다. 

 

 

Controller

* 사용자의 요청을 받고 응답을 조종합니다.
* View 요청  -->  Model 연산 -->  가공된 데이터 --> View 응답  이 과정이 컨트롤에서 전부 이루어집니다.

* nodejs에서 app.post/app.get/route.post/route.get

 

 

View

* 클라이언트에 나타나는 부분입니다.
* HTML / CSS / Javascript 등으로 꾸미고 , 움직이고, 표현하는게 가능합니다.

 

화면에 무엇인가를 보여주기 위한 역활을 합니다. 컨트롤러 하위에 종속되어, 모델이나 컨트롤러가 보여주려고 하는 모든 필요한 것들을 보여줄 것입니다. 그리고 사용자의 입력을 받아서 모델의 데이터를 업데이트를 합니다.

그리고 Controller는 Model과 View가 각각 무엇을 해야 할 지를 알고 있고, 통제합니다. 비지니스 로직을 처리하는 Model과 완전히 UI에 의존적인 View가 서로 직접 이야기 할 수 없게 합니다.

MVC의 한계

MVC에서 View는 Controller에 연결되어 화면을 구성하는 단위요소이므로 다수의 View들을 가질 수 있습니다. 그리고 Model은 Controller를 통해서 View와 연결되어지지만, 이렇게 Controller를 통해서 하나의 View에 연결될 수 있는 Model도 여러개가 될 수 있습니다.

뷰와 모델이 서로 의존성을 띄게 됩니다.

즉, 화면에 복잡한 화면과 데이터의 구성 필요한 구성이라면, Controller에 다수의 Model과 View가 복잡하게 연결되어 있는 상황이 생길 수 있습니다.

MVC가 너무 복잡하고 비대해져서, 새 기능을 추가할때마다 크고 작은 문제점을 가지고 소드 분석이나 테스트도 어렵죠. 이런 형태의 MVC를

Massive ViewController (대규모 MVC 어플리케이션)

라고 부릅니다. MVC의 한계를 표현한 용어 인 것 같습니다.

 

대부분의 사람들(당연히 저도 포함)은 MVC를 구성할 때, View와 Model을 중재하는 Controller를 작성하면 Controller의 비중이 크지 않을 것으로 생각했지만, 복잡한 화면을 구현하게 되면 대규모 MVC 어플리케이션 형태로 구현하게 되었습니다.

 

Controller는 View와 라이프 사이클과 강하게 연결되어있어서 분리할 수도 없고, 코드 분석/수정과 테스트가 모두 힘들어지죠. 그리고 복잡하게 엮어있는 모델과 뷰는 여러 Side-Effect를 불러와서 프로그램 운영을 힘들게 하지요.

 

그래서 위의 문제점을 보완한 여러 다양한!! 패턴을 파생시켰습니다.

MVP, MVVM, Viper, Clean Architecture, Flux, Redux, RxMVVM….

파생된 패턴들은 시간이 되는 데로 다시 공부하고 정리하면 글을 작성하겠습니다.

 

요약하자면.. MVCModel-View-Controller의 약자입니다. 개발할 때 3가지 형태로 구분하여 개발하는 소프트웨어 개발 방법론입니다.그 3가지 요소를 설명하면


Model은 무엇을 할지 정의합니다. 비지니스 로직에서의 알고리즘, 데이터 등의 기능을 처합니다.
Controller는 어떻게 할지를 정의합니다. 화면의 처리기능과 Model과 View를 연결시켜주는 역할을 하지요.
View는 화면을 보여주는 역활을 하지요. 웹이라면 웹페이지, 모바일이라면 어플의 화면의 보여지는 부분입니다.

 

MVC는 복잡한 대규모 프로그램을 개발을 하게 되면서 문제점이 확인되었습니다.다수의 View와 Model이 Controller를 통해 복잡하게 연결될 수 있기 때문에 Controller가 뚱뚱해지게 되는 Massive ViewController(대규모 MVC 어플리케이션)가 되어버립니다.View와 Controller가 라이브사이클에 강하게 연결되어있고, 더불어 Controller를 통해 View와 Model간에도 관계가 복잡하게 연결되어있어서 수정시 테스트가 힘들고, 파악이 어렵기 때문에 여러 Side-Effect를 불러오게 되는 문제점이 있습니다.그래서 MVC는 위 문제점을 해결하기 위해 여러 페러다임을 수용한 다양한 패턴을 파생시켰습니다.

즐거운 하루 되세요 :) 🙇‍

+ Recent posts