Silverlight를 설치하려면 여기를 클릭합니다.*
Korea 대한민국변경|Microsoft 전체 사이트
MSDN
|개발자 센터

MSDN Home   MSDN Home
MSDN 홈 > Visual Studio 홈

모델 기반의 .NET 엔터프라이즈 응용 프로그램 개발

Susan Entwisle, Steve Eadie
EDS(Electronic Data Systems)

2006년 5월

적용 대상:
Visual Studio 2005
Visual Studio 2005 DSL 도구

목차

소개
Visual Studio용 엔터티 디자이너 만들기
코드 생성 프레임워크
엔터티 디자이너로 엔터프라이즈 응용 프로그램 만들기
결론

요약: 모델 기반의 개발은 소프트웨어 개발에 있어 논리적으로 한 단계 나아간 방식이라고 볼 수 있습니다. 이 방식은 상위 수준의 도메인 관련 사양을 사용하여 소프트웨어 솔루션을 자동으로 만드는 과정을 용이하게 하는 데 그 목적이 있습니다. 이 접근 방식은 높은 수준의 추상화와 도메인 관련 자산의 체계적인 재사용을 지원함으로써 생산성, 유지 관리 편의성, 표현성을 높이고 복잡한 관리 작업을 수월하게 하기 위한 것입니다. 이 기사에서는 DSL(Domain Specific Language)의 역할과 Visual Studio 2005 DSL 도구에 대해 살펴보고, 이를 사용하여 .NET Framework 플랫폼용 엔터프라이즈 응용 프로그램의 개발을 자동화하는 방법을 설명합니다.

소개

지난 30년 간 정보 기술 산업은 컴퓨터 장치, 소프트웨어 제품 및 기술 면에서 지속적으로 빠르게 발전해 왔으며 소비자가 이러한 기술을 사용하는 새로운 방식을 추구함에 따라 요구 사항의 변화를 겪어 왔습니다. 이러한 발전과 변화에 의해 관련 산업은 주로 메인프레임 플랫폼에서 호스팅되는 일괄 처리 지향의 비즈니스 응용 프로그램에서 랩톱, 소형 PDA, 스마트폰 등 여러 컴퓨터 플랫폼에서 실행되는 분산 서비스 지향의 응용 프로그램으로 변화되고 있습니다. 뿐만 아니라, 재사용과 적응성을 지원하고 이러한 소프트웨어 응용 프로그램이 안고 있는 복잡성을 관리할 필요성 때문에 언어 패러다임, 소프트웨어 디자인 방식 및 프로그래밍 환경의 발전이 촉진되고 있습니다. 이러한 소프트웨어 특성은 높은 수준의 민첩성, 생산성, 품질, 유지 관리 및 발전을 지원하기 위해 매우 중요합니다.

다른 엔지니어링 분야에서와 마찬가지로 소프트웨어 개발 산업 역시 요구 사항, 분석 및 디자인을 파악하고 주요 이해 관계자들과 의사 소통하기 위한 기반으로서 모델링 기술을 사용해 왔습니다. 그러나 소프트웨어 응용 프로그램 개발에서는 초기 단계가 지난 후 이러한 모델이 유지되지 않고 "코드"가 응용 프로그램의 모델이 되는 경우가 흔히 있습니다. 게다가 동일하거나 비슷한 응용 프로그램 도메인에서 여러 소프트웨어 프로젝트에 다시 사용하기 위해 이러한 모델에 포함된 분석과 디자인 패턴을 보관하거나 표준화하거나 패키지화하지 않고 있습니다. 모델 기반 개발 방식에서는 응용 프로그램 도메인의 지식을 재사용하고, 도메인 엔지니어링 과정에서 정보를 캡처하고, DSL로 표현할 수 있도록 함으로써 이러한 문제를 해결하려고 합니다. DSL은 주요 개념, 관계, 제약 조건 및 코드 생성을 제어하는 규칙을 포함하는 응용 프로그램 도메인 모델링 패러다임을 지정하는 메타 모델입니다. 이 언어는 도메인 모델 내에서 문자나 시각적 형식으로 표현될 수 있습니다. 따라서 사람이 이 언어를 해석하여 소프트웨어 응용 프로그램의 목적에 대한 의사 소통을 촉진하고, 도구를 통해 자동으로 응용 프로그램을 손쉽게 만들 수 있습니다. 이 접근 방식을 사용하면 프로젝트 계획 수립을 개선하고, 의사 소통을 촉진하며, 품질을 높이고, 일반적으로 소프트웨어 개발과 관련된 위험과 비용을 줄일 수 있습니다.

