약간은 formal한 글을 포스팅하고 싶었지만, 차분히 앉아 이런 저런 형식을 갖춰가며 한편의 논문 쓰듯 글을 올린다는 것이 점점 불가능해짐을 느낀다. 블로그의 어원이 의미하듯 그냥 로그 남기듯 그때 그때 쓰고 싶을 글을 끄적임이 더 어울리는 것인지도 모른다.

미팅을 준비하다가 지루하여 잠시 twitter에 올라온 글들을 보다 Channel9의 트윗 중 MEF에 관한 글을 보고나니, 한번쯤은 정리하고자 했지만 큰맘 먹고 다가서야할 것 같은 느낌에 미루던 것인지라 그냥 편한 마음으로 들어보았다.

MEF가 무엇인지 알고 싶지만 많은 시간을 투자할 수 없는 분이라면 20여분 짜리 영문이지만, 아주 천천히 또박 또박 강의하는 아래 동영상을 추천한다.
http://channel9.msdn.com/shows/10-4/10-4-Episode-26-Creating-Extensible-Applications-with-the-Managed-Extensibility-Framework/

소개와 더불어 MEF를 통해 어떻게 코드가 만들어지는지를 보고싶은 분이라면 아래 Codeplex의 짤막한 글들을 참고하면 좋을 듯 하다.
http://mef.codeplex.com/wikipage?title=Guide&referringTitle=Home

영어라면 질색인 분이라면 Visual Studio 2010 공식 팀 블로그에 엄준일씨가 올린 글을 보면 좋을 듯 하다.
http://vsts2010.net/category/.NET%20Framework%204.0/Managed%20Extensibility%20Framework 

MEF가 처리하고 싶은 세상의 문제는 애플리케이션을 개발함에 있어서 수많은 모듈로 인한 복잡성을 관리하고, 개발에 필요한 모듈을 찾아 적절한 시점에 생성하는 수고를 개발자가 아닌 MEF가 처리할 수 있게 해주는 것이 아닐까한다.

마이크로소프트가 Unity라는 DI 컨테이너를 내놓기 이전부터 닷넷 오픈 소스 개발자 생태계내에서는 이미 dependency를 줄여주어 유지보수를 용이하게 하는 많은 프레임웍이 생겨나 번성해왔다. 대표적인 것으로는 StructureMap, Windsor, Spring.net, NInject, Autofac 등.. 이런 즈음에 마이크로소프트가 닷넷 프레임웍 4.0에 기본으로 포함될 DI 컨테이러라고 할 수 있는 MEF 라이브러리를 내놓고 있는 것이다. 어찌 보면 개발자 입장에서 또 하나의 선택의 가짓수가 늘어났다고 할 수 있지만, 시장의 반응은 어떨지...

1. 시장에서 오픈 소스 프레임웍인 NHibernate, iBatis.NET이 세를 불리고 있을 즈음 LINQ, Entity Framework 등을 마이크로소프트가 내놓았을 때, 그다지 인정을 받지 못하다가  조만간 정식 출시될 새 버전의 Entity Framework에 대해서는 개발자 사이에 기대가 점차 높아지는 것을 느낄 수가 있었는데...

2. 아울러 시장에서 StructureMap, Windsor를 거쳐, Spring.net이 DI 컨테이너로 급부상하던 즈음에 마이크로소프트가 ObjectBuilder에 Wrapper 씌여 Unity를 내놓았다. 버전이 올라갈수록, Enterprise Library를 선호하는 사람일 수록 점차 Unity에 빠져드는데.... 한술 더떠 아예 닷넷 프레임웍에 기본 탑재되는 DI 기능의 라이브러리를 출시한다는데...

얼마전 모회사의 아키텍트가 했던 섬뜩했던 말이 떠오른다.

"마이크로소프트가 이것 저것 다 내놓는데, 굳이 시장에 있는 오픈 소스 프레임웍들이 필요할까요 ?"

아직까지 공고하지 못해 개발자 생태계인지라 마이크로소프트라는 일개(?) 회사에 의해 휘둘리는 것이 아닌지... 그렇지 않으리라 기대해본다.

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 장현춘