웹개발을 하면서 MVC 패턴을 숨쉬듯이 사용하고 있지만, 누군가에게 MVC 패턴을 설명하라고 한다면 빠르게 답변이 나오지 않을 것 같아 MVC 패턴에 대해서 한번 정리를 하려고합니다.
1. MVC 패턴이란?
MVC 패턴은 Model-View-Controller의 약자입니다. 응용프로그램을 3가지의 구성요소로 역할을 나누어서 개발하는 방법론입니다.
Controller : Model과 View를 연결해주는 역할을합니다. Controller는 Model을 통해 필요한 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어하여 사용자에게 전달합니다. Model과 View가 각각 무엇을 해야할지를 알고 있으며 통제합니다. Model과 View가 서로 이야기 할 수 없게 합니다.
Model : 어플리케이션이 "무엇"을 할 것인지에 대해서 정의합니다. 내부 비즈니스 로직을 처리하기 위한 역할을 합니다.
- (ex) 데이터베이스, 애플리케이션의 정보, 상수, 변수 등의 데이터, 정보들의 가공을 책임지는 컴포넌트
- 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
- 뷰나 컨트롤러에 대해서 어떠한 정보도 알고 있지 않다.
- 변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야 한다.
View : 화면에 무엇인가를 보여주기 위한 역할을 합니다. input박스, 체크박스 등의 사용자 인터페이스 요소를 나타냅니다. 컨트롤러 하위에 종속되어, 모델이나 컨트롤러가 보여주려고 하는 모든 것들을 보여줍니다. 또한 사용자의 입력을 받아서 모델의 데이터를 업데이트 합니다.
- 모델이 가지고 있는 정보를 따로 저장하면 안된다.
- 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야한다. 데이터를 받으면 표시해주는 역할만 함.
- 모델과 같이 변경이 일어났을때 변경통지에 대한 처리방법을 구현해야한다.
2. MVC 패턴을 사용하는 이유
어플리케이션을 사용자가 보는 페이지와 데이터 처리, 그리고 중간에서 이 두가지를 연결해주는 컨트롤러로 나눔으로써 각각의 요소가 맡은 임무에만 집중할 수 있게 됩니다. 하나의 역할만 담당해서 처리를 하기 때문에 효율적입니다. 이렇게 서로 분리되어 각자의 역할에 집중할 수 있도록 만든다면 어플리케이션의 "유지보수성", "확장성", "유연성"이 증가합니다. 또한 중복코딩 문제점도 해결할 수 있습니다.
3. MVC 패턴의 한계
MVC에서 View는 Controller에 연결되어 화면을 구성하는 단위요소이므로 다수의 View를 가질 수 있습니다. 또한 Model은 Controller를 통해서 View와 연결될 수 있지만 View에 연결 될 수 있는 Model도 여러개가 될 수 있습니다. 결국 뷰와 모델이 서로 의존성을 띄게 됩니다. 즉, 복잡한 화면과 데이터의 구성이 필요한 상황이라면 Controller에 다수의 Model과 View가 복잡하게 연결되어 있는 상황이 생길 수 있습니다.
MVC가 너무 복잡하고 비대해져서 새로운 코드를 추가할때 크고 작은 문제점을 가지고 소스 분석과 테스트도 어렵습니다. 이런 형태의 MVC를 대규모 MVC 어플리케이션 (Massive ViewController)이라고 합니다. 복잡하게 엮여있는 모델과 뷰는 여러 Side-Effect를 불러와서 프로그램 운영을 힘들게 합니다.
이런 문제점을 해결하기 위한 다양한 패턴들이 파생되었습니다. 아래의 패턴들은 추후 공부하여 작성하도록 하겠습니다.
* MVP, MVVM, Viper, Clean Architecture, Flux, Redux, RxMVVM….
REFERENCE
'디자인패턴' 카테고리의 다른 글
템플릿 메소드(Template Method Pattern) 패턴이란? (0) | 2020.07.13 |
---|---|
빌더 패턴(Builder Pattern)이란? (0) | 2020.07.13 |
팩토리 메소드 패턴(Factory Metod Pattern)이란? (0) | 2020.07.13 |
디자인패턴이란 (0) | 2019.10.08 |