시스템 통합 업체에서 Visual Studio 2005 DSL 도구를 사용하면 모델링 플랫폼을 확장하여 Visual Studio 2005에서 호스팅되는 특정 도메인용 사용자 지정 비주얼 디자이너를 만들 수 있습니다. EDS(Electronic Data Systems)는 엔터프라이즈 응용 프로그램에서 비즈니스 엔터티를 모델링하기 위한 비주얼 디자이너를 만드는 데 이 기술을 사용해 왔습니다. 이 모델에 기반한 코드 생성 프레임워크는 모델의 비즈니스 엔터티를 응용 프로그램에 사용되는 엔터티, 데이터 서비스, 데이터베이스 및 단위 테스트에 대한 개체 지향 C# 구현으로 만드는 과정을 관리합니다. 이 접근 방식의 가장 큰 장점은 EDS에서 비즈니스 엔터티 구성에 관한 지식을 패키지화하여 Visual Studio 2005에서 사용할 수 있는 패턴, 언어 및 프레임워크에 활용할 수 있다는 점입니다. 이에 따라 EDS의 .NET 응용 프로그램 개발자는 자신에게 친숙한 개발 도구를 최대한 활용하는 동시에 사용자 지정 비주얼 엔터티 디자이너와 코드 생성 프레임워크를 통해 생산성과 품질을 높일 수 있습니다.

Visual Studio용 엔터티 디자이너 만들기

지난 10년 간 UML은 소프트웨어 모델링을 위한 사실상의 표준이었습니다. 그러나 클래스, 연결, 일반화 등 UML 메타 모델의 기본 구문은 의미론적으로 보았을 때 별다른 의미를 가지지 않습니다. 따라서 모델을 해석하고 이를 기반으로 의미 있는 연산을 수행하기 위해서는 기본 구문을 도메인 관련 정보로 확장해야 합니다. 이러한 접근 방식을 통해 기본 구문에 의미를 부여하고 코드의 자동 생성을 지원하는 데 필요한 제약 조건을 제공할 수 있습니다. DSL 도구 중 Domain Concept Editor는 소프트웨어 설계자가 도메인 관련 개념, 특성 및 특성 간의 관계를 정의함으로써 이러한 작업을 수행할 수 있도록 하는 UML과 비슷한 표기법을 지원합니다. 도메인 모델은 XML 형식으로 유지되며, 도메인 관련 API를 생성하고 사용자 지정 디자이너를 통해 Visual Studio 개발 환경을 확장하는 데 사용됩니다. 소프트웨어 설계자가 이 접근 방식을 사용하면 다시 사용할 수 있는 분석 패턴과 Healthcare HL7, Sarbanes Oxley 등의 표준을 캡처할 수 있는 재사용 가능한 도메인 관련 언어를 만들 수 있습니다.

그림 1은 Domain Concept Editor를 사용하여 만든 EDS의 엔터티 도메인 모델을 보여 줍니다. 이 도메인 모델에 포함된 주요 개념은 패키지, 엔터티, 엔터티 특성 및 데이터 서비스입니다. 각 개념은 패키지 네임스페이스, 엔터티 이름, 데이터베이스 테이블 이름 등 관련된 값의 집합으로 구성되어 있습니다. 도메인 모델 내의 주요 관계로는 집계와 합성을 포함하는 연결, 그리고 일반화가 있습니다.

