BLOG main image
분류 전체보기 (344)
NWC Consulting (1)
서비스 (173)
출판 (169)
일반 (0)
195,318 Visitors up to today!
Today 34 hit, Yesterday 86 hit
daisy rss
2013.04.16 13:55

인간이 한 번에 다룰 수 있는 복잡성은 5개에서 9개 사이라고 한다. 오늘날 시스템의 대부분은 항상 우리의 한계를 넘어서는 복잡성을 가지고 있다. 우리는 우리의 한계를 잘 이해하고 한 번에 다룰 수 있는 수를 줄여야 한다.

어떤 한 아키텍처에 대해 의미있게 커뮤니케이션하기 위해서, 우리는 한 순간에 다루어지는 구조나 구조들을 분명히해야 한다.

소프트웨어 시스템에는 다양한 이해관계자들이 존재하고 그들은 자신의 이해관계에 따라 소프트웨어 시스템을 바라보게 된다. 이해관계자들에 의해 읽혀지고 작성되는 응집된 아키텍처 요소들의 집합을 뷰(view)로 나타낸다.

우리는 이전 글(http://umlcert.tistory.com/664)에서 구조가 관계에 의해 함께 묶여진 요소들의 집합이라고 했다. 구조 자체가 요소들의 집합이라는 것이다. 그런데 뷰도 요소들의 집합이란다. 뭐지?

저자들은 다음과 같이 구조와 뷰의 관계를 정리하고 있다. 

A view is a representation of a structure.

구조를 표현하기 위해 뷰를 사용한다는 것이다.

아키텍트는 구조를 설계하고 뷰로 문서화한다.

구조와 뷰에 대한 정의는 저자들의 오랜 고심의 흔적이 보인다. 마지막 문장은 정말 멋지다.

 

구조는 통찰력(insight)을 제공한다. 

뭔가를 논하려면 논할 수 있는 뭔가가 제공되어야 한다. 이해관계자들은 소프트웨어 시스템에 내려지는 중요한 의사결정들에 대해서 논하고 싶은 것이다. 소프트웨어 아키텍처는 이해관계자들에게 구체적인 구조를 제공함으로 논쟁의 근거와 통찰력을 제공한다.

소프트웨어 시스템에 있어 품질 속성은 중요한 논쟁거리이기 때문에 소프트웨어 아키텍처에 있어 중요한 대상이 된다.

 

구조의 종류

아키텍처 구조는 어떤 아키텍처 결정이냐에 따라 크게 세 개의 범주(모듈, 컴포넌트-커넥터, 할당)로 나누어진다.

1. 모듈 구조는 어떻게 시스템이 코드 집합이나 데이터 유닛들로 구조화 되는지에 대한 의사결정들을 구체화한다(embody). 모듈 구조의 구성요소는 구현 단위인 모듈이다. 모듈 구조는 시스템에 대한 정적 표현이다. 클래스는 객체지향 개발에 있어서 대표적인 구현 단위이다.

모듈 구조는 다음과 같은 질문에 답한다.

- What is the primary functional responsibility assigned to each module?
- What other software elements is a module allowed to use?
- What other software does it actually use and depend on?
- What modules are related to other modules by generalization or specialization(i.e., inheritance) relationships?

모듈 구조는 시스템에 대한 정적 표현으로 기능적 책임이 어떻게 할당 되었는지를 나타내기 때문에 시스템의 기능적 책임이 바뀌게 될 때 직접적인 정보를 제공한다. 이러한 이유로 모듈 뷰는 시스템의 수정가능성(modifiablility)에 대한 근거를 제공할 때 사용될 수 있다.   

2. 컴포넌트-커넥터 구조는 어떻게 시스템이 런타임 행위와 상호작용으로 구조화 되지에 대한 의사결정을 구체화한다. 컴포넌트는 런타임 행위에, 커넥터는 상호작용에 해당하는 요소이다. 컴포넌트-커넥터 구조는 시스템에 대한 동적 표현이다.

컴포넌트-커넥터 구조는 다음과 같은 질문에 답한다.

- What are the major executing components and how do they interact at runtime?
- What are the major shared data stores?
- Which parts of the system are replicated?
- How does data progress through the system?
- What parts of the system can run in parallel?
- Can the system’s structure change as it executes and, if so, how?

컴포넌트-커넥터 뷰는 런타임 시에 대한 것으로 시스템의 런타임 특성들에 대한 근거를 제공할 때 사용될 수 있다.

3. 할당 구조는 어떻게 시스템이 소프트웨어 구조가 아닌 구조(CPUs, file systems, networks, development teams과 같은)와 관련되는지에 대한 의사결정을 구체화한다. 이들 구조는 소프트웨어 요소와 소프트웨어가 만들어지고 실행되는 하나 이상의 외부환경의 요소들 사이의 관계를 보여준다.

할당 구조는 다음과 같은 질문에 답한다.

- What processor does each software element execute on?
- In what directories or files is each element stored during development, testing, and system building?
- What is the assignment of each software element to development teams?

위의 세 가지 범주와 아래의 유용한 구조들에 대해서는 Documenting Software Architecture 2nd에서 매우 상세하게 설명하고 있다. 이 책에 대한 세미나 내용은 다음 링크를 참조하면 된다.

 http://umlcert.tistory.com/tag/DSA세미나

 

유용한 구조들

복잡한 전체는 다수의 부분들로 분할(decomposition structure)되고, 부분들의 협력으로 자신의 책임을 실현한다. 부분들은 협력을 위해 다른 부분을 사용하거나 다른 부분에 의해 사용(use structure)된다. 

모듈이 다른 모듈과 상관 없이 독립적으로 개발되고 수행될 수 있다면 복잡성은 크게 줄어들 것이다. 이렇게 하기 위해서는 기능을 독립적으로 분리하고 이를 조합하는 메커니즘이 필요하다(service structure). 실행 시에 중요하게 고려할 부분은 병행처리와 자원의 사용이다(concurrency structure).

모듈은 개발 조직에 할당되고(work assignment), 구현된다. 모듈은 파일 형태로 구현되기 때문에 파일 구조에 매핑된다(implementation structure). 구현된 모듈은 실행을 위해 배치된다(deployment structure).  

표 1.1은 이들 구조들을 요약해 놓았다.

 

구조들 사이의 관계

어떤 구조의 요소들은 다른 구조의 요소들과 관계를 갖을 수 있다.

 

적을 수록 좋다

투자에 대한 긍정적인 리턴이 있을 때에만 구조에대해 설계하고 문서화하라.

 

어떤 구조를 선택해야 하는가?

시스템의 중요한 품질 속성을 제공하는데 최고의 역할을 하는 구조를 선택하라.

저작자 표시 비영리 변경 금지
신고
Name
Password
Homepage
Secret

티스토리 툴바