군대에서 최고위급 지휘관들의 관심 사항은 전시에 군사력을 어떻게 분할하여
어느 곳에 배치하느냐입니다. 왜냐면 군사력의 분배가 잘되면 적군을 효과적으로
공격할 수 있고, 방어도 더 잘 할 수 있기 때문이죠. 또한 이에 맞게 중화기를
포함한 무기류들도 여러 목표를 공격할 수 있는 위치를 선정하여 배치해야 합니다.
자원의 배치를 어떻게 하느냐에 따라 동일한 자원량을 가지고도 전장에서의 승패는
확연히 달라지기 때문입니다.
SW 시스템도 마찬가지입니다. 여러 곳에 물리적으로 또는 논리적으로 분산되어
있는 H/W 자원에 어떻게 SW 컴포넌트를 잘 배치하느냐에 따라 성능의 차이가
날 수 있습니다. 이렇게
SW 컴포넌트의 분산 배치를 정의한 모델이 바로
디플로이먼트 다이어그램입니다.
자, 그럼 디플로이먼트 다이어그램이 뭔지 알아볼까요?
1.개요
|
|
 |
그리고 디플로이먼트 다이어그램은 시스템의 설계 단계의 마지막에 작성합니다. 즉, 모든 설계가 거의 마무리되어 SW 컴포넌트가 정의되고, 시스템의 HW 사양도 확정된 후 디플로이먼트 다이어그램이 작성될 수 있습니다. | |
|
디플로이언트 다이어그램 작성하는 목적은 다음과 같습니다. |
 |
 |
SW시스템이 배치, 실행될 HW자원들을 정의합니다. |
 |
|
디플로이먼트 다이어그램은 다른 UML 다이어그램들과는 달리 HW자원들을 명시적으로 정의하는 용도로 작성됩니다. 그러나 이렇게 HW를 정의하는 목적이 HW 자체의 사양을 정의하고 설명하기 위한 것은 아닙니다. 오히려 SW 시스템이 탑재되어 동작하는 매개체로서, HW자원을 정의한다라는 관점에서 정의합니다. |
 |
 |
SW 컴포넌트가 어떤 HW 자원에 탑재되어 실행될지 정의합니다. |
 |
|
디플로이먼트 다이어그램은 실행모듈(컴포넌트)을 분산된 HW자원에 적절히 배치하여 원하는 성능과 효율을 낼지를 정의하는 목적으로 작성됩니다. 따라서 디플로이먼트 다이어그램에는 SW자원과 HW자원이 동시에 표현됩니다. |
 |
 |
HW 자원의 물리적인 구성을 정의합니다. |
 |
|
SW컴포넌트가 탑재된 HW자원들은 적절한 성능을 내기 위해 물리적인 연결을 가지고 있어야 합니다. 디플로이먼트 다이어그램은 어떤 HW자원간에 연결이 있는지, 그 연결은 어떠한 성능을 가진 연결인지를 정의합니다. | | |
2.구성요소
|
 |
컴포넌트의 표기 |
 |
|
|
 |
 |
컴포넌트의 정의 |
 |
|
 |
컴포넌트는 독립적으로 배포되고 교체되며 재사용될 수 있는 SW조각를 의미합니다. |
|
보통의 경우 실행모듈을 말하지만, 실제 통용되는 컴포넌트라는 용어는 항상 실행모듈만을 가리키지는 않습니다. |
 |
 |
컴포넌트가 가끔은 아주 광의로 사용되어서 소스코드나 UI(User Interface), 분석, |
|
설계 산출물들을 포함한 것을 의미하기도 합니다. |
 |
 |
컴포넌트라는 용어의 의미는 문맥에서 말하는 사람의 의도를 생각해서 받아들여야 |
|
합니다. | |
 |
 |
컴포넌트의 예 |
 |
|
컴포넌트는 매우 다양한 크기로 정의되며. 아래 예들은 한정된 컴포넌트의 사례일 뿐입니다. |
 |
|
결재 시스템에서 |
결재, 사원 등 |
전자 상거래 시스템에서 |
우편번호 검색, 신용카드 결재 등 | | | |
|
 |
Dependency의 표기 |
 |
|
 |
|
점선 화살표로 표현하고 필요에 따라 선 위에 설명을 붙이기도 합니다. | |
 |
 |
Dependency의 정의 |
 |
|
 |
객체나 컴포넌트가 다른 객체나 컴포넌트의 실행을 요청하는 경우, 즉 사물간의 |
|
실행 혹은 참조관계를 표현합니다. |
 |
 |
Class와 Class, Package와 package, Component와 Component에 주로 |
|
사용되는 관계이고, 때로는 Class-Package-Component 상호 간에도 사용되는 관계입니다. | | | |
|
다음은 디플로이 다이어그램의 두 번째 사례입니다. 첫 번째 사례와는 노드의 내부에 컴포넌트를 포함하여 표현하였습니다. 이 모델이 무엇을 말하고 있는지 해석해 봅시다. |
 |
| |
이 디플로이먼트 다이어그램은 이 시스템의 HW가 Diabetes Unit Server의 세 가지로
구성됨을 표현하고, 각 서버에 SW 컴포넌트의 배치 상황을 모델링하였습니다.
|
마지막 디플로이먼트 다이어그램의 사례입니다. 모델이 의미하는 바를 해석해 봅시다. |
 |
| |
이 디플로이먼트 다이어그램은 상위 레벨의 논리적인 관점에서 노드를 정의하였습니다.
노드에 탑제된 SW 컴포넌트도 시스템 단위의 매우 큰 단위임을 알 수 있습니다
(KnowledgeWave System). 이 모델은 시스템 레벨의 관점에서 전체적인 논리적
HW의 구성과 SW 시스템 간의 구성 관계를 이해하는 목적으로 작성되었습니다.
4. 작성단계 및 주의사항
|
 |
 |
|
다음은 디플로이먼트 다이어그램 작성 시 주의사항입니다. |
 |
 |
목적을 전달할 수 있는 명확한 의미의 명칭을 부여해야 합니다. |
 |
|
노드 명과 스테레오 타입으로 정의하는 하드웨어 특성등은 표현 방식에 기준이 없습니다. 하지만 시스템과 관련없는 제 3 자가 보더라도 그 의미를 이해 할 수 있게 쉽고, 명확한 용어를 사용하여 명칭을 정의하야 합니다. 모호한 명칭으로 정의하면 혼란만 야기 시키는 결과가 됩니다. |
 |
 |
문제 영역의 H/W에 대한 명쾌한 추상 개념을 제공하도록 작성합니다. |
 |
|
SW 자원이 탑재되어 운영되는 보조적인 용도 뿐 아니라, 디플로이먼트 다이어그램은 시스템의 하드웨어 구성을 개념적으로 보여주는 훌륭한 도구가 됩니다. 이러한 용도를 살려 HW 자원의 구성에 대한 좋은 모델이 되도록 정의합니다. |
 |
 |
Model을 만든 목적을 전달하기에 필요한 수준까지만 분해되어 있습니다. |
 |
|
디플로이먼트 다이어그램에 모든 HW 장비가 나타날 필요는 없습니다. 오히려 이러한 시도는 다이어그램을 장황하고 복잡하게 만들어서 의미를 파악하기 힘들게 합니다. 목적과 용도에 부합하는 요소들만 정의하면 충분합니다. | | |