Enterprise Library 4.1 (EL) 과 Unity Application Block 1.2 (Unity) 에 대한 Hands-on Lab이 공개됐다. 국내 닷넷 개발 진영에도 범용 개발 프레임웍에 대한 관심이 고조되고 있고, 점차 많은 적용 사례가 공유되어 신규 개발에 힘을 실어주고 있는 시점에 EL과 Unity에 대한 HOL의 발표는 참으로 적절한 타이밍이라 여겨진다.

Enterprise Library는 이름이 의미하듯이 엔터프라이즈 애플리케이션 개발에 늘 고려하는, 즉 cross-cutting concern이라할 수 있는 기능을 모아 쉽게 적용할 수 있게 만든 라이브러리 모음집이다.

image

현재 EL 4.1에 포함되어 있는 Application block들로는 PIAB (Policy Injection Application Block), Logging, Caching, Cryptography, Data Access, Exception handling, Security, Validation 그리고 Unity가 있다. EL 4.1 HOL은 바로 이들 각각에 대한 HOL을 C#과 VB로 제공하여 쉽게 따라하며 익힐 수 있게 구성되어 있다.

image

좌측 그림 가운데 Interception (w/ PIAB and Unity), Unity, Validation은 새롭게 추가된 것들이며, 그외 나머지 HOL은 이전 버전의 것을 업데이트한 것이다.

EL과 Unity가 호스팅되고 있는 Codeplex를 방문하면 좀 더 상세한 정보를 알아 볼수 있다.
EL 4.1 ": http://www.codeplex.com/entlib
Unity : http://www.codeplex.com/unity

각각의 HOL의 다운로드 위치는 다음과 같다.
EL 4.1 HOL
Unity 1.2 HOL

MSDN에서도 EL과 Unity에 대한 상세한 정보를 찾을 수 있다.
EL 4.1
Unity 1.2

참고로 EL과 Unity를 포함하여 p&p에서 제공하는 각종 asset들을 활용하여 개발자 생산성이 40%까지 향상될 수 있다는 조사 보고서도 여기서 살펴볼 수 있다.

 

p&p 팀에서는 또한 Enterprise Library 다음 버전에 담고 싶은 기능에 대한 온라인 설문 조사를 진행하고 있다. 평소에 담고 싶었던 내용이 있었다면 한번쯤 의견을 전달하는 것도 좋을 것으로 생각된다.

EntLib_voting_2

Posted by 장현춘

실버라이트 애플리케이션 개발에 사용할 수 있는 DI (Dependency Injection) 컨테이너로 Unity가 출시됐다. Unity는 Enterprise Library (EntLib)에서 사용하던 ObjectBuilder에 Wrapper를 제공하여 개발자에게 좀 더 편리한 API를 제공하는 DI 컨테이너이며 현재 EntLib 4.1에 함께 포함되어 배포되고 있다. (물론 DI 기능만을 원하는 사람을 위해 별도로 Unity Application Block이라는 이름으로 배포되고 있다.) Unity가 ObjectBuilder의 Wrapper 형태로 제공되다보니 일반 애플리케이션용은 ObjectBuilder 관련 dll들과 함께 배포가 되어야 하지만, 실버라이트용은 이들 기능을 하나의 Microsoft.Practices.Unit.dll 파일에 모두 담아서 좀 더 나은 배포 환경을 제공하고 있다. 아래 관련 링크에서 좀 더 자세한 사항을 확인할 수 있다.

관련 싸이트 :
http://msdn.microsoft.com/en-us/library/dd362339.aspx
http://www.codeplex.com/unity

비단 실버라이트 애플리케이션 뿐만아니라 일반 애플리케이션 개발에 있어서도 간단한 형태의 구현이라면 굳이 프레임웍을 도입하여 프로젝트 복잡성을 증가시필 필요가 있는지 꼼꼼히 살펴볼 필요가 있다. 하지만, 요즘 실버라이트 애플리케이션이 간단한 동영상 플레이어 수준을 벗어나서 엔터프라이즈 영역으로 그 적용 범위를 확장하고 있는 것은 이러한 컨테이너에 관심을 갖을 필요가 있음을 느끼게한다. 인터넷 예약 화면을 좀 더 사용자 중심적인 모습으로 제공하는 것은 기본이고, 기업내 각종 실시간 모니터링 시스템이나, 임원 정보 시스템, BI 대쉬보드 등 결코 가볍지만은 않은 애플리케이션에 점차 확산되고 있는 추세이다. 이런 면에서 볼때 DI 기능을 좀 더 편리하면서 적용할 수 있는 실버라이트 개발용  Unity 출시는 주목할 만하다.

