MVC Pattern(Model, View, Controller)

업데이트:

  • 연구주제 : MVC Pattern(Model, View, Controller)
  • 연구목적 : MVC 패턴의 이해와 실전 이용
  • 연구일시 : 2020년 1월 28일 13:00~18:00
  • 연구자 : 이재환 ljh951103@naver.com
  • 연구장비 : HP EliteDesk 800 G4 TWR
  • 관련연구 : MVC, MVC Pattern, Design Pattern


서론

오늘 웹 프로그래밍 특강에서 MVC패턴을 이용하여 웹 개발을 수행하였다.
사실 MVC패턴은 작년 학기 중, 소프트웨어 공학 강의시간에 살짝 배웟었다.
하지만 이론상 내용을 배웠고 실제로 다뤄본적은 없기 때문에 오늘 실습을 진행하면서 낯선 부분이 많았다. 따라서 MVC 패턴을 한번 알아보도록 하겠다.


본론

디자인 패턴?

사실 MVC 패턴은 소프트웨어 공학의 수많은 디자인 패턴 가운데 한 가지 종류이다.
따라서 MVC 패턴을 알기 전에 디자인 패턴을 먼저 알아야한다.
소프트웨어 공학의 관점에서 디자인 패턴이라함은 다음과 같다.

객체 지향 프로그래밍을 설계할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴  
즉, 다음과 같다.  
소프트웨어를 설계할 때, 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때,  
재사용할 수 있는 훌륭한 해결책

이러한 디자인 패턴에서 특정 패턴에 따른 수많은 패턴이 존재한다. 예를들면 다음과 같은 패턴들이 있다.

image

우리는 디자인 패턴이 목적이 아니라 MVC패턴이 목적이기 때문에 간단히 디자인 패턴이 뭔가에 대한 질문에 답변을 할 수 있을 정도만 하고 넘어가겠다.


MVC 패턴

MVC 패턴 또한 다른 디자인 패턴과 목적은 다르지 않다. 소프트웨어릐 구조를 더 쉽게 유지하고 수정하기 위한 용도로 MVC 패턴을 사용한다.

MVC 패턴은 다음과 같이 모델, 뷰, 컨트롤러 세 부분으로 나뉜다.


모델(Model): 함축된 데이터

모델은 내부 비지니스 로직을 처리하기 위한 역할을 한다. 즉, 애플리케이션이 무엇을 할 것인지를 정의하는 애플리케이션의 주춧돌이라고 할 수 있다.

조금 더 자세히 말하면 뷰와 컨트롤러는 모델에 의존하지만 모델은 화면이나 컨트롤러에 독립적이다.
모델은 데이터와 데이터가 동작하는 방식을 제공한다. 따라서 모델은 프로그램 데이터의 무결성을 유지하는 책임을 진다.


뷰(View): 데이터의 표현

뷰는 컨트롤러 하위에 종속되어 모델이나 컨트롤러가 보여주려고 하는 모든 필요한 것들을 보여준다. 즉, 화면에 무엇인가를 보여주기 위한 역할을 한다.

뷰는 복잡한 로직이 포함되어서는 안된다. 단순 시간화를 표현하기 때문이다. 뷰에는 HTML, XML 등이 포함된다.


컨트롤러(Controller): 모델과 뷰의 연결고리

컨트롤러는 모델이 어떻게 처리할지를 알려주는 역할을 한다. 즉, 데이터를 받고 시스템의 다른 부분에 전달한다. 따라서 시스템 요소의 연결고리가 된다.

세 가지 요소를 종합해보면 우리는 다음이 최적화된 패턴을 구성하는 것이 가장 이상적이다.

똑똑한 모델, 최소한의 컨트롤러, 멍청한 뷰

결국 핵심은 뷰와 컨트롤러는 모델에 의존하지만 모델은 화면 표시와 컨트롤러와 독립적이라는 것이다.
모델에 대한 작업을 할 때, 애플리케이션 로직이나 화면상 표현에 영향을 주지 않는다.


image

그럼 이런 모델, 뷰, 컨트롤러의 패턴요소가 어떻게 동작하는 걸까?
다음 사진을 보면 사용자와의 모델, 뷰, 컨트롤러 간의 상호작용 흐름을 볼 수 있다.

  1. 사용자가 애플리케이션과 컨트롤러에 최초 처리를 요청한다.

  2. 그 후, 모델에서 데이터 생성, 갱신, 삭제라는 조작을 한다.

  3. 그리고 모델은 이 결과를 컨트롤러에 전달한다.

  4. 컨트롤러는 뷰에 결과를 전달하여 결과적으로 뷰는 사용자가에 응답을 보여준다.


MVC 모델의 특징

이러한 MVC 패턴이 다른 디자인 패턴과 구분되는 몇 가지 특징들이 있다. 그럼 어떠한 장점 때문에 MVC 패턴을 사용하는 걸까?

  • 애플리케이션을 세 부분으로 분리함으로써 더 이해하기 쉬워지고 부속간의 의존성이 낮아진다.
  • 개발자들이 각각 특정 로직 코드에만 집중할 수 있도록 업무를 분할할 수 있다.
  • 로직에 영향을 주지 않고 화면 표시를 수정할 수 있다.
  • 화면 표시에 영향을 주지 않고 로직을 수정할 수 있다.
  • 뷰를 수정하지않고 사용자 동작에 반응하는 코드를 수정할 수 있다.

따라서 우리는 이러한 특징을 바탕으로 MVC 패턴을 사용한다.
실제로 우리가 MVC 패턴을 주로 사용하는 이유는 역시나 개발자의 업무 분담과 유지보수에 용이하다는 점이다.

다시 말하자면 사용자가 보는 페이지, 데이터처리, 컨트롤 3가지로 하나의 애플리케이션을 만들기 때문에 개발자들은 각각 맡은바에 집중할 수 있다.
공장을 예로들면 작업자들은 각각의 역할을 담당하며 업무를 효율적으로 처리하게 된다. 이 예와 같다고 보면 된다.

또한 이렇게 각자의 역할에 집중하게 되어 유지보수성, 애플리케이션의 확장성, 유연성이 증가하고 중복코딩이라는 문제점을 방지할 수 있다.


MVC 패턴의 예

MVC 패턴을 사용하는 프레임워크는 다음과 같은 종류들이 있다.

image

image

image

image

위에서 부터

  • 구글의 AngularJS

  • php의 코드이그나이터

  • 파이썬의 Django

  • 페이스북의 React

MVC 패턴의 단점

그럼 이렇게 좋아보이는 MVC패턴은 장점만 존재하는가? 그렇지않다.
MVC 패턴은 프로그램 규모가 커져서 대규모 프로그램이 되면 문제가 발생한다.
다수의 View와 Model, Controller가 복잡하게 연결되어 대규모 MVC 애플리케이션이 되기 때문이다. 따라서 여러가지 Side-Effect가 발생할 수 있다.


결론

지금까지 MVC 패턴에 대해 알아보았다. MVC패턴이 강력한 패턴인 것은 분명하지만 단점은 명확히 존재한다.

이렇듯 모든 디자인 패턴은 제각각의 자신만의 특징을 지니고 있어서 개발자들은 본인의 개발 애플리케이션에 맞게 디자인 패턴을 설계하여 사용할 수 있다.


향후과제

여러가지 디자인 패턴의 비교


참고자료

https://m.blog.naver.com/jhc9639/220967034588
https://jayzzz.tistory.com/40
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


Writer: Jae-Hwan Lee

댓글남기기