'Sharp Architecture'에 해당되는 글 5건

  1. 2011.02.11 [소식] Sharp Architecture 1.9.5 공개
  2. 2008.10.23 [소식] Sharp Architecture 0.8.1 출시
  3. 2008.09.09 Sharp Architecture의 구조 #1
  4. 2008.06.20 프레임웍 스터디 모임 (3)
  5. 2008.06.05 Sharp Architecture (2)

프레임웍 기반 개발을 위해 시장에서 입증된 프레임웍을 근간으로 프로젝트에서 사용할 수 있는 틀을 제공하는 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 장현춘

댓글을 달아 주세요

지난 10월 4일 발표된 Sharp Architecture 0.8.1 버전에서는 다음과 같은 점들이 눈에 띈다.
1. ASP.NET MVC Preview 5 적용
2. NHibernate 2.0.1 적용
3. DI 컨테이너로 NInject 적용 - "lightning-fast dependency injection for .net"
4. ProjectBase로 명명되었던 프로젝트명이 SharpArch로 재명명

0.6.x 버전에서 사용하던 Spring.NET이 DI만을 위해 사용되기에는 너무 무겁다는 피드백에 의해 0.7.x 버전에서 이를 제거하고 Custom하게 DI 기능을 구현하여 사용하다가, 0.8.x 버전에서 가벼운 DI Container인 NInject를 다시 적용하고 있는 모습을 볼 수 있다.

자세한 사항은 직접 방문하시길..

 

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

댓글을 달아 주세요

프레임웍, 특히 시장에서 널리 사용할 수 있는 오픈 소스 기반의 프레임웍에 대한 스터디 모임이 시작됐다. 마이크로소프트 에반젤리트 일부, 외부 MVP 및 재야의 숨은 고수들과 함께 프레임웍에 대해 함께  모여 공부하고 이를 외부에 공개하여 프레임웍, 특히 오픈 소스 프레임웍에 대한 붐을 닷넷 개발자 사이에 확산하기 위한 시도이다.
스터디 모임은 비공개로 제한된 인원으로 시작하며, 발표자료 및 발표 동영상은 아래 싸이트에 게시되어 모두가 자유롭게 접근하여 배포할 수 있게 할 예정이다.

프레임웍 스터디 까페

첫 스터디 모임은 6월 30일 예정되어 있으며 주제는 시장에서 한창 인기를 얻고 있는 ASP.NET MVC + Spring.NET + NHibernate 조합인 Sharp Architecture이다. 이를 기점으로 활성화될 것으로 기대한다.

Posted by 장현춘

댓글을 달아 주세요

  1. Favicon of http://www.jazz.pe.kr BlogIcon 아름프로 2008.06.20 19:05  댓글주소  수정/삭제  댓글쓰기

    행님~, 또 열심히 뭔가를 하시네요. ^^
    삼성 SDS에서 spring 기반의 오픈 프레임워크 공개한 것은 아시나요?
    http://www.anyframejava.org
    자바진형은 요러한 움직임도 있어서 알려드립니다.
    참조하시면 도움 될듯하야 링크 남깁니다.
    아참, 그리고 제가 운영중인 jazz사이트도 놀러와주세요.
    Jazzlab.net 입니다. (http://www.jazzlab.net)
    수고하세용.. ~ ^^ ~

  2. Favicon of http://www.jazz.pe.kr BlogIcon 아름프로 2008.06.20 19:20  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎ 카페에 링크되어 있는 형의 예전 온라인 강좌 보고 있는데요.
    예전 버릇 여전하시네요. "~~거죠" ^^@~

  3. Favicon of https://acroama.net BlogIcon 장현춘 2008.06.21 01:01 신고  댓글주소  수정/삭제  댓글쓰기

    흠냐리..
    anyframe은 저번에 오픈한다고 광고한 날 둘러봤어....
    공들인 프레임웍을 오픈한 결정에 찬사를 보낸다...
    SI 업체 입장에서 단가 산정이나 서비스 비용 청구에 지대한 영향이 있을 것으로 생각되는 자산을 오픈한다는게 쉽지 않았을 듯 싶은데...

    글구, 그 강좌 옛날 거야... 지금 쬠 나아졌어.. ^^

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

댓글을 달아 주세요

  1. 2009.03.04 13:12  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. Favicon of https://acroama.net BlogIcon 장현춘 2009.03.05 00:24 신고  댓글주소  수정/삭제  댓글쓰기

    음.. 제가 깊이가 없어서 잘 이해를 못하겠네요. 무엇이 되었건 프레임웍을 도입하게 되면 항상 복잡성을 증가하고 학습이 필수적입니다. 모든 사람이 겪는 애로사항이며 고영민님만의 문제가 아니니 마음을 좀 여유롭게 가지심이... EntLib와 같은 라이브러리성 프레임웍은 포함되어 있는 기능 중에서 필요한 부분을 필요한 시점에 사용하는 형태이며 웹이든 데스크탑 애플리케이션이든 상관이 없지요. 쿼리를 말씀하신 것으로 보아 EntLib중 Data Access Block을 의미하신 듯 한데, 다른 많은 프레임웍과 마찬가지로 좀 더 편리한 클래스들로 ADO.NET API들을 wrapping한 것입니다. http://www.codeplex.com/entlib 를 참조하시면 더 많은 정보를 얻으실 수 있습니다. (제가 잘 몰라서... ^^)
    iBATIS.NET은 이미 시장에서 검증 받은 OR Mapper이며 국내에서도 상용 프로젝트에 여럿 사용중입니다. 제 블로그를 살펴보시면 알겠지만, 저는 오픈 소스 기반의 많은 프레임웍이 생겨나서 닷넷 생태계가 건강해지기를 바라는 사람입니다. 물론 여기에 마이크로소프트도 각종 application block이나 프레임웍 등을 오픈 소스로 공개하면서 때론 경쟁하면서 때론 협력하면서 오픈 소스 활성화에 기여하고 있습니다. 도메인에 특화된 것이 아닌 소위 범용 개발 프레이임웍은 가급적 시장에서 생태계를 이루어 자생적으로 발전해갈 수 있는 오픈 소스 기반의 프레임웍을 적극 추천하는 입장입니다.
    국내 시장의 반응은 iBATIS.NET을 더 많이 사용하는데, 이유는 처음에 접하고 사용하기가 NHibernate보다 쉽다는 것이 중론입니다. 제가 맡은 역할이 Architect Evangelist이다 보니 특정 프레임웍에 대한 깊이보다는 닷넷 개발 자체가 프레임웍 기반으로 가야한다는 등의 방향성이나 아키텍트 혹은 Decision maker들의 마음을 움직이기 위한 전략적인 부분에 더 포커스하고 있습니다.