모델 뷰 컨트롤러

Model–view–controller
MVC 패턴에 대한 가능한 한 한 가지 범위 내의 상호작용 다이어그램

Model-View-Controller(MVC; 모델 뷰 컨트롤러)는 관련된 프로그램 로직을 3개의 상호 연결된 요소로 분할하는 사용자 인터페이스 개발[1] 일반적으로 사용되는 소프트웨어 아키텍처 패턴입니다.이것은,[2][3] 정보의 내부 표현을, 유저에게 정보를 제시하거나 유저로부터 정보를 받아들이는 방법으로부터 분리하기 위해서 행해집니다.

이전에는 데스크톱 그래픽 사용자 인터페이스(GUI)에 사용되던 이 패턴은 웹 애플리케이션 [4]설계에 널리 쓰이게 되었습니다.인기 있는 프로그래밍 언어에는 패턴 구현을 용이하게 하는 MVC 프레임워크가 있습니다.

역사

그래피컬 유저 인터페이스의 초기 개발의 중요한 통찰력 중 하나인 MVC는 소프트웨어 구조를 [5]책임 측면에서 설명하고 구현하는 최초의 접근법 중 하나가 되었습니다.

Trygve Reenskaug는 1970년대 [6][7][8]: 330 후반 Xerox Palo Alto Research Center(PARC)에서 Smalltalk-79를 연구하면서 MVC를 만들었습니다.그는 사용자가 크고 복잡한 데이터 세트와 상호작용하는 모든 프로그램을 구성하는 데 사용할 수 있는 패턴을 원했습니다.그의 디자인은 처음에 4가지 부분으로 구성되었다.모델, 뷰, 사물 및 편집기.다른 Smalltalk 개발자들과 상의한 후,[6] 그와 나머지 그룹은 대신 Model, View, Controller로 결정했다.

최종 설계에서 모델은 순수하고 직관적으로 프로그램의 일부를 나타냅니다.보기는 모델을 시각적으로 표현한 것으로, 사용자에게 표시할 모델에서 데이터를 검색하고 사용자와 모델 간에 요청을 주고 받습니다.컨트롤러는 사용자 인터페이스의 조직적인 부분으로, 화면에 여러 보기를 배치 및 조정하고 사용자 입력을 수신하여 적절한 메시지를 기본 보기로 보냅니다.또한 이 설계에는 특정 보기를 수정하는 데 사용되는 특정 유형의 컨트롤러로서 해당 [6]보기를 통해 작성되는 편집기가 포함되어 있습니다.

Smalltalk-80은 이 버전에서 [6]진화한 MVC 버전을 지원합니다.그것은 추상적인 것을 제공한다.View그리고.Controller클래스는 물론 서로 다른 일반 위젯을 나타내는 다양한 구체적인 하위 클래스입니다.이 스킴에서는View사용자에게 정보를 표시하는 방법을 나타냅니다.Controller사용자가 와 대화하는 방법을 나타냅니다.View.aView모델 오브젝트에도 결합되지만 그 오브젝트의 구조는 어플리케이션프로그래머에게 맡겨집니다.Smalltalk-80 환경에는 특정 모델, 뷰 및 컨트롤러의 구조를 나란히 보기 위한 개발 도구인 "MVC Inspector"도 포함되어 있습니다.[9]

1988년, 두 명의 전직 PARC 직원이 작성한 JOT(The Journal of Object Technology)에 실린 기사에서 MVC는 Smalltalk-80 개발자들에게 일반적인 "프로그래밍 패러다임 및 방법론"으로 제시되었습니다.그러나 이들의 계획은 렌스카우그 외 연구진 및 Smalltalk-80 참고서들이 제시한 것과 달랐다.이들은 그래픽 관련 문제를 다루는 뷰로 정의했습니다. 컨트롤러는 사용자 입력을 받아 하나 이상의 뷰와 하나의 [10]모델만 상호작용하는 보다 추상적이고 일반적으로 보이지 않는 객체입니다.

