Good Day

[MVC 패턴] 간략한 MVC 패턴 가이드 본문

개발/기타

[MVC 패턴] 간략한 MVC 패턴 가이드

영악 2015. 5. 22. 14:13

요새 웹이든 앱이든 서버든 대부분 MVC패턴 정도는 알아야 '아~ 내가 이렇게도 짤 수 있구나' 싶다라는 이야기를 종종 듣는다.

큰 도움은 되지 않겠지만 간략하게 MVC 패턴에 대해서 개념을 잡는분들께 도움이 되길 바라면서 정리를 해본다.


※ 이 가이드는 웹상 특히 php 기반의 MVC 패턴을 이야기 하므로 클라이언트나 다른 분야의 MVC와는 조금 다를 수 있습니다.



1. MVC(Model-View-Controller) 패턴이란 무엇인가?


위키백과에 이르면 다음과 같이 말한다.


모델-뷰-컨트롤러(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델애플리케이션의 정보(데이터)를 나타내며, 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러데이터와 비즈니스 로직 사이의 상호동작을 관리한다.


단순히 이야기 하자면 컨트롤러가 모델과 뷰 사이에서 커뮤니케이션을 한다는 이야기다

(어...? 아빠와 아들을 챙기는...엄마!?)





예를들어 MVC 패턴이 없는 기존에는 위와 같은 형식으로 프로그래밍을 했다면,

MVC 패턴을 적용하면 아래와 같은 방식으로 개발하여 좀더 분리된 개발이 가능한 것이다.





쉽게 설명하기 위해 PHP 파일을 나눠서 구성했지만,

이 방법 외에도 클래스를 나누거나 몇가지 수정하고 나눠서 개발하는 경우가 많으니 참고만 하자.



< 위키피디아에서는 위와 같은 이미지로 MVC 패턴을 소개하고 있다. >





2. MVC(Model-View-Controller) 패턴의 구성요소


MVC 패턴의 구성요소는 아래와 같이 세 가지 요소로 나누며,

각각의 구성요소 사이에는 다음과 같은 관계를 가지고 있다.


    • 컨트롤러
      컨트롤러는 모델 및 뷰의 상태를 변경할 수 있다.
      예를들어 컨트롤러에서 특정 모델을 통해 DB를 조회하거나 데이터를 수정하거나 기타등등의 데이터 편집이 가능하고,
      아니면 보여주는 View를 변경하여 같은 컨트롤러지만 다른 View를 보여줄 수 있다.

    • 모델
      모델의 상태에 변화가 있을때 컨트롤러와 뷰에 이를 전달하는데,
      이때 갱신된 데이터를 가지고 뷰 혹은 컨트롤러는 항상 최신 데이터를 보여줄 수 있다.

      다양한 MVC패턴중에 필자가 가장 좋아하는 구성은 Model 접근은 Controller에서만 처리하고,
      Controller에서 데이터를 View에 넘겨주는 형식의 구성이다(=View는 Model에 접근하지 않는다)

      이 외에도 모델에서 먼저 정보를 통보하거나 전달하지 않고 뷰 혹은 컨트롤러가 읽어오기도 한다.


    • 뷰는 사용자가 볼 결과물을 나타낸다.
      웹용 프레임워크에선 주로 이곳에 html과 프론트쪽 구성을 처리한다.


3. MVC(Model-View-Controller) 패턴의 구성 예


    • Codeigniter

<출처 Codeigniter 한국 사용자 포럼(링크)>


위에 이미지를 보면 Index.php -> 라우팅 -> 보안 -> 컨트롤러(모델과 커뮤니케이션) -> 뷰 -> 캐싱 -> 출력 형식으로 이루어지는 것을 볼 수 있다.



4. 설명 끝


설명이 부족해서 더 궁금한 사항이나 구성 예에 들어갔으면 좋겠다 싶은 것이 있으면 덧글이나 메일주세요!

갑자기 생각나서 정리한거라 부족해도 양해 부탁드립니다.





참고

위키피디아. 『모델-뷰-컨트롤러』. http://goo.gl/zXH64T
Codeigniter 한국사용자 포럼. 『CI 한글 매뉴얼(2.1.0) - CI 동작 개념도 Application Flow Chart』. http://goo.gl/q7itYs




'개발 > 기타' 카테고리의 다른 글

[Tool] 이미지맵 생성 프로그램 "Imagemapic 2.0"  (0) 2015.12.29
[jenkins] 최소사양  (2) 2015.06.23
[Paypal] 페이팔! 페이팔은 좋은친구!  (0) 2015.05.28
Comments