ASP.NET MVC 프레임웍

번역/ScottGu's Blog 2007. 10. 14. 01:24

원문 : ASP.NET MVC Framework

오랜 시간 동안 ASP.NET에 대해 많은 사람들이 요청한 기능 중 한 가지는 모델-뷰-컨트롤러 (MVC) 아키텍쳐에 기반한 웹 응용프로그램 개발을 지원해달라는 것이었습니다.

지난 주말에 오스틴에서 열린 Alt.NET 컨퍼런스에서 저는 현재 우리 팀이 작업하고 있는 ASP.NET MVC 프레임웍의 첫번째 퍼블릭 데모를 시연하였습니다. Scott Hanselman의 블로그에서 제가 한 프리젠테이션을 보실 수 있습니다.

ASP.NET MVC 프레임웍은 올해 연말에 퍼블릭 프리뷰가 출시될 예정입니다. 그리고 내년 상반기에는 ASP.NET을 완벽하게 지원하는 버전이 출시될 것입니다.

모델 뷰 컨트롤러 (MVC) 프레임웍이란?

MVC는 애플리케이션의 구현을 세 부분(모델, 뷰, 컨트롤러)으로 나누는 프레임웍 방법론입니다.

  • MVC에 기반한 애플리케이션에서 "모델"은 상태를 관리하는 책임을 지고 있는 컨퍼넌트입니다. 주로 이 상태는 데이터베이스에 저장됩니다. (예를 들어, 주문 데이터를 표현할 때 사용되는 Product 클래스는 SQL의 Products 테이블에서 가져올 수 있습니다.)
  • MVC에 기반한 애플리케이션에서 "뷰"는 애플리케이션의 유저 인터페이스를 표시하는 책임을 지고 있는 컴퍼넌트입니다. 보통 이 UI는 모델 데이터로부터 생성됩니다. (예를 들어, Product 객체의 현재 상태를 표시하는 텍스트박스, 드롭다운, 체크박스를 가지고 있는 Product "수정" 뷰를 만들 수 있습니다.)
  • MVC에 기반한 애플리케이션에서 "컨트롤러"는 최종 사용자와의 인터랙션 처리, 모델의 관리, 그리고 UI를 표시하는 데 사용할 뷰를 선택하는 책임을 지고 있는 컴퍼넌트입니다. MVC 애플리케이션에서 뷰는 단지 정보를 표시하는 것에 불과합니다. 사용자의 입력과 인터랙션을 처리하고 또 그에 응답하는 것은 컨트롤러입니다.

MVC 방법론을 사용할 때의 한 가지 이점은 애플리케이션 내의 모델과 뷰와 컨트롤러를 명확하게 분리할 수 있다는 것입니다. 모델과 뷰와 컨트롤러를 명확하게 분리하면 애플리케이션의 테스트를 더욱 쉽게 수행할 수 있습니다. 왜냐하면, 서로 다른 애플리케이션 컴퍼넌트 간의 계약이 더욱 명료하게 정의되어 있기 때문입니다.

MVC 패턴을 사용하면 테스트 주도 개발 (TDD)에도 도움이 됩니다. 여기서 테스트 주도 개발이란 실제 코드를 작성하기 전에, 새로 작성할 코드의 요구사항을 정의하고 검증하는 자동화된 단위 테스트를 구현하는 것을 의미합니다.

좀 더 자세히 알아볼까요?

ASP.NET MVC 프레임웍의 다운로드가 가능하게 되면, 몇 주 안으로 저는 ASP.NET MVC 프레임웍에 대한 좀 더 상세한 튜토리얼 포스트를 작성할 계획입니다. (그 전까지는 저의 Alt.net 프리젠테이션 비디오를 보는 것이 ASP.NET MVC 프레임웍을 배우는 가장 좋은 방법일 것입니다.)

