소프트웨어 아키텍쳐란?
아키텍쳐란, 소프트웨어 시스템에 대한 개발자들의 공통적인 이해사항으로, 이해 관계자, 조직, 환경, 배경과 경험 등 많은 것들의 영향을 받는다.
- 아키텍쳐는 시스템을 이해하기 위해 필요한 "구조"들의 집합이다.
- "구조"는 아래와 같은 것들로 이루어진다.
- 소프트웨어 요소
- 요소들간의 관계
- 요소와 관계에 대한 속성
- 아키텍쳐를 결정하기 위해서는 아키텍쳐 결정에 중요한 요소인 아키텍쳐 드라이버(Architectural drivers)를 고려해야한다.
아키텍쳐 드라이버(Architectural drivers)
- 기능적 요구사항 (Functional Requirements)
- 기술적 / 비즈니스적 제약사항 (Constraint)
- 품질 속성 (Quality Attributes)
품질 속성 (Quality Attributes)
품질 속성이란 비 기능적 요구사항이라고 불리지만, 아키텍쳐 결정에 필수적이다.
- 가용성, 변경 용이성, 성능, 보안, 테스트 용이성, 사용성과 같은 것들.
- 품질 속성은 정량적 / 독립적으로 정의되어야한다.
- 품질 속성은 재현성(reproducibility) / 반복성(repeatability)을 만족해야한다.
품질 속성 시나리오 (Quality Attributes Scenario)
품질 속성은 기능 요구사항과 달리 정형화되지 않기때문에, 시나리오로 정리하고 아래 6개로 이루어진 공통 양식을 사용한다. 예시는 가용성 시나리오에 대한 것들이다.
- 자극 유발원(source) : 사람, 하드웨어, 소프트웨어 등
- 자극(stimulus) : 생략, 중단, 부정확한 응답 등
- 대상체(artifact) : 프로세서, 프로세스 등
- 환경(environment) : 정상 운영 중, 성능 저하 운영 중, 에러 모드 등
- 응답(response) : 결함 감지, 결함 복구 등
- 응답 측정(response measure) : 가용시간, 결함 감지 시간 등
응답 측정은 하나여야하고, 응답 측정이 여러개가 되는 경우에는 별도의 QA Scenario로 분리되어야 한다.
설계 전술(Tactics)
QA 시나리오에서 자극에 대한 응답을 통제하기 위해 사용하고, QA 시나리오를 만들기 위한 블록이다.
- 가용성 택틱으로는 Ping/Echo, Heartbeat 와 같은 전술들이 있다.
- 변경 용이성 택틱으로는 바인딩 시점 같은 전술들이 있다.
관점 (perspective)
사람에 대한 아키텍쳐를 볼때 외관, X-ray, MRI와 같이 여러 관점에서 볼 수 있는 것처럼, 소프트웨어 아키텍쳐를 정의하기 위해서는 3가지 관점이 필요하다.
- Static perspective
- 모듈, 클래스와 같은 코드기반의 요소들과 그 관계
- 변경 용이성, 테스트 용이성과 같은 품질 속성을 확인하기 위한 관점
- Dynamic perspective
- CPU 사용량 등 런타임의 구성요소와 그 관계
- 가용성과 같은 품질 속성을 확인하기 위한 관점
- Physical perspective
- 서버, 센서, 입출력 장치와 같은 물리적 구성 요소들과 그 관계
- 사용성과 같은 품질 속성을 확인하기 위한 관점
이러한 각 관점에 맞춰 Module View, Component & Connector View, Allocation View 와 같이 "구조"를 설명하기 위한 뷰들이 정해져있다.
모듈 뷰 (Module View)
Static perspective 의 뷰 타입으로, 소스 코드를 위한 청사진을 제공한다.
모듈 뷰의 구조
- 요소 : 기능의 크기에 따라 나뉜다
- 관계
- is-part-of : 부모와 자식 같은 관계, Module Level
- depends-on : 가져다 쓰고있는 관계. 프론트엔드 모듈이 백엔드 모듈을 사용한다.
- is-a : part-of보다 넓은 관계? lion is animal 같은 관계
- 표기법 : 텍스트, 그래픽 표기법, UML, ERM
표기 스타일
- 분할 스타일 (decomposition style)
- 사용 스타일 (uses style) : depends-on 관계가 특화됨
- 레이어 스타일 (layered style) : allowed-to-use 관계
C&C 뷰 (Componets & Connector View)
Dynamic perspective 의 뷰 타입
- 요소
- 컴포넌트 (연산요소나 데이터 저장공간)
- 커넥터 (런타임의 컴포넌트 간의 경로)
- 관계 : 무엇이 어디에 Attachment 되어있는지
표기 스타일
- 파이프 & 필터 스타일 (pipe filter style)
- Shared data style : Blackborad / Repository
- 발행 구독 스타일 (Pub sub style) : 생산 / 소비의 분리로 변경 용이성 향상을 위해 사용
- 클라이언트 & 서버 스타일
- peer-to-peer 스타일
할당 뷰 (Allocation View)
Physical perspective의 뷰 타입
레퍼런스