TN_1109: TechNote 1109 시스템 및 시스템 디자이너
Bill Gibson, 프로그램 관리자
Microsoft Corporation
적용 대상 :
Microsoft Visual Studio 2005 Team System
Visual Studio Team Edition for Software Architects 에는 응용 프로그램 디자이너와 시스템 디자이너라는 응용 프로그램 소프트웨어를 디자인하기 위한 두종류의 디자이너가 있습니다. 응용 프로그램 디자이너는 솔루션 내에서의 응용 프로그램의 작성과 연결을 쉽게 합니다. 또, 이 디자이너로 배포를 정의할 수도 있고 이것만 있으면 더이상 다른 것이 필요없다고 생각될 정도입니다. 그러나 정말 중요한 것은 아키텍처 디자인 도구인 시스템 디자이너입니다. 응용 프로그램 디자이너는 중요하지만 보조적인 역할을 완수합니다. 여기에서는 시스템 사용과 시스템 디자이너의 역할을 설명하고, 그 중요성을 보여줍니다.
시스템
시스템 정의 모델 (SDM)에서는 시스템을 리소스 구성으로서 정의합니다. 응용 프로그램 층에는 원자 시스템과 복합시스템이라는 중요한 두 가지 시스템이 있습니다. 원자 시스템은 어셈블리, DLL, 구성 파일 등의 리소스로 구성되며, 응용 프로그램으로 불립니다. 복합시스템은 응용 프로그램이나 그 외의 복합시스템에서 완성되어, 응용 프로그램 시스템 (또는 단지 "시스템 ")으로 불립니다. 응용 프로그램이 단독으로 배포되는 예외적인 경우를 제외하고, 시스템은 항상, 함께 배포되는 복수의 응용 프로그램의 구성을 기술하기 위해서 사용됩니다. 복잡한 데이터 센터의 시나리오에서는 응용 프로그램 아키텍처는 다수의 서로 연결된 시스템에 의해서 기술됩니다.
SDM의 자세한 내용은 「시스템 정의 모델 」을 참조해 주세요.
응용 프로그램 다이어그램의 범위
응용 프로그램 디자이너의 목적은 시스템 디자이너를 사용하여 시스템에 조립할 수 있는 응용 프로그램의 정의를 쉽게 합니다. 응용 프로그램 디자이너를 사용해 작성한 응용 프로그램 다이어그램의 범위는 1 개의 Visual Studio 솔루션이 됩니다. 다이어그램 상의 응용 프로그램은 다음 3가지 카테고리로 분류됩니다.
- 구현 가능한 응용 프로그램 : 구현되는 또는 구현 할 수 있는 응용 프로그램. ASP.NET 응용 프로그램, Windows 응용 프로그램, Office 응용 프로그램 등이 있습니다. 구현 가능한 응용 프로그램은 Visual Studio 프로젝트, 소스 코드 및 구성 파일 사이의 동기화를 지원합니다.
- 외부 응용 프로그램 : 솔루션에 포함되지 않지만, 솔루션내의 응용 프로그램에서 참조하는 응용 프로그램.
- 그 외의 응용 프로그램 : 모델화 되어있지만, 코드와 동기되지 않는 응용 프로그램. 일반 응용 프로그램이나 SDM SDK 를 사용하여 정의되는 사용자 지정 응용 프로그램 타입 기반하는 모든 응용 프로그램이 포함됩니다.
구현 가능한 응용 프로그램에서의 접속은 이러한 응용 프로그램이 솔루션내에서 어떻게 구성되는지 또는 구성될 예정인지를 보여줍니다.
솔루션은 Visual Studio 내의 빌드 프로세스를 제어하지만, 이것은 특정 디자인이나 배포 의미 체계(Semantics)가 없는 범위로 설정된 임의의 구성요소입니다. 시스템과 달리, 솔루션은 구성 가능하지는 않습니다. 많은 경우, 솔루션에는 개발 프로세스 내에 사용되어도 배포에 포함 예정이 없는 프로젝트를 포함하고 있습니다. 이러한 프로젝트의 예는 동작이 스텁 아웃(Stubbed-out) 된 테스트 클라이언트나 테스트 서비스가 있습니다. 테스트 응용 프로그램을 포함한 테스트 버전의 시스템을 정의 및 배포하는 경우가 있지만, 최종적으로 배포하는 운용 시스템에는 이러한 시스템은 포함하지 않습니다. 따라서 솔루션을 범위로 한다, 자동적으로 관리되는 기본 시스템을 기반으로 "테스트" 배포 정의를 기술하여 디자인의 응용 프로그램을 유효성 검사 할 수 있지만, 대부분의 경우, 배포하고자 하는 구성을 기술하기 위해 명시적인 시스템을 정의할 필요가 있습니다.
테스트 배포 정의에 대한 자세한 내용은 「 기본 시스템의 이해와 사용」을 참조해 주세요.
시스템의 작성과 멤버의 추가
솔루션 탐색기를 사용하여 솔루션 수준에서 새로운 시스템을 추가하거나 응용 프로그램 다이어그램 상에서 선택한 하나 이상의 응용 프로그램에서 시스템 정의를 작성할 수 있습니다. 시스템을 작성하면, 응용 프로그램이나 시스템을 추가 또는 삭제하고, 시스템 정의를 확장할 수 있습니다. [System View] 윈도우에서 응용 프로그램이나 시스템을 드래그 하여, 시스템에 새로운 멤버를 추가할 수 있습니다.
시스템 디자이너에서는 임의의 수의 응용 프로그램이나 그 외의 시스템으로 구성되는 사용자 지정 구성을 작성할 수 있습니다. 테스트 응용 프로그램을 제외 가능할 뿐만 아니라, 다른 배포 문맥에 맞추어 응용 프로그램의 사용자 지정 구성을 작성할 수 있습니다 (이것은 일반적인 요건의 하나입니다).예를 들어, 유럽에서는 유럽의 세법에서 대응할 수 있는 서비스로 구성된 시스템 배포가 필요합니다. 그러나 동등의 시스템을 다른 시장에 배포하는 경우에는 다른 서비스가 필요합니다. 마찬가지로 다른 제품 SKU 를 나타내는 다른 시스템을 정의하는 경우도 있습니다. 예를 들어, 상위의 SKU 에는 보다 고도의 시스템을 구현하거나 하위의 SKU에서는 생략 할 수 있습니다.
멤버 사이의 접속
응용 프로그램 다이어그램에서는 연결은 개발환경의 응용 프로그램의 실제 구성을 나타냅니다. 대조적으로 시스템 다이어그램 상의 연결은 시스템 배포 때에 응용 프로그램 구성을 나타냅니다. 예를 들어, 판매 시스템의 시스템 다이어그램 상에서는 매장 클라이언트 응용 프로그램이 카탈로그 서비스에 접속되며 카탈로그 서비스는 카탈로그 데이터베이스에 접속됩니다. 이 판매 시스템을 배포 할 때는 이러한 매장 클라이언트, 카탈로그 서비스 및 카탈로그 데이터베이스를 배포해야 합니다. 또, 매장 클라이언트를 카탈로그 서비스에 접속하도록 구성하여, 카탈로그 서비스가 카탈로그 데이터베이스에 접속하도록 구성해야 합니다.
.gif)
그림 1 3 개의 멤버 응용 프로그램에서 완성되는 판매 시스템의 초기 디자인
응용 프로그램 다이어그램 상의 연결된 응용 프로그램에서 시스템을 작성하는 경우, 이러한 응용 프로그램의 연결은 편의상 시스템 다이어그램 상에서도 유지됩니다. 다만, 시스템 다이어그램 상에서는 응용 프로그램 다이어그램의 구성과는 다른 구성을 써서 응용 프로그램을 구성할 수 있습니다 (응용 프로그램을 구현 하는 경우, 솔루션내의 구성이 반영됩니다).시스템 다이어그램 상의 응용 프로그램 연결은 솔루션의 이러한 응용 프로그램 구성이나 다른 시스템 다이어그램 상에서의 이러한 연결에 영향을 주지 않고 삭제 또는 변경할 수 있습니다. 마찬가지로 응용 프로그램 다이어그램 상의 응용 프로그램 연결은 시스템 다이어그램 상의 접속에 영향을 주지 않고 삭제 또는 변경할 수 있습니다. 다만, 응용 프로그램의 끝점을 삭제하면, 시스템 다이어그램 상의 끝점(endpoint)과 이러한 끝점에의 연결이나 대리자(delegate)도 삭제됩니다.
위의 예로 카탈로그 서비스를 복사하여 응용 프로그램 다이어그램에 붙여 카탈로그 서비스의 테스트 버전을 작성하여 구현한다고 합시다. 이 경우, 판매 시스템 내의 매장 응용 프로그램의 접속 상태에 영향을 주지 않고 응용 프로그램 다이어그램 내에서 매장 응용 프로그램을 테스트 버전의 카탈로그 서비스에 접속할 수 있습니다. 응용 프로그램 다이어그램 상의 이 연결에 대해 기존의 접속을 삭제하여, 응용 프로그램을 테스트 서비스에 접속하여 변경할 수 있습니다. 응용 프로그램 다이어그램 상에서 접속을 삭제해도 판매 시스템 내의 매장 응용 프로그램의 접속 상태에는 영향은 없습니다. 다만, 응용 프로그램 다이어그램 내에서 접속을 변경하면, 솔루션내의 매장 응용 프로그램의 Web.config 파일이 재구성하기 위해, Web 참조 URL 가 테스트 서비스의 URL 로 변경됩니다. 이 변경에 의한 영향은 F5 키를 눌러 솔루션을 디버그 할 때, 확인할 수 있습니다.
시스템 내의 구성 덮어쓰기
시스템 다이어그램의 하나의 중요한 기능은 응용 프로그램 구성 (구체적으로는 구성 설정)을 덮어쓰기 할 수 있는 것입니다. 응용 프로그램 디자이너에서는 설정 및 제약 편집기를 사용하여, 응용 프로그램 정의에 연결된 설정을 편집할 수 있습니다. 응용 프로그램이 구현되면, 설정에 대한 변경이 적절한 구성 파일과 동기 됩니다. 개개의 설정은 응용 프로그램 디자이너의 설정 및 제약 편집기를 사용하여, 덮어쓸 수 있도록 지정할 수 있습니다. 이 조작에 의해, 특정 시스템의 문맥에서, 시스템 디자이너 내에서 이러한 설정을 덮어쓰기 할 수 있는 것을 보여줍니다. 또, 설정을 배포 설정에서 지정할 수도 있는데 이것은 설정 값이 운영자 또는 배포 스크립트에 의해 배포내에 지정되는 것을 보여줍니다. 시스템을 배포 할 때, 응용 프로그램의 실제 구성은 덮어쓰기 할 수 있는 일련의 설정에 의해 정해집니다. 기본값 설정은 기반이 되는 추상 응용 프로그램 형식에 따라 정의됩니다. 이것들은 응용 프로그램 다이어그램 내의 응용 프로그램 정의로 지정되어 있는 설정에 의해서 덮어쓰기 될 가능성이 있고, 응용 프로그램 다이어그램 내의 설정은 시스템 다이어그램 내에서의 이 응용 프로그램의 사용에서 정의되는 설정에 의해 덮어쓰기 될 가능성이 있습니다. 최종적으로 이러한 설정 모든 것이 실제 배포 때에 덮어 쓰여지게 됩니다.
시스템의 조립과 프록시 끝점(endpoint)
시스템은 구성 뿐만이 아니라, 캡슐화의 경계도 정의합니다. 응용 프로그램 시스템은 또 다른 SDM 시스템에 지나지 않기 때문에 하부구조로서 다른 시스템에 포함할 수 있습니다. 시스템은 피어의 하부구조 또는 다른 시스템 내의 응용 프로그램과 접속할 수 있도록, 끝점을 공개해야 합니다. 시스템 멤버의 임의의 끝점을 시스템 끝점으로서 선택하여 공개하고, 그 멤버의 동작을 퍼블릭으로 할 수 있습니다. 필요에 따라서 소비자 끝점 혹은 공급자 끝점 혹은 양쪽 모두를 공개할 수 있습니다. 프록시 끝점을 시스템에 추가하여 끝점을 공개합니다. 이 프록시 끝점은 멤버 끝점에 통신을 전달합니다. 멤버도 시스템이 될 가능성이 있어, 이 경우, 이 프록시 끝점은 다른 시스템에도 통신을 전달할 수 있습니다. 따라서 시스템을 제한 없이 중첩될 수 있습니다. 시스템에 프록시 끝점을 작성하려면, 공개하는 멤버 끝점을 오른쪽 클릭하여 [Add Proxy Endpoint] 를 클릭하거나 Alt 키를 누르면서 멤버 끝점에서 시스템경계에 드래그 합니다.
.gif)
그림 2 카탈로그 서비스와 데이터베이스를 캡슐화하는 카탈로그 시스템
카탈로그의 예로 돌아와서, 카탈로그 관리자 응용 프로그램과 카탈로그 데이터베이스를 캡슐화하여, CatalogManager의 웹 서비스 끝점만을 공개하는 카탈로그 시스템을 도입할 수 있습니다. 그림 2 를 참조해 주세요.
이 새로운 카탈로그 시스템을 단일 엔터티로서 판매 시스템이나 다른 시스템에서 사용할 수 있습니다. 그림 3 을 참조해 주세요.
.gif)
그림 3 카탈로그 시스템을 멤버로서 포함한 개정한 판매 시스템
시스템은 단지 구성일뿐
시스템은 그 멤버를 배포용으로 어떻게 구성하는지 정의합니다. 조립되고 연결된 시스템 내의 모든 대리자(delegate)와 연결은 배포 때에 하위의 응용 프로그램 사이의 접속으로 해결됩니다. 일반적으로 일단 배포되면 시스템은 구체적인 형태를 띠지 않습니다.
시스템 정의의 크기 조정을 변경할 수도 있습니다. 시스템 정의는 적절한 호스트 시스템에 배포할 필요가 있는 일련의 멤버입니다. 시스템의 배포에서는 데이터 센터의 크기 조정 불변 모델내에서 시스템의 각 멤버가 한번만 호스트에게 배포됩니다. 어떤 응용 프로그램 또는 시스템이 시스템 내에서 다수의 역할을 완수해야 할 경우, 이 종류의 복수의 멤버를 시스템에 포함해 적절히 연결 및 구성해야 합니다. 같은 정의의 새로운 멤버를 추가해도 크기 조정은 변화하지 않습니다. 멤버의 크기 조정은 멤버의 Scalable 속성에 의해서 나타납니다. 확장 가능으로 설정하면, 이 멤버는(예를 들어 서버 팜에) Scale-out 할 수 있는 것을 보여줍니다. 기본값에서는 멤버는 확장 가능하지 않은 것으로 설정됩니다.
기본값에서는 시스템의 모든 멤버는 시스템 배포 때에 배포되어야 합니다. 각각의 멤버는 선택적으로 설정 할 수 있습니다. 이것은 그 멤버가 시스템 배포에 불필요한 것을 보여줍니다. 생략 가능하도록 설정되지 않은 멤버가 필요로 하는 서비스를 제공하는 멤버는 생략 가능하도록 설정하면 안됩니다.
시스템 정의간의 전환
시스템이 다른 복수의 시스템으로부터 구성된 경우, 복수의 시스템 정의간을 쉽게 이동할 수 있습니다. 시스템 디자이너로 임의의 시스템 멤버를 더블 클릭하면, 다른 시스템 다이어그램이 열려, 시스템의 정의가 표시됩니다. 아무리 많아도, 중첩된 시스템을 드릴다운(drill-down) 할 수 있으며, 도구 막대 위의 Visual Studio의 탐색 버튼을 사용하여, 최근 액세스 한 문서와 원래의 시스템 사이를 왕래할 수 있습니다.
상향식(Bottom-up) 디자인 또는 하향식(top-down) 디자인
시스템 디자이너는 상향식방식으로 응용 프로그램에서 시스템을 작성하는 디자인 대상으로 최적화 되었지만, 하향식(top-down) 방식에서 우선 시스템과 그 동작을 디자인한 후 그 동작을 구현하는 응용 프로그램을 정의할 수도 있습니다. 이것은 응용 프로그램 아키텍트에서 의미 있는 방법입니다. 이 방법의 자세한 내용은 「하향식(top-down) 방식의 시스템 디자인」을 참조해 주세요.
시스템의 버전 관리
다른 모든 SDM 형태와 같이 시스템도 버전 관리될 수 있습니다. SDM에서는 버전 스탬프가 SDM 문서에 적용되어 그 문서 내에서 정의된 모든 형식의 버전으로 정의됩니다. 시스템 내의 모든 멤버 참조는 버전이 지정된 참조이며, 참조할 시스템이나 응용 프로그램의 버전이 지정됩니다. 따라서 시스템의 버전은 그 멤버의 특정 버전에서 구성됩니다.
버전 참조는 다이어그램을 열 때, 이름이 일치하는 SDM 문서와 메이저 버전 번호 및 시스템명에 기반하여 해결됩니다. 적절한 버전이 발견되지 않는 경우, 해당 멤버는 붉게 강조 표시되어 유형 이름에 파선의 밑줄을 붙일 수 있습니다.
참조
SDM 모델의 자세한 내용은 Dynamic Systems Initiative Web 사이트 (http://www.microsoft.com/business/dsi/default.mspx)를 참조해 주세요.
SDM SDK의 자세한 내용은 「System Definition Model」(영어)을 참조해 주세요.