SW/클라우드 서비스 아키텍처

소프트웨어 아키텍처 관점과 뷰 : 정의, 개념, 종류, 개요

얇은생각 2020. 4. 23. 19:30
반응형

관점과 뷰

소프트웨어 시스템은 자체는 무엇인지 특징 짓기 어렵습니다. 그러나 특정한 시각을 갖고 그 시각이 집중하여 보려 하면 복잡한 소프트웨어 시스템도 그 방향에서의 모습을 보입니다. 이렇게 소프트웨어 시스템을 포착하기 위한 시각을 관점이라고 하고 그 관점에서 본 시스템의 모습을 뷰라고 합니다.

소프트웨어 시스템 그 자체는 볼 수 없지만 슬라이드의 사진에서와 같이 적절한 관점들과 그 관점들에서 본 뷰들로 소프트웨어 시스템의 아키텍처를 가시화시킬 수 있습니다.

 

 

관점

시스템이 관심을 갖는 이해당사자에 따라 관점이 달라지고 이들 숫자만큼 다양하다고 원칙적으로 이 질문에 답할 수 있습니다. 그러나 실제로는 많은 가능한 관점 중에서도 소프트웨어 개발을 위해 특히 중요하여 일반적으로 많이 이용되는 관점들이 있습니다.

 

 

논리적 관점

논리적 관점은 시스템 개발의 관건이 되는 중심적인 문제 해결을 겨냥한 관점입니다. 논리적 관점에서는 컴포넌트는 연산 혹은 처리를 수행하는 요소이고 커넥터는 그러한 컴포넌트들을 연결하는 요소입니다.

 

 

모듈 관점

모듈 관점은 시스템이 어떤 코드 모듈로 구성되고 그들이 어떻게 연결되어야 하는지 보이는 관점입니다. 코드 모듈은 물론 논리 위에서 파악되는 컴포넌트와 커넥터들의 구현을 담는 코드 모듈들입니다. 아직 코드는 만들지 않았지만 코드가 들어갈 모듈별로 시스템의 모습을 설계하는 것입니다. 같은 시스템이지만 논리적 관점에서 보았을 때와 모듈 관점에서 보았을 때 이와 같이 다른 모습을 갖게 됩니다.

이 모듈들을 보면 논리적 아키텍처 뷰의 컴포넌트들은 동일한 이름을 가진 모듈로 구현되도록 설계되어 있고, 그 외에도 솔루션이 동작하기 위하여 필요한 메인, 컨피그, 인풋, 아웃풋의 코드 모듈들이 식별되어 있는 것을 볼 수 있습니다. 모듈 관점에서는 컴포넌트는 물론 코드 모듈이고 커넥터는 이 모듈들 간의 다양한 연결 관계입니다.

주로 관심이 되는 모듈들 간의 관계는 Is Part Of 관계, Depends On 관계, Is a 관계 혹은 Is a Kind Of 관계입니다. 특히 이들 관계는 널리 사용되는 설계의 하나인 UML에서 지원됩니다. UML 클래스 다이어그램에서 이들 관계는 각각  Aggregation 혹은 Composition 관계, Dependency 관계, Generalization 혹은 Subclass 관계로 지원됩니다.

 

 

실행 관점

실행 관점은 시스템의 실행 시 모습에 초점을 두며 실행 뷰는 실행 시에 등장하는 요소들로 구성됩니다. 실행 뷰도 당연히 해당 시스템의 논리적 아키텍처와 모듈별 아키텍처에 부합되게 설계되어야 합니다. 실행 관점의 컴포넌트들은 프로세스, 스레드, 메모리 등의 실행 시에 동작하는 연산 요소들이고 실행 관점의 커넥터들은 이들을 연결하는 실행 시의 상호작용 방식들입니다.

이러한 아키텍처 관점들은 보통 개발 대상 시스템에 맞는 적절한 조합으로 선택됩니다. 적절한 조합은 시스템의 이해당사자들이 누구인지 어떤 아키텍처 스타일을 선택했는지 등의 요인에 따라 달라집니다.

 

 

아키텍처 관점 체계

아키텍처 설계를 위하여 채택된 아키텍처 관점들의 집합을 아키텍처 관점 체계라고 부릅니다. 잘 알려진 아키텍처 관점 체계로는 크루튼의 4+1 관점 체계, 지멘스의 4 뷰 포인트 관점 체계, 로잔스키의 관점 체계 등이 있습니다.