MVC 패턴은 이후 [11]진화하여 계층적 모델-뷰-컨트롤러(HMVC), 모델-뷰-어댑터(MVA), 모델-뷰-프레젠터(MVP), 모델-뷰-뷰 모델(MVVM) 등 MVC를 다른 컨텍스트에 적응시키는 변형을 낳았다.

웹 응용 프로그램에서 MVC 패턴의 사용은 1996년 NeXTWebObjects가 도입된 이후 증가했습니다.이 웹 오브젝트는 원래 Objective-C(Smalltalk에서 많이 차용)로 작성되었으며 MVC 원칙을 시행하는 데 도움이 되었습니다.나중에 WebObjects가 Java로 포팅되었을 때 MVC 패턴은 Java 개발자들에게 인기를 끌었다.Spring(2002년 10월 출시)과 같은 Java용 이후 프레임워크는 Java와 MVC 간의 강력한 유대를 이어갔습니다.

2003년에 Martin Fowler는 "입력 컨트롤러"가 요청을 수신하여 모델 객체에 적절한 메시지를 보내고 모델 객체로부터 응답을 받아 적절한 뷰에 [8]: 56 응답을 전달하는 패턴으로 MVC를 제시한 엔터프라이즈 애플리케이션 아키텍처의 패턴을 발표했습니다.이는 Ruby on Rails 프레임워크(2004년 8월)에서 채택된 접근법에 가깝습니다.이 프레임워크에서는 클라이언트가 브라우저 내 뷰를 통해 서버에 요청을 전송하고 컨트롤러에 의해 요청이 처리되며 컨트롤러는 적절한 모델 [12]객체와 통신합니다.Django 프레임워크(2005년 7월, Python의 경우)는 유사한 "MTV"(모델 템플릿 뷰)를 패턴에 제시했습니다.이 패턴에서는 뷰가 모델에서 데이터를 가져와 템플릿에 전달하여 표시합니다.[13]레일즈, 장고 모두 신속한 전개를 중시하며 데뷔해 MVC가 오랫동안 인기를 끌었던 기업 환경 밖에서 인기를 끌었다.

구성 요소들

모델
패턴의 중심 컴포넌트.이는 [14]사용자 인터페이스와 독립적인 애플리케이션의 동적 데이터 구조입니다.애플리케이션의 데이터, 논리 및 규칙을 직접 관리합니다.
보다
차트, 다이어그램 또는 표와 같은 정보의 표현.관리용 막대 차트 및 회계사용 표 보기와 같이 동일한 정보를 여러 번 볼 수 있습니다.
컨트롤러
입력을 수락하고 모델 또는 [15]뷰에 대한 명령으로 변환합니다.

애플리케이션을 이러한 구성요소로 분할할 뿐만 아니라, 모델-뷰-컨트롤러 설계는 [16]이들 구성요소 간의 상호작용을 정의합니다.

  • 모델은 응용 프로그램의 데이터 관리를 담당합니다.컨트롤러로부터 사용자 입력을 수신합니다.
  • 뷰는 특정 형식으로 모델을 렌더링합니다.
  • 컨트롤러는 사용자 입력에 응답하여 데이터 모델 개체에 대해 상호 작용을 수행합니다.컨트롤러는 입력을 수신하고 선택적으로 유효성을 확인한 다음 모델에 입력을 전달합니다.

다른 소프트웨어 패턴과 마찬가지로 MVC는 문제에 대한 "솔루션의 핵심"을 표현하고 [17]각 시스템에 적용할 수 있도록 합니다.특정 MVC 설계는 여기에서 [18]설명하는 기존 설명과 크게 다를 수 있습니다.

동기

Alan Kay가 2003년에 썼듯이 MVC의 배후에 있는 최초의 동기는 어떤 [19]오브젝트에 대해서도 그래픽 인터페이스를 만들 수 있도록 하는 것이었습니다.그것은 리처드 포슨의 책 "나체 물체"[19]에 자세히 설명되어 있다.

웹 응용 프로그램에서 사용

원래 데스크톱 컴퓨팅용으로 개발되었지만 MVC는 주요 프로그래밍 언어의 월드 와이드 웹 애플리케이션 설계로 널리 채택되었습니다.패턴을 적용하는 몇 가지 웹 프레임워크가 생성되었습니다.이러한 소프트웨어 프레임워크는 해석에 따라 다르며, 주로 MVC 책임이 클라이언트와 서버 [20]간에 분할되는 방식입니다.

