소프트웨어 아키텍처는 골격이 되는 기본 구조
소프트웨어 구성 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
상위 설계
: 아키텍처 설계, 예비 설계
: 시스템의 전체적인 구조
: 구조, DB, 인터페이스
하위 설계
: 모듈 설계, 상세 설계
: 시스템의 내부 구조 및 행위
: 컴포넌트, 자료 구조, 알고리즘
소프트웨어의 성능 향상이나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 기능들을 모듈 단위로 나누는 것
문제의 전체적이고 포괄적인 개념 설계 후 차례로 세분화하여 구체화시켜 나가는 것
과정 추상화
: 자세한 수행 과정 x, 전반적인 흐름 파악만
데이터 추상화
: 세부적인 속성이나 용도 정의 x, 데이터 구조를 대표할 수 있는 표현으로 대체
제어 추상화
: 이벤트 발생의 정확한 절차나 방법 정의 x, 대표할 수 있는 표현으로 대체
Niklaus Wirth의 하향식 설계 전략
상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
이해 관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 시스템 측면, 비즈니스 측면, 아키텍처 측면으로 구분하여 구체화
성능
: 사용자의 요청과 같으 이벤트를 적절하고 빠르게 처리
보안
: 허용되지 않은 접근을 막고, 허용된 접근에만 서비스 제공
가용성
: 장애 없이 정상적으로 서비스 제공
기능성
: 기능을 만족스럽게 구현
사용성
: 사용하는데 헤매지 않도록 명확하고 편리하게 구현
변경 용이성
: 다른 하드웨어나 플랫폼에서도 동작할 수 있도록 구현
확장성
: 용량, 처리 능력 등을 확장 시켰을 때 효과적으로 활용할 수 있도록 구현
기타 속성
: 테스트 용이성, 배치성, 안정성 등
시장 적시성
: 정해진 시간에 맞춰 출시
비용과 혜택
: 개발 비용을 더 투자하여 유연성이 높은 아키텍처를 만들 것인지 결정
: 유연성이 떨어지는 경우 유지보수에 많은 비용 소모
예상 시스템 수명
: 얼마나 오랫동안 사용할 것인지 고려
: 수명이 길어야하면 변경 용이성
, 확장성
중요하게 고려
기타 속성
: 목표 시장, 공개 일정, 기존 시스템과의 통합
개념적 무결성
: 구성요소들 간의 일관성 유지
정확성, 완결성
: 요구사항 구현에 발생하는 제약사항 모두 충족
구축 가능성
: 모듈 단위로 구분된 시스템을 적절하게 분배하여 유연하게 일정 변경
기타 속성
: 변경성, 시험성, 적응성, 일치성, 대체성
설계 목표 설정
: 비즈니스 목표, 우선순위 등의 요구사항 분석하여 전체 시스템의 셜계 목표 설정
시스템 타입 결정
: 시스템과 서브시스템 타입 결정
아키텍처 패턴 적용
: 아키텍처 패턴 참조하여 표준 아키텍처 설계
서브시스템 구체화
: 서브시스템 간의 상호작용을 위한 동작과 인터페이스 정의
검토
: 설계 목표에 부합하는지, 요구사항이 잘 반영되었는지, 설계의 기본 원리를 만족하는지 등을 검토
대화형 시스템
: 온라인 쇼핑몰 같은 웹 애플리케이션
: 사용자의 요구 발생시 시스템이 이를 처리하고 반응하는 시스템
이벤트 중심 시스템
: 전화, 비상벨
: 외부의 상태 변화에 따라 동작하는 시스템
변환형 시스템
: 컴파일러, 네트워크 프로토콜
: 데이터가 입력되면 정해진 작업들 수행하고 결과 출력하는 시스템
객체 영속형 시스템
: 서버 관리 소프트웨어
: 데이터베이스를 사용하여 파일을 효과적으로 저장, 검색, 갱신할 수 있는 시스템
컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
정확한 인터페이스 명세
포함되어야 하는 조건
선행 조건(Precondition)
: 호출되기 전에 참이 되어야 할 조건
결과 조건(Postcondition)
: 수행된 후 만족되어야 할 조건
불변 조건(Invariant)
: 실행되는 동안 항상 만족되어야 할 조건