ASP.NET MVC 프레임웍의 출시와 더불어 함께 부각되고 있는 것이 IoC (Inversion of Control) 혹은 DI (Dependency Injection) 컨테이너이다. 마틴 파울러는 이 두 용어의 쓰임새를 분명히 하고자 패턴 이름으로 DI를 쓰자고 했으나 여전히 시장에서는 IoC, DI, Hollywood Principle 등을 거의 같은 의미로 사용하고 있다. 
현재 ASP.NET과 연동하여 비지니스 티어에 사용할 수 있는 DI Container로 주로 언급되는 것들로는 StructureMap, Windsor Container, Spring.NET, ObjectBuilder 등이 있다.

StructureMap은 Jeremy D. Miller가 만들고 유지보수호가 있으며, 닷넷 DI 컨테이너 가운데 가장 오래된 것이며 가장 널리 사용되고 있다.

ObjectBuilder는 Enterprise Library (EntLib) 2.0 부터 도입되기 시작하여 EntLib를 구성하는 각종 App Block들의 Factory 역할을 하는 DI 컨테이너이다. 다만, EntLib를 염두해두고 만들어졌기 때문에 외부 개발자가 애플리케이션 개발에 활용하기에 적합한 API 등을 갖추고 있지는 않았고 불편하다. 이점 때문에 많은 개발자들이 이의 개선을 요구하였고 마침내, ObjectBuilder를 대신할 새로운 Lightweight한 DI 컨테이너의 개발 계획이 발표되었다. EntLib v4 개발의 일환으로 발표되었지만, EntLib와는 함께 배포도 하고 혹은 DI 컨테이너 별도로 배포하여 다른 용도로의 활용을 쉽도록 하였으며 아울러 EntLib v4도 다른 DI 컨테이너와 사용될 수 있도록 할 예정이다. 자세한 사항은 아래 싸이트를 참조하길...
Enterprise Library v4 개발

Spring.NET은 자바 진영에서의 성공에 힘입어 닷넷으로 포팅된 DI 컨테이너이다. Spring.NET은 Spring.Java와 마찬가지로 핵심이 되는 DI 기능이외의 모든 모듈은 쉽게 빼고 넣을 수 있어서 개발자가 원하는 부분만을 취할 수 있다. 아울러 대부분의 모듈은 이미 시장에서 그 품질이 인정된 다른 프레임웍이나 기술을 그대로 활용할 수 있도록 일종의 Wrapper와 같은 모듈만을 제공함으로써, 개발자가 갖고 있는 다른 프레임웍이나 기술에 대한 경험을 그대로 활용할 수 있는 융통성을 제공하고 있다.  Spring.NET은 다음과 같은 모듈로 구성되어 있다.
Spring.Core : DI 기능을 구현하는 Factory이자 Registry와 같은 역할을 한다.
Spring.Aop : DI와 더불의 Spring의 핵심 기능으로 불리며 AOP (Aspect-oriencted Programming)을 제공한다.
Spring.Data : ADO.NET에 대한 wrapper 기능을 제공
Spring.Data.NHibernate : NHibernate를 사용할 수 있는 wrapper 기능을 제공
Spring.Web : ASP.NET을 사용할 때 Page에 대한 DI 기능까지 제공한다.
Spring.Web.Extensions : 웹 서비스를 자바스크립트에서 접근할 수 있도록 해주는 기능이나, WCF 3.5에서는 ASMX 웹 서비스나, WCF 서비스에 기본 기능으로 제공해주고 있기 때문에 그다지 사용할 필요가 없을 듯..
Spring.Services : 일반 닷넷 클래스 (PONO - Plain Old NET Object)에 대해 자동으로 proxy 등을 생성해줌으로써 ASMX 웹 서비스, Enterprise Services, .NET Remoting 이 가능해도록 하는 기능이나, WCF가 이미 제공하고 있다. 다른 점은 Spring.Services는 각종 proxy등을 통해 기존 기술을 사용할 수 있게 해주는 것이나, WCF는 새로운 방식으로 더 나은 성능을 제공한다는 점... 예전 기술을 사용하는 경우가 아니면, 별로 효용이 없을 듯.
Spring.Testing.NUnit : 단위 테스트 NUnit 사용하도록 하는 기능
전반적으로 Spring.NET은 .NET Framework 2.0 기반으로 작성되었으며, 자바와 달리 닷넷의 빠른 변화를 따라잡지 못하는 면이 있다.

Posted by 장현춘

댓글을 달아 주세요