일부 웹 MVC 프레임워크는 신클라이언트 방식을 채택하여 모델, 뷰 및 컨트롤러 로직 거의 전체를 서버에 배치합니다.이 접근법에서는 클라이언트는 하이퍼링크 요구 또는 폼 제출 중 하나를 컨트롤러에 송신하고 뷰에서 완전 갱신된 웹 페이지(또는 기타 문서)를 수신합니다.모델은 [20]서버상에 완전히 존재합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "The Principles of Clean Architecture by Uncle Bob Martin". YouTube.
  2. ^ Reenskaug, Trygve; Coplien, James O. (20 March 2009). "The DCI Architecture: A New Vision of Object-Oriented Programming". Artima Developer. Archived from the original (html) on 23 March 2009. Retrieved 3 August 2019. More deeply, the framework exists to separate the representation of information from user interaction.
  3. ^ Burbeck(1992) : "...사용자 입력, 외부 세계의 모델링 및 사용자에 대한 시각적 피드백은 세 가지 유형의 객체에 의해 명시적으로 분리되어 처리됩니다."
  4. ^ Davis, Ian. "What Are The Benefits of MVC?". Internet Alchemy. Retrieved 2016-11-29.
  5. ^ 모델-뷰-컨트롤러 이력C2.com (2012-05-11)2013-12-09에 취득.
  6. ^ a b c d MVC의 발명가 Trygve Reenskaug의 메모와 이력 문서.
  7. ^ "DynaBook 요건에 관한 메모", Trygve Reenskaug, 1979년 3월 22일, SysReq.pdf.
  8. ^ a b Fowler, Martin (2003). Patterns of Enterprise Application Architecture. Pearson Education, Inc. ISBN 0-321-12742-0.
  9. ^ Goldberg, Adele (1984). Smalltalk-80: The Interactive Programming Environment. Addison-Wesley. ISBN 0-201-11372-4.
  10. ^ 크라스너, GlennE.;교황, StephenT.(Aug–Sep 1988년)."제록스의model–view 컨트롤러 사용자 인터페이스 패러다임 사용을 위한 요리 책".그 저널 객체 기술의.합성 영상 생성 체계 간행물. 1(3):26–49.또한"그 Model–View–Controller 사용자 인터페이스 패러다임의 제록스 시스템의 설명"(보고서), ParcPlace 시스템;Retrieved 2012-06-05된다.
  11. ^ Martin Fowler의 MVC기타 UI 아키텍처의 진화.
  12. ^ "Ruby on Rails Guides". Retrieved March 19, 2022.
  13. ^ "Django FAQ: Django appears to be a MVC framework, but you call the Controller the "view", and the View the "template". How come you don't use the standard names?". Retrieved March 19, 2022.
  14. ^ Smalltalk-80에서의 Burbeck, Steve(1992) 애플리케이션 프로그래밍:모델-뷰-컨트롤러(MVC) 사용방법
  15. ^ 추상화를 위한 MVC(Model-View-Controller) 아키텍처 패턴의 간단한 예
  16. ^ Buschmann, Frank(1996) 패턴 지향 소프트웨어 아키텍처.
  17. ^ 감마, Erich 등(1994) 설계 패턴
  18. ^ 무어, 다나 외(2007) 프로페셔널 리치 인터넷 애플리케이션: Ajax and Beyond: MVC의 기원 이후 패턴에 대한 많은 해석이 있었습니다.이 개념은 다양한 시스템 및 아키텍처에 매우 다른 방식으로 적용되고 있습니다."
  19. ^ a b Alan Kay (23 May 2003). "is squeak really object oriented ?". Squeak Foundation mailing list. Retrieved 26 October 2021.
  20. ^ a b Leff, Avraham; Rayfield, James T. (September 2001). Web-Application Development Using the Model/View/Controller Design Pattern. IEEE Enterprise Distributed Object Computing Conference. pp. 118–127.

참고 문헌