소프트웨어 아키텍처
💡 소프트웨어 아키텍처의 특징과 역할, 설계의 기본 원리
💡 모듈화의 특징
💡 추상화의 유형 3가지
💡 정보은닉의 특징
💡 품질 속성 각 측면의 세부 속성들
💡 소프트웨어 아키텍처 설계 과정 순서, 단계별 내용 간단히
¹ 소프트웨어 아키텍처의 설계
소프트웨어의 골격이 되는 기본 구조이자, 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- SW 개발 시 적용되는 원칙과 지침
- 이해 관계자들의 의사소통 도구로 활용됨
- 소프트웨어 아키텍처의 설계는 기본적으로 좋은 품질을 유지하면서 사용자의 비기능적 요구사항으로 나타낸 제약을 반영하고, 기능적 요구사항을 구현하는 방법을 찾는 해결 과정
- 애플리케이션의 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정
- 소프트웨어 아키텍처 설계의 기본 원리
모듈화, 추상화, 단계적 분해, 정보 은닉
상위설계 & 하위설계
- 상위 설계
- 아키텍처 설계, 예비설계
- 시스템의 전체적인 구조
- 구조, DB, 인터페이스
- 하위 설계
- 모듈 설계, 상세 설계
- 시스템의 내부 구조 및 행위
- 컴포넌트, 자료 구조, 알고리즘
² 모듈화
🖍️ 모듈화 Modularity
소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것
- 자주 사용되는 계산식이나 기능들을 공통 모듈로 구성하여 재사용성 향상
- 모듈의 크기를 작게 나누면 개수가 많아짐 -> 모듈 간의 통합 비용 증가
- 모듈을 크게 나누면 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 증가
- 모듈화를 통해 기능의 분리가 가능하여 인터페이스가 단순해짐
- 프로그램의 효율적인 관리 가능
- 오류의 파급 효과 최소화
³ 추상화
🖍️ 추상화 Abstraction
문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것
- 완전한 시스템을 구축하기 전, 유사한 모델을 만들어 여러가지 요인들을 테스트
- 최소의 비용으로 실제 상황에 대처 가능
- 시스템의 구조 및 구성을 대략적으로 파악할 수 있음
추상화의 유형
- 과정 추상화: 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법
- 데이터 추상화: 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법
- 제어 추상화: 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법
⁴ 단계적 분해
🖍️ 단계적 분해 Stepwise Refinement
Niklaus Wirth에 의해 제안된 하향식 설계 전략.
문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할 기법
- 추상화의 반복에 의해 세분화됨
- 소프트웨어의 기능에서부터 시작하여 점차적으로 구체화하고, 알고리즘, 자료구조 등 상세 내역은 가능한 한 뒤로 미루어 진행
EX) 건물의 골조 설계 > 층과 방의 경계 설정 > 방의 인테리어 구상
⁵ 정보 은닉
🖍️ 정보 은닉 Information Hiding
한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 정보 은닉 된 모듈과 커뮤니케이션할 필요가 있을 때는 필요한 정보만 인터페이스를 통해 주고 받음
- 정보 은닉을 통해 모듈을 독립적으로 수행 가능
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않음 -> 수정, 시험, 유지보수 용이
EX) 감기약 캡슐에 무슨 재료가 있는지 몰라도 감기약 인줄만 알고 먹는 것과 같음
⁶ 소프트웨어 아키텍처의 품질 속성
🖍️
소프트웨어 아키텍처가 이해 관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지를 확인하기 위해 품질 평가 요소들을 시스템 측면, 비즈니스 측면, 아키텍처 측면으로 구분하여 구체화 시켜놓은 것
시스템 측면
- 성능
- 보안
- 가용성
- 기능성
- 사용성
- 변경 용이성
- 확장성
- 기타 속성 (테스트 용이성, 배치성, 안전성)
비즈니스 측면
- 시장 적시성
- 비용과 혜택
- 예상 시스템 수명
- 기타 속성 ( 목표 시장, 공개 일정, 기존 시스템과의 통합)
아키텍처 측면
- 개념석 무결성
- 정확성, 완결성
- 구축 가능성
- 기타 속성 (변경성, 시험성, 적응성, 일치성, 대체성)
⁷ 소프트웨어 아키텍처의 설계 과정
- 설계 목표 설정
설계에 영향을 주는 비즈니스 목표, 우선순위 등의 요구사항을 분석하여 전체 시스템의 설계 목표를 설정
- 시스템 타입 결정
시스템과 서브시스템의 타입을 결정하고, 설계 목표와 함께 고려하여 아키텍처 패턴을 선택
- 아키텍처 패턴 적용
아키텍처 패턴을 참조하여 시스템의 표준 아키텍처를 설계
- 서브시스템 구체화
서브시스템의 기능 및 서브시스템 간의 상호작용을 위한 동작과 인터페이스를 정의
- 검토
아키텍처가 설계 목표에 부합하는지, 요구사항이 잘 반영되었는지, 설계의 기본 원리를 만족하는지 등을 검토
시스템 타입
- 대화형 시스템
ex) 온라인 쇼핑몰 같은 대부분 웹 애플리케이션
- 이벤트 중심 시스템
ex) 전화, 비상벨 등의 내장 소프트웨어
- 변환형 시스템: 데이터가 입력되면 정해진 작업들을 수행하여 결과 출력
ex) 컴파일러, 네트워크 프로토콜
- 객체 영속형 시스템
ex) 서버 관리 소프트웨어
협약에 의한 설계
컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
소프트웨어 컴포넌트에 대한 정확한 인터페이스를 명세
⭐️ 명세에 포함될 조건
- 선행 조건: 오퍼레이션이 호출되기 전에 참이 되어야 할 조건
- 결과 조건: 오퍼레이션이 수행된 후 만족되어야 할 조건
- 불변 조건: 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건