이전 포스트에서도 언급했듯이 실버라이트용 DI 기능을 제공하는 또 다른 오픈 소스 DI 컨테이너로는 NInject가 있다. NInject는 "번개처럼 빠른 DI 기능 제공"이라는 모토를 달고 나왔으며 현재 .NET Compact Framework 까지 지원한다고 밝히고 있다.

Posted by 장현춘

지난 5월 20일 Unity Application Block 1.1이 출시되었다. 4월 4일 Unity 1.0이 출시된 후 곧바로 버그패치 버전인 Unity 1.1을 내놓은 것이다. Unity 는 ObjectBuilder에 wrapper를 씌워 개발자의 편의성을 높여 범용 개발 프레임웍으로 사용할 수 있게 P&P 팀에서 내놓은 것으로 Dependency Injection을 제공하는 일종의 컨테이너라 할 수 있다.

Unity 1.1에서 바뀐 점은 Unity 1.0에서의 버그 패치와 성능 개선, 개발자 편의성을 위해 클래스 public 노출 등을 들 수 있다. 자세한 사항은 아래 링크를 참고하시길...

codeplex : http://www.codeplex.com/unity/Release/ProjectReleases.aspx?ReleaseId=13598
msdn : http://msdn.microsoft.com/en-us/library/cc468366.aspx

Posted by 장현춘

마이크로소프트가 DI (Dependency Injection) 컨테이너로 Unity Application Block 1.0을 지난 4일 정식 출시하였다. Unity는 객체간 의존성을 해결해주는 컨테이너로서, 이미 시장에 널리 알려진 Spring.NET, StructureMap, Windsor 등과 더불어 개발자에게 또 다른 선택의 폭을 넓혀줄 것으로 기대하고 있다. Unity는 이전에 Enterprise Library 3.1까지 포함되어 DI 기능을 제공하던 ObjectBuilder의 복잡하고 개발자 친화적이지 않은 API를 개선하여 ObjectBuilder에 Wrapper를 씌운 것으로 직관적이며 쉽게 개발할 수 있고 다른 프레임웍과도 연동도 편리하다.

DI (Dependency Injection)은 크게 보면 객체간 의존성을 객체에게 맡기는 것이 아니라, 컨테이너가 필요한 시점에 필요한 관련 객체를 만들어 의존성을 해소시켜주는 것이며, 이 과정에서 자연스럽게 생성한 객체들의 라이프 싸이클을 관리하는 기능도 제공하게 된다. 따라서 DI 컨테이너를 사용할 경우에는 이를 사용하지 않을 때에 비해 성능상 약간의 영향을 받게 된다. DI 컨테이너를 사용치 않았을 때는, 다른 객체를 필요로하는 주체가 필요한 객체의 생성자를 직접 호출하여 사용하였기 때문에 직관적이며 이렇게 생성된 코드는 다른 사람이 이해할 때 훨씬 쉬운 면이 있다. DI 컨테이너가 개입되면 객체 생성이 간접적으로 이루어지기 때문에 성능상 약간의 오버헤드도 감안해야 하며, 컨테이너 자체에 대한 교육이나 이해가 필요하게 되어  전반적으로 프로젝트의 복잡도는 약간 증가하게 된다. 따라서, 유행처럼 DI 컨테이너에 대한 관심이 증가하고 있지만, 개발하는 프로그램의 성격상 객체간 의존성이 많지 않고, 의존성이 있다손 치더라도 그다지 복잡하지 않은 경우에는 DI 컨테이너의 사용은 추천할만한 것이 못된다. 객체간 혹은 클래스가 의존성이 많고 복잡하며 이의 해소를 컨테이너에 의지하여 추상화하고자 할때 혹은 런타임시에 이들 객체간 의존성을 변경할 필요가 있을 시에는 Unity와 같은 DI 컨테이너의 적용을 고려해볼 만 하다.

image

Posted by 장현춘