더 큰 이미지를 보려면 여기를 클릭하십시오.

그림 1 엔터티 도메인 모델을 만드는 Domain Concept Editor(더 큰 이미지를 보려면 이미지를 클릭하십시오.)

DSL 도구의 DSL 디자이너 정의(Designer Definition)는 도메인 모델에 사용되어 사용자 지정 디자이너의 시각적 표기법을 만들고 기반 도메인 모델의 내부 메모리 저장소에 시각적 요소를 바인딩합니다. 디자이너 정의는 XML 형식으로 편집되고 유지됩니다. 소프트웨어 설계자는 디자이너 정의 파일을 사용하여 도메인 개념을 나타내는 시각적 도형, 관계를 나타내는 연결선, 연결할 수 있는 도형에 대한 조건을 지정하는 연결선 제약 조건 및 디자이너에서 사용되는 도구 상자를 정의할 수 있습니다. 아래 코드는 집계 관계를 모델링하는 데 사용되는 연결선을 정의하는 EDS의 엔터티 디자이너 정의 부분입니다. 이 코드는 제약 조건을 사용하여 연결할 수 있는 시각적 도형에 대한 조건을 정의하는 방법을 보여 줍니다. 소프트웨어 개발자가 엔터티 개체 간에만 집계 관계 연결을 사용할 수 있도록 제한하고 있음을 눈여겨 보십시오. 이 제약 조건은 모델 변환에서 발생할 수 있는 잠재적 오류를 줄이는 데 매우 중요하며, 소프트웨어 개발자의 모델링 환경을 개선하는 데 유용합니다.

<connector name="AggregationRelationshipLink">
  <color variability="Fixed" color="black" />
  <dashStyle variability="Fixed" dashStyle="solid"/>
  <decorators>
    <connectorText name="Label" position="TargetBottom" defaultTextId=""/>
  </decorators>
  <source arrowStyle="EmptyDiamond">
    <permittedShapes>
      <shape>EDS.ADE.Designer.ADEModeler/Shapes/IndependentEntityShape</shape>
      <shape>EDS.ADE.Designer.ADEModeler/Shapes/DependentEntityShape</shape>
    </permittedShapes>
  </source>
  <target arrowStyle="HollowArrow">
    <permittedShapes>
      <shape>EDS.ADE.Designer.ADEModeler/Shapes/IndependentEntityShape</shape>
      <shape>EDS.ADE.Designer.ADEModeler/Shapes/DependentEntityShape</shape>
    </permittedShapes>
  </target>
</connector>

그림 2는 Visual Studio에서 호스팅되는 사용자 지정 엔터티 디자이너 화면입니다. 이미 설명했듯이, 사용자 지정 엔터티 디자이너는 Visual Studio 개발 환경의 표준 사용자 인터페이스를 그대로 활용하고 있습니다. 즉, 도구 상자, 모델 탐색기, 속성 창, 유효성 검사 영역 및 디자인 화면 등이 그대로 사용됩니다. 이 요소들은 각각 EDS에서 정의한 도메인 모델과 디자이너 정의에 기반하여 사용자 지정되었습니다. 그림 2에 표시된 사용자 지정 엔터티 모델은 일반적인 주문 관리 시스템에서 볼 수 있는 비즈니스 엔터티의 일부입니다. 소프트웨어 개발자는 엔터티 디자이너를 사용하여 특정 디자인 요구 사항에 맞게 원하는 대로 비즈니스 엔터티 및 엔터티의 속성과 관계를 구성할 수 있습니다. 이 모델을 포함하여 엔터티 디자이너를 사용하여 개발된 모든 모델은 EDS의 코드 생성 프레임워크에 대한 입력으로 사용할 수 있습니다. 코드 생성 프레임워크는 XML 형식의 이러한 입력을 받아 그 모델을 기반으로 클래스, 데이터베이스 정의 등의 소프트웨어 아티팩트를 자동으로 만듭니다. DSL 텍스트 템플릿에서는 소프트웨어 설계자가 텍스트 기반 아티팩트를 만들 수 있는 ASP .NET과 유사한 형식 구문과 변환 엔진을 제공합니다. EDS는 XML을 serialize하는 방식을 사용자 지정하는 데 엔터티 모델을 사용하며 XML은 EDS의 코드 생성 프레임워크에 대한 입력으로 사용됩니다.

