c9u11

MVC 패턴

MVC 패턴이란?

MVC는 Model, View, Controller를 의미한다. 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 디자인 패턴이다.

소프트웨어에서 비즈니스 로직과 화면을 구분하는 데에 중점을 두고 있으며 관심사 분리로 더 편한 관리를 제공한다.

관심사는 아래와 같이 분리한다.

구조

워낙 유명한 디자인 패턴이라 사람마다 이해하는 형태가 다르고 토폴로지를 봤을 때 그림이 다른 경우가 많다.

여기저기 글을 읽어보고 이유나 조건 등 확실히 이해가 되는 부분을 정리하여 새로 만들었다.

실선의 화살표는 항상 존재하는 관계를 의미하고 점선의 화살표는 때에 따라 필요한 관계를 의미한다.

  • Model
  • View
  • Controller

필요성

MVC의 필요성은 한마디로 정리하면 관심사 분리이다. 그렇다면 관심사 분리가 왜 중요하고 어떤 부분에서 이점을 가져다줄까?

  • 각 역할별로 분리하여 서로의 결합도를 낮출 수 있다.
  • 코드의 재사용성과 확장성을 높일 수 있다.
  • 서비스를 유지보수하고 테스트하는 데 용이하다.
  • 개발자 간의 커뮤니케이션 효율성을 높일 수 있다.

주의점

  • Model의 영역을 과하게 축소하여 Controller의 영역이 너무 커진다. (Massive Controller, Massive : 엄청난) 단순하게 데이터를 저장하는 용도로 사용한다면 데이터를 가져오는 역할을 Controller가 담당하게 되어 영역이 커질 수 있다.
  • View가 Model과 Controller의 역할을 담당하게 되어 관심사 분리가 되지않는다. 2개의 Controller에서 동일한 View를 사용한다면 컴포넌트화하여 재사용을 하고싶을텐데 이 때 컴포넌트화한 View가 Model과 Controller의 역할을 모두 담당하게 된다. 따라서 관심사 분리가 되지않아 Massive View가 될 수 있다.
  • View가 Model의 정보를 가져와 표시하는 특성을 이용해 Confirm, Alert 등 모든 정보를 Model에서 관리하여 Model의 영역이 커진다. Handler를 사용하여 Controller에서 처리하여 이를 방지할 수 있다.

결론

MVC 패턴은 특정한 역할에 대해 분담을 하는 가이드라인으로 볼 수 있다.

이 패턴을 사용하는 라이브러리나 프레임워크에 대해 조금 알아본다면 필요성과 구조에 대해 더욱 쉽게 이해할 수 있을 것이다. AngularJS와 Ember.js 등이 있으며 약간의 방식이 다르지만 MVC의 구조를 가지고있다.


참고

https://m.blog.naver.com/jhc9639/220967034588

https://developer.mozilla.org/ko/docs/Glossary/MVC