CS/소프트웨어공학
소프트웨어 아키텍처 설계의 기본 원리, 설계 과정
망재이
2024. 10. 27. 16:33
- 소프트웨어 아키텍처
- 소프트웨어의 골격이 되는 기본 구조이자, 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
- 소프트웨어 개발 시 적용되는 원칙과 지침이며, 이해 관계자들의 의사소통 도구로 활용
- 이해하기 쉽고, 명확하게 작성이 되어야 함 - 소프트웨어 아키텍처의 설계
- 기본적으로 좋은 품질을 유지하면서 사용자의 비기능적 요구사항으로 나타난 제약을 반영하고, 기능적 요구사항을 구현하는 방법을 찾는 해결 과정
- 애플리케이션의 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정
* 기능 / 비기능적 요구사항 : 시스템이 갖춰야할 필수적인 기능에 대한 요구항목들을 기능적 요구사항, 그 외의 품질이나 제약사향에 관한 것을 비기능적 요구사항이라고 함 - 소프트웨어 아키텍처 설계의 기본원리
- 모듈화 (Modularity)
- 소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미
- 자주 사용되는 계산식이나 사용자 인증과 같은 기능들을 공통 모듈로 구성하여 프로젝트의 재사용성을 향상시킬 수 있음
- 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합이 힘들고, 너무 크게 나누면 개수가 적어 모듈 하나의 개발 비용이 많이 드므로 적정선을 유지해야 함
* 모듈 : 소프트웨어를 구성하고 있는 작은 기능 하나하나를 모듈이라고 하며 이 모듈을 기능별로 묶어놓은 집합을 컴포넌트라고 함 - 추상화
- 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것
- 최소의 비용으로 실제 상황에 대처할 수 있고, 시스템의 구조 및 구성을 대략적으로 파악할 수 있게 해줌
제어 추상화 | 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법 |
과정 추상화 | 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법 |
자료(데이터) 추상화 | 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법 |
- 단계적 분해
- Niklaus Wirth에 의해 제안된 하향식 설계 전략으로, 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
- 추상화의 반복에 의해 세분화됨
- 소프트웨어의 기능에서부터 시작하여 점차 구체화하고, 알고리즘, 자료 구조 등 상세한 내역은 가능한 한 뒤로 미루어 진행
더보기
건축을 예로 들면, 먼저 건물의 골조를 설계한 다음, 건물 내 층과 각 방의 경계를 정하고, 그 다음 방들의 인테리어를 구상하는 것과 같이 대략적인 설계에서 점차 세부 설계로 넘어가는 것과 유사함!
- 정보 은닉
- 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
- 어떤 모듈이 기능을 수행하는데 반드시 필요한 기능이 있어 정보 은닉된 모듈과 커뮤니케이션할 필요가 있을 때는 필요한 정보만 인터페이스를 통해 주고 받음
- 정보 은닉을 통해 모듈을 독립적으로 수행할 수 있고, 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이
- 소프트웨어 아키텍처의 설계 과정
- 설계 목표 설정
- 설계에 영향을 주는 비즈니스 목표, 우선순위 등의 요구사항을 분석하여 전체 시스템의 개발 뱡향과 설계 목표를 설정 - 시스템 타입 결정
- 시스템과 서브시스템의 타입을 결정하고, 설계 목표와 함께 고려하여 아키텍처 패턴을 선택 - 아키텍처 패턴 적용
- 아키텍처 패턴을 참조하여 시스템의 표준 아키텍처를 설계 - 서브시스템 구체화
- 서브시스템의 기능 및 서브시스템 간의 상호작용을 위한 동작과 인터페이스 정의 - 검토
- 아키텍처가 설계 목표에 부합하는지, 요구사항이 잘 반영되었는지, 설계의 기본 원리를 만족하는지 등을 검토
* 아키텍처 패턴 : 여러 다양한 상황에서 아키텍처를 설계하는데 발생하는 문제들을 해결하기 위해 미리 만들어 놓은 예제! (건물을 지을 때 아파트 기본 구조도, 오피스텔 기본 구조도 등 이미 용도에 맞게 설계되어 있는 구조도를 하나 선택해서 자신만의 구조도로 수정하여 만드는 과정과 같음)
- 상향식 설계와 하향식 설계
- 하향식 설계
- 계층 구조상에서 시스템의 주요 컴포넌트들을 찾고 낮은 수준의 컴포넌트들로 분해하는 것으로 단계적 정제가 하며 메인 모듈의 설꼐에서 시작하여 단계적으로 구체화시키는 것
- 통합 검사 시 인터페이스가 이미 정의되어 있어 통합이 간단
- 레벨이 낮은 데이터 구조의 세부 사항은 설계초기 단계에서 필요
- 시스템 명세가 명확한 경우와 모든 것을 새로 개발하는 작업에는 하향식이 적합 - 상향식 설계
- 기본적인 컴포넌트를 먼저 설계한 다음 해당 컴포넌트를 사용하는 상위 수준의 컴포넌트를 설계하는 것
-> 따라서 인터페이스가 이미 성립되어 있어야 기능 추가가 쉬움
- 상향식 설계는 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사
- 기존 컴포넌트들을 조합하여 시스템의 개발하는 경우에는 상향식이 적합
728x90