더 큰 이미지를 보려면 여기를 클릭하십시오.

그림 2 엔터티 디자이너(더 큰 이미지를 보려면 이미지를 클릭하십시오.)

코드 생성 프레임워크

EDS는 4년 전에 모델 기반의 소프트웨어 개발 방식을 채택했습니다. 이 방식은 소프트웨어 개발의 민첩성과 산업화를 지원하기 위한 EDS의 표준 소프트웨어 개발 방식이며 EDS ADE(Accelerated Development Environment)에 기반을 두고 있습니다. ADE는 소프트웨어 개발 프로세스에 대한 포괄적인 접근 방식을 나타냅니다. ADE는 요구 사항 수집, 분석, 디자인, 테스팅, 생성 및 배포를 위한 표준 프로세스와 도구를 매우 긴밀하게 통합한 집합입니다. 여기에는 Visual Studio에서 호스팅되는 모델링 도구, 기본 프레임워크 라이브러리 집합 및 코드 생성 프레임워크가 포함됩니다. 그림 3에서 볼 수 있듯이 코드 생성 프레임워크는 다음과 같은 접근 방식을 통해 모델을 소프트웨어 아티팩트로 변환합니다.

  1. 응용 프로그램의 모델을 XML 파일로 serialize합니다. 이 파일은 대개 응용 프로그램 개발 초기에 만들어집니다.
  2. 코드 생성 프레임워크에서 XML 파일을 "내부 메모리 저장소"에 deserialize합니다.
  3. 코드 생성 프레임워크에서 모델을 모델링된 요구 사항을 반영하는 소프트웨어 아티팩트로 변환합니다. 코드 생성 프레임워크는 ADE 프레임워크 라이브러리를 사용하는 소프트웨어 아티팩트를 만들기 위해 텍스트 템플릿을 사용합니다. 텍스트 템플릿에는 .NET 엔터프라이즈 응용 프로그램 설계에 사용되는 유용한 정보와 패턴이 캡슐화되어 있습니다.

더 큰 이미지를 보려면 여기를 클릭하십시오.

그림 3 코드 생성 프레임워크 개요(더 큰 이미지를 보려면 이미지를 클릭하십시오.)

코드 생성 프레임워크는 소프트웨어 개발자가 모델을 다시 생성할 때 이전에 생성된 소프트웨어 아티팩트와 현재 모델의 변경 내용을 관리하는 데 사용할 수 있는 변경 내용 관리 도구(differencing tool)를 제공합니다. 이 도구의 주요 장점은 소프트웨어 개발자가 이전에 생성된 소프트웨어 아티팩트에서 직접 변경한 내용을 보존하면서 모델에 대한 코드를 만들 수 있다는 점입니다. 예를 들어 소프트웨어 개발자는 엔터티의 소스 코드를 생성한 후 엔터티의 상태를 저장하기 전에 이 도구를 사용하여 비즈니스 유효성 검사 함수를 추가할 수 있습니다. 모델을 다시 만들게 되면 새 모델로부터 생성된 소스 코드와 이전에 추가한 비즈니스 유효성 검사 함수가 포함된 소스 코드를 비교하여 두 소스 코드 간에 차이가 있다는 것을 소프트웨어 개발자에게 알려 줍니다. 그러면 소프트웨어 개발자는 코드 생성 프로세스를 완료하기 전에 변경 내용 관리 도구를 사용하여 변경 내용을 관리할 수 있습니다. 코드 생성 프로세스가 완료되면 소프트웨어 아티팩트는 자동으로 Visual Studio 솔루션으로 이동됩니다.

코드 생성 프레임워크는 엔터티의 모델을 사용하여 엔터티, 데이터 서비스, 데이터 및 단위 테스트 계층에 대한 소프트웨어 아티팩트를 만듭니다.

계층 설명
엔터티 모델링된 엔터티에 대한 구현과 공용 인터페이스를 포함합니다. 여기에는 엔터티에서 모델링된 특성에 대한 get/set 메서드와 엔터티의 기본 키가 있습니다. 선택적으로, 엔터티를 컬렉션으로 관리하기 위해 공용 인터페이스와 구현 클래스가 생성될 수도 있습니다.
데이터 서비스 모델 엔터티에 대한 기본 CRUD 명령을 캡슐화하는 내부 데이터 어댑터를 포함합니다. 데이터 어댑터는 데이터 서비스 계층 외부에는 노출되지 않으며 데이터 서비스 클래스에 의해 호출됩니다. 데이터 서비스 클래스는 모델 엔터티의 지속성과 동시성에 대한 관리를 담당합니다.
데이터 모델링된 엔터티에 대한 SQL DDL과 DML을 포함합니다. 모델링된 엔터티 테이블을 생성하기 위한 DDL에는 엔터티의 특성 모델링을 위한 열, 기본 키 및 낙관적 잠금을 지원하기 위한 동시성 스탬프가 있습니다. 생성된 DML에는 모델링된 엔터티의 개별 행을 선택, 삽입, 업데이트 또는 삭제하기 위한 저장 프로시저 명령이 있습니다.
단위 테스트 모델링된 각 엔터티에 대한 CRUD 작업의 유효성을 검사하기 위한 테스트 방법을 포함합니다. 필요할 경우 코드 생성 시 만들어진 데이터 스크립트를 사용하여 데이터 계층을 임의 데이터로 채울 수 있습니다.

엔터티 디자이너로 엔터프라이즈 응용 프로그램 만들기

그림 4의 샘플 모델은 Customer, PurchaseOrder, CorporateCustomer라는 세 개의 비즈니스 엔터티로 구성된 간단한 주문 관리 시스템을 보여 줍니다. Customer는 일대다 관계로 PurchaseOrder와 연결됩니다. CorporateCustomer는 Customer에서 파생됩니다. 표준 도구 상자를 사용하여 새로운 비즈니스 엔터티, 관계 및 데이터 서비스를 포함하도록 이 모델을 쉽게 확장할 수 있으며, 속성 창을 통해 속성을 구성할 수도 있습니다.

더 큰 이미지를 보려면 여기를 클릭하십시오.

그림 4 주문 관리 시스템 엔터티 모델(더 큰 이미지를 보려면 이미지를 클릭하십시오.)

소프트웨어 개발자가 모델 디자인을 완료했으면 EDS 코드 생성 프레임워크에 액세스하기 위한 Visual Studio 플러그 인을 사용하여 코드 생성을 시작할 수 있습니다. 이 플러그 인은 텍스트 템플릿 엔진을 사용하여 사용자 지정 방식으로 모델을 serialize한 뒤 EDS의 코드 생성 프레임워크를 실행합니다. 그림에 표시된 모델을 코드 생성 프레임워크에 입력하여 만들어진 출력 결과에는 대략 40개의 인터페이스와 클래스 및 24개의 데이터베이스 정의와 저장 프로시저가 포함됩니다.

다음 코드는 PurchaseOrder 인터페이스이며, 이 엔터티에 정의된 특성에 맞는 get/set 메서드를 포함하고 있습니다.

public interface IPurchaseOrder : IEntity
{
    string DateReceived { get; set; }
    string IsPrepaid { get; set; }
    string Number { get; set; }
    string Price { get; set; }
    Guid PurchaseOrderID { get; }
    Orders.Entities.ICustomerACol CustomerCol { get; }
    void Delete();
    void SetState(IPurchaseOrder fromEntity);
}

