[번역] 차마 물어볼 수 없었던 MVC와 MVP의 모든 것(Everything You Wanted To Know About MVC and MVP But Were Afraid To Ask)

이 글은 원작자 필 핵(Phil Haack)의 허락을 구하고 한국어(Korean)로 번역했으며 원문은 2008년에 작성된 Everything You Wanted To Know About MVC and MVP But Were Afraid To Ask 입니다.

번역 품질이 훌륭하지 않아 가능하면 원문을 읽는 것을 권장합니다.

This article has obtained the permission of the original author Phil Haack translated into Korean. You can read the original article here.

The translation quality is not great. I recommend you to read the original article instead.


최근 한 동료가 Model View Controller (MVC) 패턴을 빨리 배우기 위해 좋은 리소스가 있는지 물었습니다. 비슷한 시기에 메일을 하나 받았는데, 사람들이 얼마나 MVC와 Model View Presenter (MVP) 패턴의 차이를 헷갈리는지에 관한 내용이었습니다.

mvc

블로그 포스트로 이런 물음에 답하기에 DRY 원칙을 적용할 더 좋은 기회는 없습니다.

MVC

MVC 패턴에 뛰어들려면 먼저 위키피디어(역: 한국어 위키피디어)를 보세요. 여러분은 필요한 리소스와 함께 패턴의 간략한 내용을 볼 수 있습니다.

MVC에서 모델은 애플리케이션의 정보(데이터)와 데이터를 조작하는 데 사용되는 비즈니스 규칙을 나타내고, 뷰는 텍스트, 체크박스 같은 사용자 인터페이스 요소이며, 마지막으로 컨트롤러는 키보드 누르기와 마우스 이동 같은 사용자 액션으로 모델과 통신하는 상세한 방법을 관리한다.
트뤼그베(trygve)

정말로 뛰어들고 싶으면 패턴의 창시자, Trygve Reenskaug 웹 사이트에서 원문을 읽을 수 있습니다.

위 웹 사이트에서 여러분은 원문 (pdf)으로 패턴의 초기 이름인 Thing-Model-View-Editor를 알게 될 것입니다.

MVP

Model View Presenter는 MVC를 그래픽 사용자 인터페이스 기반의 모던 컴포넌트에 적용하기에 충분하지 않아서 등장했습니다. 모던 GUI 시스템과 컴포넌트는 컨트롤러 없이 마우스 이동과 클릭 등의 사용자 입력을 자체적으로 핸들링합니다.

MVP는 이 문서에 따라 탤리전트(Taligent)에 의해 대중화되었습니다. 얼마 전에 마틴 파울러는 이 패턴을 2가지로 변형해서 제안했습니다: 지배적인 컨트롤러(Supervising Controller), 수동적인 뷰(Passive View)

차이점?

그럼 MVC와 MVP의 차이는 무엇일까요? GitHub을 사용해서 알아보죠!

어처구니 없는 장난을 해서 죄송하지만 유혹을 뿌리칠 수 없었습니다.

두 패턴은 관심사를 분리하고 있으며 모델과 뷰를 가지고 있습니다. 많은 사람들이 MVC 패턴을 단순하게 변형한 MVP 패턴을 고려합니다. 가장 큰 차이점은 두 패턴이 다음 문제를 어떻게 해결할 것인지 관건입니다: 누가 사용자 입력을 핸들링하는가?

MVC에서는 항상 컨트롤러가 마우스와 키보드 이벤트를 핸들링하는 책임을 가집니다. MVP에서는 GUI 컴포넌트 자체가 처음에는 사용자 입력을 핸들링하지만, 이 입력을 해석하는 일은 프레젠터로 위임합니다. 이를 종종 3인조를 흔들다(Twisting the Triad) 라고 부르며, MVC 삼각형 그림의 3개의 요소를 회전시켜서 MVP를 얻기 위해 “C”를 “P”로 바꾸는 것을 가리킵니다.

그렇다면 웹에서는?

이 글 내용 대부분은 리치 클라이언트 애플리케이션에 초점을 맞추고 있습니다. 이 패턴들을 웹에서 적용하는 일은 전혀 다른 문제입니다. 왜냐하면 웹은 상태가 없기(무상태, stateless) 때문입니다.

예를 들어 ASP.NET의 WebForms에서는 ViewState를 이용해서 리치 클라이언트 개발 패러다임을 에뮬레이트하려고 시도합니다. 이것이 바로 ASP.NET에 패턴들을 적용하려고 MVP 패턴에 초점을 맞추는 이유입니다. 왜냐하면 MVP 패턴은 GUI 컴포넌트로 만들어진 리치 클라이언트 애플리케이션과 어울리기 때문입니다.

그러나 많은 웹 플랫폼이 무상태를 포용하며 상태가 있는(state-full) 리치 클라이언트 개발 환경을 시뮬레이팅하는 것을 삼가고 있습니다. 몇몇 시스템에서는 MVC 패턴을 최적화해서 응용합니다.

이 패턴은 여러분의 웹 개발 환경에 맞게 조절되었다.

잘 모르겠지만 자바 웹 프레임워크인 스트럿츠(Structs)도 MVC 패턴을 사용하는 웹 프레임워크 중 하나입니다. 하지만 대부분의 사람들은 진짜 MVC를 웹으로 가져온 레일즈(Rails)에 주목하고 있습니다. 이는 MVC 패턴을 웹 애플리케이션에 대중화시켰습니다.

ASP.NET MVC는 새로운 또 다른 프레임워크로서 ASP.NET 개발자가 MVC 패턴을 쉽게 따라하게 만듭니다. 이 프레임워크는 MVP 패턴이 아닌 MVC 패턴을 사용합니다. 왜냐하면 리치 클라이언트 개발을 에뮬레이트하려고 하지 않기 때문입니다. 따라서 MVC 패턴이 더 적합합니다.

읽을거리