크루튼의 4+1 관점 체계는 논리적 관점, 개발 관점, 프로세스 관점, 물리적 관점의 4개 외에 시나리오 관점이라는 다섯 번째 관점을 포함합니다. 시나리오는 보통 시스템의 아키텍처에 포함되지 않는다고 생각하기 쉽지만 시스템이 사용자를 위해 서비스 시나리오를 제공해야 합니다. 그러기 위해서는 시스템의 동작 시나리오가 필요하고 시스템의 동작 시나리오는 설계된 아키텍처에 의하여 만들어진다는 것을 생각하면 아키텍처적으로 중요한 시나리오들의 집합을 하나의 아키텍처 관점에서 보는 것은 자연스럽습니다.

로잔스키의 관점 체계는 슬라이드에 열거된 7개의 관점들로 구성되며 다른 관점 체계들에서 하나의 독립된 관점으로 언급되지 않지만, 시스템 개발을 위하여 중요한 컨텍스트 관점, 인포메이션 관점을 특히 잘 강조하고 있습니다.

 

 

참조 관점 체계

궁극적으로 서비스를 제공하기 위해서는 소프트웨어는 실행되어야 합니다. 따라서 소프트웨어 실행 시의 모습을 잘 알아야 그러한 실행을 가능하도록 하는 소프트웨어를 잘 만들 수 있습니다. 따라서 아키텍처 설계를 위하여 실행 측면을 고려하여야 합니다. 또한 실행은 코드가 실행 환경에 배치되어야 가능해지기 때문에 소프트웨어 코드 측면도 중요합니다.

즉 실행과 코드의 두 가지 측면을 동시에 고려함으로써 개발해야 하는 소프트웨어에 대한 필요한 모습을 적절히 그려낼 수 있습니다. 또한 문제에서 바로 원하는 시스템의 모습을 얻으려 하기보다 점진적으로 시스템을 얻으려 함으로써 요구 사항을 체계적으로 충족시키는 시스템의 모습을 만들어 갈 수 있기 때문에 아키텍처 설계도 개략적인 수준에서 구체적인 수준으로 점진적으로 진행되어야 합니다.

따라서 아키텍처의 수준을 개념적 수준, 논리적 수준, 물리적 수준, 배치 수준으로 구분할 수 있습니다. 이렇게 볼 때 슬라이드의 표와 같이 총 8개의 관점이 개발의 진행을 위하여 사용될 수 있다고 볼 수 있습니다. 이들은 시스템 개발을 위하여 필요한 대부분의 관점을 망라하기 때문에 이 관점들로 이루어진 관점 체계를 참조 관점 체계라고 부르기도 합니다.

 

 

소프트웨어 아키텍처 관점과 뷰 : 정의, 개념, 종류, 개요

 

위 그림은 소프트웨어의 단계별로 참조 관점 체계의 관점별 아키텍처 뷰들의 역할을 보여줍니다. 즉 시나리오와 개념 뷰는 요구 사항 분석의 결과이며 이어지는 아키텍처 설계의 출발점이 됩니다. 아키텍처 설계에서는 나머지 6개의 뷰가 설계됩니다. 이들 중 모듈 뷰와 실행 뷰는 상세 설계에서, 코드 뷰는 구현에서, 실행 뷰와 배치 뷰는 통합 및 시험에서 주로 사용됩니다. 아키텍처 관점이 하나가 아니라 여러 개이면, 아키텍처 드라이버별로 적절히 다루어질 수 있는 관점이 달라집니다.

 

소프트웨어 아키텍처 관점과 뷰 : 정의, 개념, 종류, 개요

 

그 결과로 구체적으로 각 아키텍처 관점의 어떤 품질 속성이 관련되는지 위 표가 보여줍니다. 이해성의 경우 모든 관점에 관련되는 품질 속성입니다. 한편 성능 품질 속성은 실행 측면에 관련한 모든 관점에 관련되는 품질 속성이지만 코드 측면의 관점에는 관련되지 않습니다. 시험용이성은 코드 측면의 모든 관점에 관련되고 그 외에도 논리적 관점에 관련됩니다. 여러 관점들 가운데서도 특히 논리적 관점과 모듈 관점은 많은 품질 속성에 관련되어 이 품질 속성들을 다루어줄 수 있는 매우 중요한 관점이라는 것을 쉽게 알 수 있습니다.

반응형