프레임웍 기반 개발을 위해 시장에서 입증된 프레임웍을 근간으로 프로젝트에서 사용할 수 있는 틀을 제공하는 Sharp Architecture가 최신 버전 v1.9.5를 공개했다. 이번 버전에서는 다음과 같은 점이 눈에 띈다.
1. ASP.NET MVC 3 RTM 기반으로 업그레이드 되었으며,
2.
.NET Framework 4 기반으로 구성되었고,
3. System.Web.Mvc.IDependencyResolver 구현하고 있다.

1.9.5 버전에서는 ASP.NET MVC + Nhibernate 기반으로 솔루션이 구성되어 있으며, DI 컨테이너로 Castle Windsor 제공하고 있다. 또한 IDependencyResolver 구현 클래스로 WindsorDependencyResolver 제공하고 있으나 IDependencyResolver 결함때문에 IDependencyResolver 통해 Windsor 컨테이너를 사용하는 것이 바람직하지 않아서 패키지에 함께 제공은 하되 솔루션으로 엮지는 않은 하다. 압축을 풀면 아래와 같은 디렉토리 구조를 있다.
 

Sharp Architecture 홈페이지 바로가기
Sharp Architecture 관련 문서 (wiki 싸이트인데, 얼마전 OSS Install Fair에서 진행한 ScrewTurn Wiki근간으로 운영되고 있다.)

Posted by 장현춘

약간 철 지난 이야기일 수 있겠지만, ASP.NET MVC 1.0 정식 버전이 공개된 시점이기에 무료 e-book을 다운로드 받을 수 있는 곳을 안내하고자 한다.

ASP.NET MVC 1.0 e-book은 Scott Hanselman, Rob Conery, Phil Haack 등 쟁쟁한 사람들이 지었으며 여기에 Scott Guthrie가 도움을 주는 형식을 빌어 만들어진 책이며 아마존에서 31달러에 구입할 수 있다.

image

이 책에 대한 좀 더 상세한 설명은 Scott Guthrie 블로그를 참조하시길...

Download Links
Posted by 장현춘

image

차세대 웹 개발을 준비하는 웹 개발자와 디자이너를 위해 마이크로소프트가 매년 개최하는 MIX 행사가 성황리에 막을 내렸다. 이번 MIX09에서 발표된 주목해야하는 기술 변화들에 대해 간단히 정리해보자

[Silverlight 베타 3]
Silverlight 3 베타에서 달라지는 것들은 아래 그림으로 요약할 수 있다.
image

특징적인 것들을 뽑아보면
1. 멀티미디어
- IIS Media Services의 Smooth Streaming 기법을 통해 실시간으로 사용자의 네트웍 및 CPU 환경에 최적화된 비디오 품질을 제공
- HD급 동영상을 위한 VC-1/WMA 이외에 H.264/AAC를 지원함으로써 서비스 제공자에게 선택의 기회 제공
- GPU를 활용한 Full Screen 720p+ HD 동영상 상영이 가능
- PlayReady를 활용한 DRM 적용
2. 그래픽
- Perspective 3D 지원
- Bitmap Caching으로 렌더링 속도 향상
- Bitmap을 수정할 수 있는 API 제공
- Application에 Theme을 입힐 수 있고 Control에 Skin을 입힐 수 있는 기능
- 텍스트 렌더링 및 애니메이션 속도 향상, SL2부터 Local Font 사용 가능
3. 개발생산성
- 이전에 제공되는 컨트롤의 기능 확대 및 새로운 컨트롤 추가 (DataPager, DataForm, Navigation Framework 등)
- .NET RIA Services (“Alexandria”)를 통해 손쉽게 엔터프라이즈 RIA 솔루션 구축 가능
4. Out of Browser
- SL3는 추가 플러그인을 설치하지 않고도 데스크탑에 설치하여 아이콘만으로 실행하여 브라우저 없이 동작 가능한 애플리케이션을 만들 수 있다. 마치 Smart Client 애플리케이션 처럼 런타임이 이러한 기능을 자동으로 제공하며, 필요시 App.Current.Detach()를 호출하여 설치 창을 불러올 수도 있다.
- 또한 Smart Client가 웹을 통해 자동 업그레이드를 지원하듯이 SL3도 서버에 새 버전의 애플리케이션이 개발되어 배포되었다면 이를 감지하여 사용자의 액션을 요청할 수 있는 API를 제공하고 있다.
- SL3는 브라우저 내에서 동작하든지, 브라우저 밖에서 동작하든지 자동으로 네트웍 연결 상태를 감지할 수 있으며 이를 통해 오프라인일 경우 로컬의 IsolatedStorage를 활용하여 작업을 진행하고 온라인이 되었을 경우 작업한 내용을 웹 서비스를 통해 서버에 전송할 수 있는 기능을 구현할 수 있다.
- Tim Heuer의 동영상이 위 세가지 기능을 아주 잘 보여주고 있다.
5. 기타 중요 업데이트
- 한 페이지내에 여러 SL3 애플리케이션이 구동되고 있다면 이들 사이에 직접 통신할 수 있도록 Local Connection API가 제공된다. LocalMessageSender와 LocalMessageReceiver를 통해 비동기적으로 클라이언트 머신내에서 통신이 가능하다. 즉, 서버까지 갔다오는 roundtrip이 발생하지 않기 때문에 훨씬 효율적이다.
- XAML내 element-to-element 바인딩이 가능하다. 한 element가 다른 element의 속성에 binding되고자 할 경우 이전에는 이벤트 핸들러에서 타겟 element의 변경 사항을 감지하여 처리해주어야 하지만, 이제는 element에  다른 element로의 Binding을 직접 기술할 수 있어 코딩이 필요없다.
- Expression Blend 3 Preivew가 함께 공개되어 개발이 편해졌다.