구체적으로는 아래와 같은 내용을 다룰 예정입니다.

  • ASP.NET MVC 프레임웍을 적용하면 기본적으로 모델/뷰/컨트롤러의 명확한 분리, 테스트 가능성, TDD가 가능합니다. MVC 프레임웍의 모든 핵심 계약은 인터페이스 기반이며 쉽게 목(mock)으로 사용이 가능합니다 (IHttpRequest/IHttpResponse 기반 인터페이스 포함). ASP.NET 프로세스에서 컨트롤러를 실행하지 않아도 애플리케이션의 단위 테스트를 수행할 수 있습니다 (이는 단위 테스트가 좀 더 빨리 수행될 수 있게 합니다). 단위 테스트 프레임웍은 어떠한 것을 사용하더라도 무방합니다 (NUnit, MBUnit, MS Test 등).
  • ASP.NET MVC 프레임웍은 확장성이 높고 플러그인이 가능합니다. MVC 프레임웍 내의 모든 것은 쉽게 교체/커스터마이징이 가능하도록 디자인 되었습니다 (예를 들어, 뷰 엔진. 라우팅 정책, 파라미터 직렬화를 직접 구현하여 플러그인 할 수 있습니다.). 또한 ASP.NET MVC 프레임웍은 기존의 의존성 주입이나 IOC 컨테이널 모델 (Windsor, Spring.Net, NHibernate 등)도 지원합니다.
  • ASP.NET MVC 프레임웍은 명료한 URL을 가진 애플리케이션을 개발하는 필요한 대단히 강력한 URL 매핑 컴퍼넌트를 제공합니다. 이 때 URL에는 별도의 확장자를 지정할 필요가 없으며, URL은 SEO와 REST에 어울리는 네이밍 패턴을 지원하게끔 설계되었습니다. 예를 들어 보자면, /products/edit/4 라는 URL을 ProductsController 클래스의 "수정" 액션에 매핑한다든지, /Blogs/scottgu/10-10-2007/SomeTopic/ URL을 BlogEngineController 클래스의 "포스트 표시" 액션에 매핑하는 식입니다.
  • ASP.NET MVC 프레임웍은 기존의 ASP.NET .ASPX, .ASCX, .Master와 같은 마크업 파일들을 "뷰 템플릿"으로 간주하여 지원합니다 (즉, 중첩된 마스터 페이지, <%= %> 조각, 선언적 서버 컨트롤, 템플릿, 데이터바인딩, 지역화와 같은 ASP.NET 기능이 사용 가능 하다는 이야기입니다.). 하지만, 서버와 인터랙션을 할 때 포스트백 모델을 사용하지는 않습니다. 대신 최종 사용자의 인터랙션은 컨트롤러 클래스로 보내어 집니다. 이를 통해 모델/뷰/컨트롤러의 명확한 분리나 테스트 가능성이 보장됩니다. (또한 이 말은 MVC 기반 뷰에서는 뷰스테이트나 페이지 수명주기가 없다는 말이기도 합니다.)
  • ASP.NET MVC 프레임웍은 기존 ASP.NET의 기능들을 완전히 지원합니다. 이에는 폼/윈도우 인증, URL 권한, 멤버쉽/역할, 출력 캐쉬와 데이터 캐쉬, 세션/프로파일 상태 관리, 헬스 모니터링, 구성 시스템, 공급자 아키텍쳐 등이 포함됩니다.
요약

MVC 방법에 따라 웹 애플리케이션을 개발하는 방법을 찾는 중이라면 ASP.NET MVC 프레임웍이 명료하고 편리한 선택이 될 수 있을 것입니다. ASP.NET MVC 프레임웍은 모델/뷰/컨트롤러을 명확히 분리하고 테스트와 TDD을 쉽게 할 수 있도록 합니다.

MVC를 사용할 때의 이점과 그 작동 방법에 대해서는 몇 주 안으로 더 상세한 튜토리얼을 포스팅하도록 하겠습니다.

도움이 되길 바라며,

스캇

: