소프트웨어 아키텍처 분야의 이론적 기반을 마련하고, 아키텍처 스타일의 중요성을 강조함으로써 아키텍처 연구와 실무에 깊은 영향을 미친 논문을 리뷰해보겠습니다.
배경 지식
소프트웨어 아키텍처는 대규모 복잡한 소프트웨어 시스템의 설계와 개발을 돕는 소프트웨어 개발의 기본적인 측면입니다. 소프트웨어 아키텍처는 소프트웨어 시스템의 구성 요소, 구조 및 속성에 대한 개요를 제공합니다. 소프트웨어 아키텍처는 시스템 요구 사항을 충족시키고 설계를 안내하는 데 사용됩니다.
논문 요약
논문 "Foundations for the Study of Software Architecture"은 소프트웨어 아키텍처에 대한 기반을 구축하는 것을 목표로 합니다. 저자는 여러 잘 확립된 건축 분야(하드웨어, 네트워크, 건축 아키텍처)에서 영감을 얻어 소프트웨어 아키텍처 모델(3.1 The Model)을 제시하고 소프트웨어 아키텍처 스타일(3.2 Architectural Style)의 개념을 소개한 후, 처리, 데이터, 커넥터 뷰의 상호 의존성(3.3 Process/Data/Connector Interdepence)에 대해 설명합니다.
소프트웨어 아키텍처를 Elements, Form, Rationale의 세 가지 구성 요소로 정의하는 소프트웨어 아키텍처 모델을 제안합니다.
Elements 는 Processing Elements, Data Elements 또는 Connecting Elements입니다.
- Processing Elements
- 소프트웨어 아키텍처에서 처리 요소는 데이터 요소를 변환하는 기능을 수행하는 구성 요소입니다.
- 이러한 처리 요소는 함수, 메서드, 모듈, 클래스와 같은 다양한 형태로 나타날 수 있습니다.
- 처리 요소는 데이터 요소를 입력으로 받아 출력으로 변환된 데이터 요소를 생성합니다.
- Data Elements
- 소프트웨어 아키텍처에서 데이터 요소는 처리 요소에서 사용되고 변환되는 정보를 나타냅니다.
- 이러한 데이터 요소는 변수, 데이터 구조, 파일, 데이터베이스와 같은 다양한 형태로 나타날 수 있습니다.
- 데이터 요소는 처리 요소가 수행하는 작업의 기반이 되며, 아키텍처의 상태를 나타냅니다.
- Connecting Elements
- 소프트웨어 아키텍처에서 연결 요소는 처리 요소와 데이터 요소 간의 상호 작용을 가능하게 하는 구성 요소입니다.
- 이러한 연결 요소는 메시지 전달, 공유 메모리, 파이프와 같은 다양한 형태로 나타날 수 있습니다.
- 연결 요소는 데이터 요소를 처리 요소 간에 전송하고, 처리 요소 간의 동기화와 통신을 가능하게 합니다.
Form는 Weighted Properties 와 Relationships 으로 구성됩니다.
- Weighted Properties
- 소프트웨어 아키텍처에서 가중 속성은 처리 요소, 데이터 요소, 연결 요소의 특성을 나타내는 속성입니다.
- 이러한 속성은 중요성이나 우선 순위를 나타내는 가중치를 가질 수 있습니다.
- 가중 속성을 사용하면 아키텍처에서 어떤 속성이 더 중요한지 명시적으로 지정할 수 있습니다.
- Relationships
- 소프트웨어 아키텍처에서 관계는 처리 요소, 데이터 요소, 연결 요소 간의 상호 작용을 나타냅니다.
- 이러한 관계는 의존성, 상호 작용, 제약 조건과 같은 다양한 형태로 나타날 수 있습니다.
- 관계를 사용하면 아키텍처의 구조와 동작을 정의할 수 있습니다.
Rationale 은 아키텍처의 기본이 되는 시스템 제약 조건을 제공합니다. 이러한 제약 조건은 대부분 시스템 요구 사항에서 파생됩니다. Rationale 은 다음과 같은 이유로 중요합니다.
- 아키텍처 선택을 정당화합니다.
- 설계자와 구현자에게 아키텍처의 의도를 전달합니다.
다음으로 Architectural Style 에 대해서도 이야기하고 있습니다. Architectural Style 이 특정 아키텍처들로부터 요소와 형식적 측면을 추상화하는 것이라고 설명합니다. Architectural Style 은 구체적인 아키텍처보다 제약이 적고 완성도가 낮으며, 예를 들어 분산 스타일이나 다중 프로세스 스타일 등을 통해 특정 아키텍처의 특정 측면(처리 요소와 하드웨어 프로세서 간의 관계, 요소에 대한 제약 등)에 초점을 맞춥니다. 아키텍처와 Architectural Style 사이에는 명확한 구분선이 없으며, 사용 방식에 따라 아키텍처가 스타일이 될 수도 있습니다. Architectural Style 의 중요성은 아키텍처 요소에 대한 중요한 결정을 캡슐화하고, 요소와 그 관계에 대한 중요한 제약을 강조하는 데 있습니다. 스타일은 아키텍처를 제한하고 협력하는 아키텍트들을 조율하는 데 사용될 수 있으며, 아키텍처에 대한 특정 측면의 가시성을 제공하여 위반 사항이나 무감각함을 더 명확하게 드러낼 수 있습니다.
그리고 Process/Data/Connector Interdependence 에서는 소프트웨어 아키텍처를 이해하는 데 있어 처리(Process), 데이터(Data), 그리고 연결(Connectors)의 세 가지 중요한 관점을 다룹니다. 이 세 관점은 서로 상호 의존적이며, 각각의 관점이 제공하는 강조점이 다르다는 점을 설명합니다.
- 처리 관점은 데이터 흐름과 처리 요소 간의 연결에 초점을 맞춥니다.
- 데이터 관점은 처리 흐름에 초점을 맞추되, 연결 요소에 대한 강조는 덜합니다.
- 연결 요소는 데이터를 처리기간 이동시키는 메커니즘으로서, 처리와 데이터의 상호 의존성에 중요한 역할을 합니다.
소프트웨어 아키텍처와 소프트웨어 아키텍처 스타일의 구성 요소를 간단한 예제를 통해 아키텍처와 스타일 고려 사항에 대한 이해를 돕고 있습니다. 예제에 대한 내용은 첨부된 논문을 다운로드 받아 읽어보시면 좋을 것 같습니다.
마지막으로 "Some Benefits Derived from Software Architecture" 부분에서는 소프트웨어 아키텍처가 시스템의 요구사항과 디자인 맥락에서 어떤 역할을 하는지, 그리고 시스템 요구사항을 만족시키며 설계 및 구현의 기술적, 관리적 기반을 제공하는 프레임워크로서 어떻게 기능하는지를 이야기합니다. 또한, 소프트웨어 아키텍처가 우리에게 제공하는 두 가지 추가적인 이점에 대해 이야기하고 있습니다.
소프트웨어 아키텍처와 분석 (Software Architecture and Analysis)
소프트웨어 아키텍처 사양의 주요 목적 중 하나가 문서의 자동화된 분석을 제공하여 그렇지 않으면 감지되지 않을 다양한 종류의 문제를 노출하는 것임을 강조합니다. 두 가지 주요 분석 카테고리인 일관성 및 의존성 분석을 수행하여 아키텍처 내부 및 아키텍처 스타일, 요구사항과의 아키텍처 일관성, 그리고 아키텍처와 디자인의 일관성을 확보하는 것이 목적입니다.
아키텍처와 재사용 문제 (Architecture and the Problems of Use and Reuse)
디자이너와 프로그래머의 생산성 향상의 중요한 측면은 다른 사람들의 노력을 기반으로 구축하는 능력, 즉 다른 시스템의 일부이거나 표준 컴포넌트 카탈로그의 일부인 컴포넌트를 사용하고 재사용하는 것입니다. 재사용에 대한 주요 초점은 컴포넌트를 찾는 것이 아니라 아키텍처, 디자인, 그리고 시스템의 구현에 필요한 컴포넌트의 유형에 대한 중요한 속성과 관계를 식별하는 것입니다. 아키텍처 수준에서의 고려는 구현 단계에서의 컴포넌트 재사용보다 더 큰 재사용 가능성을 제공합니다.
이 논문은 아래와 같은 문장으로 논문을 마무리하면서 Software 에서 Architecture 의 중요성을 다시 한번 강조하고 있습니다.
Software Architecture 이론을 정립하는데 많은 영향을 논문으로 Software Architecture 에 관심이 있으신 분들은 읽어보시면 좋을 것 같습니다.
'개발' 카테고리의 다른 글
[Algorithm] 알고리즘 시간 복잡도 이해하기 (4) | 2024.04.09 |
---|---|
[Architecture] Architectural Tactics과 Architectural Style 차이점 (44) | 2024.03.18 |
[Architecture] Architectural Style 이란? (2) | 2024.03.11 |
[파일 변환] JPG 또는 PNG 이미지를 WEBP 로 저장하는 방법 (190) | 2024.01.21 |
[Pandas] Dataframe 중복 데이터 찾기, 제거하기 (0) | 2023.10.26 |