MIX09에서 발표된 SL3 의 새로운 기능에 대한 소개 동영상은 아래 링크에서 볼 수 있다.
What’s new in Microsoft Silverlight 3

Silverlight 3 베타 런타임 및 개발 관련된 SDK, Visual Studio integration 패키지 등은 아래 싸이트에서 다운로드 받을 수 있다.
Silverlight.net

[웹 개발 생산성 향상]
- 드디어 ASP.NET MVC 1.0 정식 버전이 발표되었다. 이곳에서 관련 자료, 튜토리얼, 동영상 및 설치 파일을 다운로드 할 수 있다.
- Microsoft Web Platform 2.0 베타 출시 - 이것은 웹 개발시 필요한 닷넷 프레임웍, 개발 툴인 Visual Web Developer, IIS 서버 및 SQL Server를 한번에 설치할 수 있도록 제공되는 패키지이며, 새 버전에서는 개발 생산성을 높이고 오픈 소스 활성화를 위해 제공되고 있는 Windows Web Gallery의 우수 오픈 소스 애플리케이션을 함께 포함하여 배포하고 있다.
- Internet Explorer 8 정식 발표 - 이미 알려진 대로 이전 버전과의 호환성을 고려하면서도 렌더링 측면에서 타 브라우저를 능가하는 성능을 보여주는 새로운 인터넷 익스플로어 8 이 공개되었다.

[클라우드 컴퓨팅]
image 

마이크로소프트의 클라우드 플랫폼인 Azure Services Platform에도 변화가 있다. CTP에 대한 사용자들의 피드백을 수용하여 클라우드 OS에 해당하는 Windows Azure에 몇 가지 변화를 시도했다. Full-trust 애플리케이션 개발이 가능하게 되어 다양한 요소들을 묶을 수가 있으며, Windows Azure의 IIS7에서 FastCGI를 직접 지원함으로 인해 클라우드 상에서 PHP로 웹 애플리케이션 개발이 가능하게 되었다. Full-trust를 지원하기 때문에 native code로 구현된 기능을 P/Invoke를 통해 닷넷 애플리케이션 내에서 호출할 수 있다.
image

또한 Azure Services의 한 종류인 SQL Data Services가 이제는 T-SQL을 직접 지원함으로써 개발자가 가지고 있는 기존 ADO.NET 기반의 경험 및 기술을 그대로 활용하여 클라우드 SQL 기반 애플리케이션 개발이 가능해졌다.
image

이번 MIX09에서 발표된 로드맵을 보면 Azure Services Platform은 올 가을에 상용 서비스로 전환될 것으로 보인다.
image