다음 코드는 PurchaseOrder 테이블을 만들기 위해 생성되는 데이터 정의입니다. Customer 엔터티의 기본 키가 이 테이블에 포함됩니다. 또한 데이터베이스에서 Customer와 Purchase Order 간에 모델링된 연결을 구현하는 외래 키 관계를 만들기 위해 추가적인 스크립트도 생성되었습니다.

CREATE TABLE dbo.PurchaseOrder
(
        PurchaseOrderID UniqueIdentifier NOT NULL
       ,PurchaseOrderCustomerID UniqueIdentifier NOT NULL
        ,ConcurrencyStamp UniqueIdentifier NOT NULL
        ,DateReceived VarChar(255) NOT NULL
        ,IsPrepaid VarChar(255) NOT NULL
        ,Number VarChar(255) NOT NULL
        ,Price VarChar(255) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.PurchaseOrder ADD CONSTRAINT PK_PurchaseOrder_PurchaseOrderID PRIMARY KEY CLUSTERED (PurchaseOrderID)
GO

Purchase Order 데이터 서비스 클래스 작업은 아래와 같습니다. 데이터베이스에서 데이터를 가져오고 업데이트하기 위해 각 엔터티의 데이터 어댑터도 생성되었습니다.

public class PurchaseOrderDataSvc : EntityDataService
{
      public override IDbDataAdapter[] FillDataAdapters...
      public override IDbDataAdapter[] UpdateDataAdapters...
      public void Fetch(ref IPurchaseOrder purchaseOrder, IDictionary parameters)...
      public void Save(ref IPurchaseOrder purchaseOrder)...
}

그림 5는 주문 관리 시스템용으로 생성된 테스트 사례를 보여 줍니다. 이렇게 자동 생성된 테스트 사례를 통해 테스트 지향 개발을 진행할 수 있습니다. 이 접근 방식은 Visual Studio 2005에서도 지원하며 최근 소프트웨어 산업에 채택되어 생산성과 품질 향상에 가장 성공적인 기법 중 하나로 떠오르고 있습니다.

더 큰 이미지를 보려면 여기를 클릭하십시오.

그림 5 Visual Studio 2005의 주문 관리 단위 테스트(더 큰 이미지를 보려면 이미지를 클릭하십시오.)

결론

Microsoft Visual Studio 2005와 DSL 도구는 도메인 관련 디자이너를 개발하는 설계자를 위한 모델링 기능을 제공합니다. EDS는 모델 기반 개발에 관련된 기존 자산을 활용할 수 있는 엔터티 디자이너를 작성하기 위해 이 기능을 사용할 것을 검토하고 있습니다. EDS는 이 접근 방식으로 생산성과 품질을 높이고, 최상의 방법, 패턴 및 프레임워크에 기반한 자산을 재사용함으로써 클라이언트 솔루션을 개발하여 제공하기 위한 비용을 줄일 수 있을 것입니다.


저자 소개

Susan Entwisle은 EDS의 뛰어난 소프트웨어 엔지니어이며, EDS의 .NET 모델 기반 표준 개발 도구와 프레임워크를 담당하는 Accelerated Development Environment 팀과 함께 일하는 Asia Pacific Architect Practice 소속의 소프트웨어 설계자입니다. Susan의 주요 관심사는 모델 기반 개발, 소프트웨어 아키텍처와 패턴, 소프트웨어 안정성, 그리고 소프트웨어 방법론입니다.

Steve Eadie는 소프트웨어 팩토리와 DSL에 관련된 작업을 담당하는 EDS Portfolio Development 소속의 소프트웨어 설계자입니다. Steve의 주요 관심사는 모델 기반 개발, 소프트웨어 방법론, 소프트웨어 아키텍처와 패턴, 그리고 모바일 컴퓨팅입니다.


Microsoft