마이크로소프트 본사 patterns & practices (P&P)팀이 Enterprise Library (EntLib)와 Unity Dependency Injection (DI) framework의 로드맵을 발표하였다. 현재 EntLib은 v4.0 개발이 진행중이며, Unity DI 컨테이너는 며칠 내에 정식 버전이 출시될 것으로 보인다.

  • 3월 15일 - Unity 1.0 출시
  • 3월 15일 - EntLib v4.0 CTP 출시, EntLib 기능 업그레이드이며 Unity와의 통합 버전은 아니다. DI 컨테이너로 사용되는 ObjectBuilder가 v1.0에서 v2.0으로 업그레이드되어 EntLib v4.0 CTP와 연동된다.
  • 4월 중순 이후 - EntLib v4.0 정식 출시
     

EntLib v4.0의 새로운 모습은 Codeplex의 EntLib 싸이트를 참고하시길 ...

 

업데이트 1
- Unity 1.0 정식 릴리스가 4월 7일로 연기됨

Posted by 장현춘
 DI (Dependency Injection)는 IoC (Inversion of Control), Hollywodd Principle과 거의 동의어로 사용되기도 하지만, 엄밀히 말하면 IoC 기능 가운데 Dependency를 해소시켜주는 기법을 일컫는 패턴이다. 닷넷에서 ASP.NET MVC 프레임웍을 올 상반기 중에 정식 출시할 예정인데, 이로써 기존 ASP.NET Page 방식이나 이를 기반으로한 Web Client Software Factory (WCSF) 이외에, 개발자가 사용할 수 있는 또 다른 개발 방식을 제공하게 된다. DI 컨테이너라고 칭해지는 것들은 이와 같은 프리젠테이션 구현 기법과 연동하여 비지니스 로직을 구현하는 과정에서 생성되는 객체들의 라이프사이클을 관리해주고 이들 사이의 Dependency를 IoC 방식으로 해결해주는 프레임웍을 의미한다. 이러한 DI 컨테이너들은 프리젠테이션 티어의 구현 방식과 상관없이 선택적으로 적용할 수 있으며 반드시 비지니스 티어에서만 사용되는 것이 아니고 애플리케이션의 전 티어에서 필요시 객체 라이프 사이클 관리를 맡길 수 있다.
 DI 컨테이너로는 이전 포스트에서 밝혔듯이, Windsor Container, StructureMap, Spring.NET, Object Builder가 있으며 오늘 소개할 Unity Container가 있다. Object Builder는 마이크로소프트의 P&P (Patterns & Practices) 팀에서 만든 것으로 현재 Enterprise Library, CAB (Composite Application Block), WCSF 등 마이크로소프트의 각종 Application Block 에 쓰이고 있다. 하지만, 애초 일반 개발자를 위해 만든 것이 아니고 이처럼 각종 Application Block 내부에서 사용하기 위해 만든 것이기 때문에 개발자를 위한 API가 정리되지 않았고 이를 이용하기 위해서는 너무 많은 클래스들을 알아야 하는 어려움이 있었다. 하여 P&P 팀에서는 Enterprise Library v4 개발 계획을 발표하면서 Object Builder 후속으로 새로운 DI Container를 제공하겠다고 밝힌 바 있으며, 이것에 대한 약속으로 약 열흘 전에 Unity Application Block 2월 CTP를 공개하였다. Unity에 대한 자세한 정보는 CodePlex (http://codeplex.com/unity) 에서 찾을 수 있다.
 Unity는 기본적으로 Object Builder를 기반으로 작성된 Lightweight한 DI 컨테이너로써, 사용 편의성 증대를 위해 DI 기능을 쉽게 익힐 수 있는 Attribute 기반으로 제공하고 있다. Injection 기법으로는 일반적으로 사용되는 Contructor Injection, Property Injection, Method call Injection을 모두 제공한다. 또한 복잡한 계층 구조로 된 객체들의 생성도 아주 간편하게 처리할 수 있고, dependency를 런타임시에 제공할 수도 있고 XML 파일을 통해 제공할 수 도 있다. 아울러 Unity 컨테이너 자체를 필요에 따라서는 클라이언트 모듈이 ASP.NET의 Session이나 Application 에 저장하여 재사용할 수도 있다.  자세한 설명이나 샘플 등은 CodePlex 참고하기 바란다.

사용자 삽입 이미지

Patterns & Practices

Posted by 장현춘