Posted by 장현춘

ASP.NET MVC 프레임웍의 출시가 임박한 가운데, ASP.NET MVC Release Candidate 2가 출시되었다. RC1에 있었던 몇 가지 버그가 수정되었고 새 기능이 추가되었다. 변경된 것으로는 ASP.NET MVC RC 2 설치시에 .NET Framework 3.5 SP1을 요구한다. 하지만 실행시 런타임 자체는 SP1에 대한 dependency가 없기 때문에 binary 배포할 경우 SP1 없는 .NET Framework 3.5 설치하에서도 동작한다. 또한 쿠키를 통한 사기 방지를 위해 쿠키에 쿠키 경로를 포함시킬 수 있으며, 포함된 jQuery의 버전이 1.2.6 에서  1.3.1 로 변경되었다. DefaultModelBinder의 validation 관련 메시지가 현지화될 수 있게 변경되었고, 에러 메시지 출력시 헤더 역할을 하는 메시지를 원하는 내용으로 채울 수 있도록 하는 새로운 ValidationSummary 메소드가 overload되었다.

아래 싸이트에서 다운로드 받을 수 있다.
http://www.microsoft.com/downloads/details.aspx?FamilyID=ee4b2e97-8a72-449a-82d2-2f720d421031&displaylang=en

 

Bug Fixes since RC 1

·         The DropDownList helper no longer throws an exception if a null argument is passed for selectList.

·         In the Web.config file, the LogOn URL value in the authentication section has been corrected.

·         Code nuggets that are direct children of the head element do not cause an exception if the runat="server" attribute is added to them.

·         The CheckBox and RadioButton helpers now restore current values from model state.

·         The Default.aspx page that is included in the default project template now works correctly with output caching. Note that this file is not needed if the application is running under IIS 7 Integrated mode.

Upgrading from the RC 1 Release to Release Candidate 2

·         Update the references to the following assemblies to point to the RC 2 versions:

           System.Web.Mvc.dll

     By default, this assembly is located in the following folder:

          %ProgramFiles%\Microsoft ASP.NET\ASP.NET MVC 1.0 RC2\Assemblies

·         After you have made this change, compile your application and resolve any compilation errors.
Posted by 장현춘

ASP.NET MVC 기반으로 만들어진 블로그 엔진 Oxite가 Codeplex에 공개됐다. 웹 개발자 및 디자이너를 위한 행사로 마이크로소프트가 매년 주최하고 있는 MIX의 온라인 싸이트가 바로 Oxite 기반으로 운영되고 있다. (Mix online을 개발하는 과정에서 만들어져서 운영되고 있다고 표현하는 것이 맞을 듯..) 이처럼 Mix Online의 개발 및 운영 노하우가 담겨 있는 ASP.NET MVC 기반의 확장성 있는 Content Management Platform 이라는 것이 만든 이들의 주장이다.

Oxite는 codeplex 싸이트에서 해당 소스 코드를 다운로드 받아 빌드하여 테스트해볼 수 있다. 빌드시 design time validation 필요에 의해 SQL Server 2005 인스턴스가 필요하다는 메시지가 뜨며, 최신 버전의  ASP.NET MVC Beta 와는 아무 문제없이 빌드되는 것을 확인할 수 있다.

관련기사 - MS, 개발자용 오픈소스 블로그 플랫폼 제공

말 나온 김에, ASP.NET (VB.NET) 기반의 오픈 소스 웹 개발 프레임웍으로 오래전부터 널리(?) 사용되는 것으로 DotNetNuke가 있다. 국내에는 그리 많이 알려진 것 같지는 않지만, 닷넷을 오랫동안 해 오신 분들은 익히 알고 있는 듯 보인다. 예전에 살펴본 바로는 단순 웹 개발 프레임웍을 넘어서는 Content Management System 수준의 기능을 제공하는 것으로 기억된다. 관심이 있는 분들은 방문해보시길...

Posted by 장현춘

Sharp Architecture는 ASP.NET MVC와 NHibernate를 이용하여 유지보수가 용이하고 견고한 웹 애플리케이션을 위한 뼈대를 제공해주는 일종의 reference architecture라 할 수 있다. Sharp Architecture가 어떠한 구조로 ASP.NET MVC와 NHibernate를 엮고 있는지 살펴보면서, 만든 이 Billy McCafferty가 어떤 아이디어로 이를 제안했는지, 혹은 내가 만약 향후에 다른 프레임웍의 조합을 통해 프로젝트를 진행할 경우 활용할 수 있는 프랙티스는 없는지 알아보기로 하자.

1. Sharp Architecture

그림에서 보듯이 Sharp Architecture (#arch)는 두 개의 애플리케이션 한 개의 워드 문서로 구성되어 있다.

- ProjectBase Project : #arch의 기본이 되는 기능 제공하는 기반 구조
- NorthWindMvc Project : ProjectBase 기반의 일종의 샘플 애플리케이션
- Base_Architecture_and_Development_Guidelines.doc : 설치 및 개발을 위한 가이드 문서로 구성되어 있다.

NorthwindMvc에서 ProjectBase를 referece 참조해서 개발된 것이며, 여기에 새로운 기능을 어떻게 TDD (Test-driven Development) 기반하에 개발할 수 있는지 차근차근 설명한 문서가 위에 언급한 워드 문서이다.
 

2. ProjectBase

ProjectBase는 크게 세 개의 서브 프로젝트로 구성된다.

2.1 ProjectBase.Core : 엔티티 객체 및 프레임웍 기본 기능 구현
   * ConcreteTypeAttribute.cs : IoC (Inversion of Control) 기능을 제공하며 #arch 0.6.x 버전까지 있었던 Spring.NET이 #arch 0.7.x 버전부터 빠지면서 IoC를 #arch 내에서 자체 구현하기 위해 제공하는 Attribute이다. 실제 사용법은 ProjectBase.Web의 ControllerFactory.cs에서 설명하기로 한다.
   * DesignByContract.cs : design by contract 방법론에 근거하여 코드를 작성하도록 이를 강제하기위해 조건 체크하는 로직을 제공한다.
   * IDao.cs : DAO 패턴을 따라서 data access 로직을 작성할 경우 공통적인 로직을 추상화시켜 담고 있는 최상위 인터페이스이며, Load(), Save(), Delete() 등 기본적인 CRUD에 관련된 메소드를 선언하고 있다. DAO 패턴의 인터페이스 역할을 하는 IDao를 왜 ProjectBase.Core에 넣은 이유는 마틴 파울러가 정리해 놓은 Separated Interface 패턴을 참조하면 좋을 듯 하다. 이유는 DAO 패턴을 구현한 ProjectBase.Data와 엔티티들에 관여하는 ProjectBase.Core 사이의 의존성을 해소하기 위해서 ProjectBase.Data의 DAO에 대한 인터페이스를 따로 분리하여 ProjectBase.Core에 넣음으로 인해 ProjectBase.Data에 대한 직접적인 의존성을 해소하고 있다. (의존성 해소가 목적이라면 분리한 인터페이스를 꼭 ProjectBase.Core에 넣어야 했을까... ) IDao 인터페이스는 ProjectBase.Data에 있는 GenericDao 클래스가 구현하고 있다. 내가 작성할 DAO를 MyCustomerDao라고 가정했을 때 이들 사이의 관계는 아래와 같습니다. 점선은 인터페이스 구현을, 실선은 클래스간 상속을 의미합니다. 
    * PersistentObject.cs : 엔티티 객체들은 모두 PersistentObject를 상속받아 작성한다. PersistentObject에는 모든 엔티티들이 대부분 사용하게되는 ID, Equals(), GetHashCode() 등이 구현되어 있다.

2.2 ProjectBase.Data : DAO 패턴과 NHibernate 세션 관리
   * GenericDao.cs : IDao 인터페이스를 구현하고 있는 base class로서 내부적으로는 NHibernate의 Session을 이용하여 데이터베이스 작업을 진행한다. 그림에서 보듯이 개발자가 작성하는 모든 Dao 클래스 구현의 기본 뼈대를 제공한다.
   * NHibernateSession.cs : NHibernate를 쉽게 사용할 수 있도록 하는 일종의 Utility 클래스로서 내부적으로 NHibernate SessionFactory와 Session 사용한다. 
  * DaoTests.cs : Dao 클래스의 단위 테스트를 위한 Helper 클래스로서 모든 Dao 클래스의 단위 테스트 클래스들은 DaoTests 클래스를 상속 받아 작성한다. DaoTests 클래스는 내부적으로 위에서 언급한 NHibernateSession 클래스를 이용하여 NHibernate Session이 제공하는 Transaction 기능을 사용한다. NUnit 단위 테스트의 [Setup] 과 [TearDown] 속성을 제공하여 Dao의 단위 테스트 시 초기 세팅과 테스트 후 리소스 정리 등을 제공하며 NHibernate의 트랜잭션 롤백 기능과 맞물려 단위 테스트 끝난 후에 데이터베이스를 롤백 시켜 테스트 이전 상태로 되돌리는 기능을 제공한다. 또한 NUnit의 Category Attribute에 "DB Test"를 추가하여 NUnit이 일괄적으로 테스트 케이스를 실행할 때 이 부류의 테스트는 DB 테스트임을 알려주어 단위 테스트시 제외하도록 하여 데이터베이스 관련 부가 작업으로 인한 전체적인 단위 테스트 소요 시간을 절약할 수 있다.

2.3 ProjectBase.Web : 웹 일반적인 기능 확장 및 ASP.NET MVC Controller Factory 제공
   * WebSessionStorage.cs : HttpContext에 NHibernate Session을 저장하여 이를 통해 세션 관리해주는 기능을 제공한다.
   * TransactionAttribute.cs : ASP.NET MVC의 Controller action method에서 사용할 수 있는 Action Filter로 작성하여 NHibernate 트랜잭션을 선언만으로 적용할 수 있도록 제공되는 Attribute
   * ControllerFactory.cs : ASP.NET MVC가 기본적으로 제공한는 DafaultControllerFactory를 상속받아 작성된 커스텀 Controller Factory로써, 예전에 Spring.NET이 제공했던 IoC 기능을 ProjectBase.Core의 ConcreteTypeAttribute의 도움을 받아 직접 구현하고 있다. 방식은 원시적일 정도로 심플하다. 모든 Controller 구현시 생성자에 IDao 타입의 파라메터를 받도록 하여 전달되어 지는 IDao 타입의 인터페이스를 검사하여 여기에 Attribute으로 명시되어 있는 ConcreteType을 조사한다. 이 같은 방식으로 생성하여야 할 구체적인 Dao 클래스를 알아낸다. 또한 생성해야할 Controller 클래스는 전달되어지는 controllerType을 통해 알 수 있다. 아래는 ControllerFactory 소스 코드의 일부로써 IoC가 행해지는 부분이다.

Sharp Architecture의 근간이 되는 세 개 서브 프로젝트의 구성 요소와 이들의 역할을 간단히 살펴보았다. 시장에 나와 있는 ASP.NET MVC와 NHibernate라는 잘 만들어진 프레임웍들의 조합이기에 구조 자체는 간단하며 이 두 프레임웍을 효과적으로 엮는 부분이 코드의 주된 내용이다.

다음 시간에는 ProjectBase를 이용하여 구현된 샘플 애플리케이션인 NorthwindMvc의 구조에 대해 간단히 살펴보기로 하자.

Posted by 장현춘

ASP.NET MVC 정식 버전 출시가 임박한 가운데 Preview 5 가 공개되었다. Preview 4 공개 이후 두 달만에 발표한 것이다. ASP.NET MVC를 테스트하고 있는 많은 개발자들로부터 듣는 의견은 너무 자주 변경이 이루어진다는 것이다. Preview가 발표될 때다마 새로 배워야한다는 엄살도....

이번 Preview 5에서 달라진 점을 간단히 살펴보면...

1. Action method overload가 지원된다. 즉, 같은 action에 대해 http verb가 get 혹은 put 방식으로 접속하더라도 각각 처리할 수 있도록 overload가 지원된다. 예를 들어 사용자 신규 등록의 경우 사용자 입력을 받는 페이지를 보여주는 Get 방식의 action 하나, 입력 받은 값을 통해 실제 데이터베이스에 저장하는 Put 방식의 action 하나 이렇게 쌍으로 로직이 구성되는 것이 대부분이다. 이경우 이 두 action을 같은 action 이름을 가진 overloaded 된 두 개의 action method로 구현한다.

[AcceptVerbs("GET")]
public object Create() {}

[AcceptVerbs("POST")]
public object Create(string name, int age) {}

혹은 실제 메소드 이름은 달라도 attribute를 써서 매핑시켜줄 수도 있다.

[AcceptVerbs("GET")]
public object Create() {}

[ActionName("Create"), AcceptVerbs("Post")]
public object Save(string name, int age) {}

2. Model Binder를 추가하여 사용자가 입력한 값을 action method의 파라메타로 직접 매핑시켜준다. 이러한 기능은 웬만한 웹 프레임웍이라면 다 제공하는 기능이나 개발자의 편의성을 크게 증진시키는 방향으로 개선되었다. 개발자가 일일이 폼에서 넘어온 값을 도메인 모델의 엔티티에 매핑하는 단순 작업을 Model Binder라는 기능을 통해 자동으로 해주는 것이다.  단순한 primitive type 간의 매핑 뿐만아니라, 입력 폼과 이름이 같은 것을 포함하고 있는 complex 타입까지도 각각 자동 매핑해준다는 것. 아래 두 가지는 동일한 기능을 수행한다.

[AcceptVerbs("POST")]
public object Create(string name, int age) {}

[AcceptVerbs("POST")]
public object Create(Person person) {}

이를 지원하기 위해서는 당연히 Model Binder를 등록하여야 한다. 즉, primitive type들과 complex type 간의 매핑 정보를 전달해주어야 한다. 이를 위해 네 가지 방법을 쓸 수 있으며 기본적으로 ComplexModelBinder가 제공되고 있으므로, 웬만한 경우에는 별도의 자체 제작한  Model Binder를 등록하지 않아도 제공되는 ComplexModelBinder를 DefaultBinder로 지정하는 것만으로 사용 가능한 기능이다.

void Application_Start()
{
   ....
   ModelBinders.DefaultBinder = new ComplexModelBinder();
   ...
}

3. UpdateModel & TryUpdateModel
Model Binder가 앞쪽에서 넘어온 값을 도메인 객체에 매핑시켜주는 기능이라면, UpdateModel 메소드는 뒤쪽 (데이터베이스) 에서 가져온 모델 (즉, 도메인 객체)를 원하는 값으로 업데이트 해주는 기능이다. 이를 위해 Controller 베이스 클래스에 이 두 메소드가 추가되었다. Model Binder와  UpdateModel()을 엮으면, 앞쪽에서 사용자가 입력한 값들을 Model Binder가 도메인 객체 혹은 value object 타입에 자동 매핑시켜 Controller의 action method 까지 넘어오면,  UpdateModel 메소드를 통해 이를 곧바로 뒤쪽 데이터베이스에서 읽어온 모델 객체에 업데이트 시켜준다. 이렇게 업데이트 된 모델은 DataContext.SubmitChanges()를 통해 데이터베이스에 업데이트된다.

4. 사용자 입력 validation
사용자 입력값이 적절한가를 검증하는 validation 기능 또한 모든 웹 프레임웍이 기본 제공하는 기능인데, 이를 위해 ASP.NET MVC에서는 ModelState라는 컬렉션 객체를 ViewData의 일부로 추가하였다. 즉, 사용자 입력값이 부적절할 경우 ModelState에 어떠 어떠한 입력값이 validation 에러를 유발한다는 정보를 담아 ViewData의 일부로 View Engine에 넘겨지면 View가 redering 되는 시점에 에러 메시지와 에러를 유발한 input 에 색깔로 표시가 자동으로 이루어진다. 이 ModelState는 개발자가 프로그래밍 과정에서 validation 에러 항목을 추가할 수도 있고, 앞서 설명한 Model Binder가 작업할 때 혹은 UpdateModel() 수행시 자동으로 추가된다.

5. 비지니스 룰 validation
사용자가 입력한 값이 단순 validation 로직에서 처리할 수 없는 경우, 즉 데이터베이스에 저장된 값과 비교하여야 한다거나 혹은 비지니스의 변경에 따라서 변경될 수 있는 경우는 앞서 기술한 방식의 validation은 적합하지 않다. 이와 같은 비지니스 룰 관련하여 사용자 입력값을 검증하는 기능이 이번 Preview 5 에서 제공되고 있다. 비지니스 룰에 위배되는지 검사하는 로직을 구현하고 이를 등록한 후 validation 에러 발생시, 이를 앞서 설명한 validation 에러와 마찬가지로 ModelState에 추가하여 View Engine을 통해 화면에 붉게 표시된다. 즉, 화면단 validation과 비지니스 룰 관련 validation 정보 모두 같은 ModelState에 담겨 View에 넘어가게 된다.
이와 관련하여 Html helper의 기능이 preview가 나올때 마다 확장되고 있다. Html.TextBox()라는 코드는 예전에는 HTML의 input type="text"를 렌더링하고 파라메터로 넘겨준 값으로 세팅하는 것이었다가, Preview 4에서는 값을 넘겨주지 않아도 name 속성이 같은 값을 자동으로 ViewData를 뒤져 찾아내서 세팅을 하는 것으로 기능을 추가했다가, 이제는 validation 에러까지 검색해서 해당 input type 관련하여 ModelState에 validation 에러가 기술되어 있으면 이를 근거로 빨갛게 에러 메시지를 자동으로 뿌려주는 것까지 포함하게 되었다.

좀 더 자세한 설명은 아래 Scott Guthrie의 블로그를 참조하시길...
http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

설치를 원할 경우 codeplex에서 다운로드 받으시길...
http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16775

Posted by 장현춘

Sharp Architecture

프레임웍 2008.06.05 14:57

마이크로소프트가 운영하는 오픈 소스 프로젝트를 위한 호스팅 싸이트인 CodePlex(http://www.codeplex.com)에 지난 5월 16일자로 S#arp Architecture라는 프로젝트가 올라왔다. CodePlex에서 호스팅되는 프로젝트들은 오픈 프로젝트 형태로 개발자들간의 자유로운 의사소통을 통해 가장 바람직한 소프트웨어를 만들어내는 방향으로 진행되고 있으며, S#arp Architecture도 현재 다양한 사람들로부터 피드백을 받으며 나아가고 있다.

S#arp Architecture는 시장에서 가장 많이 선호되는 오픈 소스 프레임웍들을 조합하여 빠르고 견고하게 웹 애플리케이션을 만들 수 있는 프레임웍들의 조합이다. 여기에 포함되는 프레임웍들로는 ASP.NET MVC Preview 2 + Spring.NET 1.1.1 + NHibernate 1.2 등이다. 국내 닷넷 환경에서도 프레임웍 기반 개발 방식에 대한 관심이 고조되고 있으며, 특히 오픈 소스 프레임웍의 활용에 대한 문의가 부쩍 늘고 있는 상황에서 이에 부응이라도 하듯이 S#arp Architecture가 나타났다. S#arp Architecture는 가장 현실성있는 프레임웍의 조합을 나타내는 하나의 예일 뿐이며, 시장의 다양한 요구에 맞는 다양한 조합은 얼마든지 가능하다. 국내 개발자들을 만나본 결과 오픈 소스에 대해 관심을 넘어 실제 프로젝트에 적용하고자 자문 및 테스트를 진행하는 경우가 점차 늘고 있다.

한국마이크로소프트에서도 프레임웍 기반 개발을 활성화시키기 위해 각종 세미나를 진행해왔으며, 개발자들 사이에 이러한 논의가 활성화될 수 있도록, 또한 필요한 개발자들이 쉽게 접하고 학습할 수 있도록 컨텐츠 개발을 위해 노력중이며 조만간 온/오프라인을 통해 함께 할 수 있는 방안을 제시할 예정이다.

codeplex_logo

Posted by 장현춘

지난 3월 21일 ASP.NET MVC에 대한 소스코드가 코드플렉스를 통해 공개되었으며 앞으로 이곳을 통해 지속적으로 업데이트가 이루어질 것이라고 밝히고 있다. 현재 코드플렉스에는 ASP.NET MVC Preview 2 소스가 공개되어 있다. 공개된 소스코드는 .zip형태이며, 여기에는 Visual Studio 2008용 솔루션 파일이 제공되고 있어 VS에서 쉽게 소스코드를 살펴볼 수 있다. 한가지 주의할 점은 마이크로소프트가 ASP.NET MVC 뿐만아니라 .NET Framework 3.x BCL (Base Class Library)까지 소스를 공개하고 있는데, 이것은 개발자가 소스를 참고하여 개발에 활용하도록 함이며, 혹 있을지 모를 버그에 대한 패치를 기다리기 보다는 개발자가 빠르게 버그를 수정하여 자신의 애플리케이션 개발에 활용하도록 하기 위함이지 개발자가 마음대로 수정한 .NET 소스코드를 배포할 권리를 제공한 것은 아니다.

codeplex

Posted by 장현춘

지난 3일부터 미국 라스베가스에서 진행되고 있는 MIX08에서 예상대로 ASP.NET MVC Framework Preview 2와 Silverlight 2 Beta 1이 발표되었다. ASP.NET MVC Preview 2는 작년 12월 ASP.NET 3.5 Extension에 포함되어 두 번 CTP가 발표되었는데, 이번에 MIX08을 맞이하여 별도의 업데이트 버전이 발표되었다. 이번 Preivew 2 버전에서는 이전 버전과는 다른 몇 가지가 특징이 눈에 띈다. 우선 프로젝트 템플릿이 이전 버전에서는 ASP.NET MVC with Test 혹은 without Test 등으로 나뉘어져 있었는데, 이것이 하나의 ASP.NET MVC Preview 2라는 템플릿으로 합쳐지고 대신 위저스 실행시 테스팅 프레임웍을 함께 생성할 것인지 말 것이지를 선택하고 있으며, 테스팅 프레임웍을 MSTest외에도 NUnit, MBUnit 등을 추가로 설치하여 확장할 수 있는 기능을 부여했다.
image
image

아래 코드에서 보듯이 미리 예고한 대로 Controller 생성시 Controller 메소드에 반드시 있어야 했던 [controlleraction] attribute가 사라져 Controller를 상속받은 클래스의 모든 public 메소드는 기본적으로 controller action으로 간주된다. 
 image

또한 Global.asax에서 라우팅을 설정하던 부분을 Application_Start()에서 직접 하던 것을 RegisterRoutes()에 구현하고 Application_Start()에서 호출토록 하여 테스팅 프레임웍을 통해 테스트를 자동화할 수 있도록 하였다. 아울러 라우팅 룰을 설정할 때 [controller]/[action]/[id]로 쓰던 것을 {controller}/{action}/{id}로 괄호를 바꿈으로 해서 웹 프로그래밍에 익숙한 개발자들의 convention에 따르는 면을 보여주기도 했다.
image

또한 아래 그림과 같이 Add New Item 다이얼로그에서 Web 하위에 MVC를 두어 관련 클래스를 바로 생성할 수 있게 하고 있다.
image
  

CSS 폴더를 기본으로 생성케하여 좀 더 CSS 친화적인 화면을 기본으로 생성해주고 있다. 아래 화면은 MVC 프로젝트만 생성해서 바로 실행시킨 기본 화면이다. 이전 버전에 비해 좀 더 전문가다운(?) 화면을 보여주고 있다.
image image

ASP.NET MVC Preview 2는 여기에서 다운로드 받을 수 있다.

 

Silverlight 2 beta 1은 Microsoft Silverlight Tools Beta 1 for Visual Studio 2008이라는 이름으로 배포가 되고 있으며, 이 패키지에는 Silverlight 2 Beta 1, Silverlight 2 SDK Beta 1, KB949325 for Visual Studio 2008, Silverlight Tools Beta 1 for Visual Studio 2008이 포함ㅚ어 있다. 따라서 이전 버전의 Silverlight, 즉, Silverlight 1.0이 깔려 있으면 설치가 되지 않는다. 이 패키지에는 새로운 ASP.NET Media Player와 Silverlight를 위한 ASP.NET 서버 컨트롤 등이 포함되어 있다. Silverlight 2 Beta 1은 여기에서 다운로드 받을 수 있다.
image

ASP.NET MVC Preview 2와 Silverlight 2 Beta 1 에 대한 좀 더 상세한 설명은 ASP.NET 홈 페이지를 참조하시길...

Posted by 장현춘