소프트웨어 아키텍처
소프트웨어를 구성하는 요소들 간의 관계, 모듈 간의 인터페이스,
그리고 전체 시스템 구조를 표현한 설계의 청사진
- 시스템의 구조를 체계적으로 정의하여 유지보수성과 확장성을 높이기 위함
- 소프트웨어 구성요소의 분할, 역할 정의, 인터페이스 규칙을 결정
모듈화(Modularity)
- 시스템의 성능 향상, 수정·재사용·유지보수를 용이하게 하기 위해 기능을 모듈 단위로 분할하는 기법
- 모듈의 크기를 너무 작게 나누면 모듈 간의 통합 비용 증가
- 모듈의 크기를 너무 크게 나누면 모듈 간의 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듦
추상화(Abstraction)
- 문제를 포괄적인 수준에서 설계하고, 점차 세분화하여 구체화하는 과정
- 시스템을 전체적으로 이해하기 쉽고 설계 변경 시 유연성 향상
- 추상화 유형
- 과정 추상화
- 수행 과정의 상세 내용을 생략하고 전체적인 흐름만 표현
- 데이터 추상화
- 데이터의 세부 속성은 숨기고 데이터 구조의 형태로 표현
- 제어 추상화
- 이벤트 발생의 제어 절차를 단순화하여 표현
- 과정 추상화
단계적 분해(Stepwise Refinement)
- 상위 수준의 개념에서 시작해 점차 하위 수준으로 구체화하는 하향식 설계 기법
- 상위 수준의 개념에서 하위 수준으로 점진적으로 세분화함
정보 은닉(Information Hiding)
- 모듈 내부의 세부 사항을 외부에 공개하지 않고, 인터페이스를 통해서만 접근하도록 하는 설계 기법
- 모듈 간 독립성 확보
- 변경 영향 최소화
- 유지보수성 향상
- 필요한 정보만 외부에 공개
상위 설계(아키텍처 설계)와 하위 설계(모듈 설계)
| 상위 설계 | 하위 설계 | |
| 별칭 | 아키텍처 설계, 예비 설계 | 모듈 설계, 상세 설계 |
| 설계 대상 | 시스템의 전체적인 구조 | 시스템의 내부 구조 및 행위 |
| 세부 목록 | 구조, DB, 인터페이스 | 컴포넌트, 자료 구조, 알고리즘 |
소프트웨어 아키텍처의 품질 속성
아키텍처가 요구된 수준의 품질을 만족할 수 있는지를 판단하기 위한 평가 기준
- 시스템 측면
- 성능, 보안, 가용성, 기능석, 사용성, 변경 용이성, 확장성
- 비즈니스 측면
- 시장 적시성, 비용/혜택, 시스템 수명, 공개 일정
- 아키텍처 측면
- 개념적 무결성, 정확성, 완결성, 변경성, 시험성
소프트웨어 아키텍처 설계 과정
- 설계 목표 설정
- 요구사항을 분석하여 시스템의 설계 목표를 명확히 설정
- 시스템 타입 결정
- 시스템 구조 및 서브시스템의 종류 결정, 아키텍처 패턴 선택
- 아키텍처 패턴 적용
- 적절한 표준 아키텍처를 적용
- 서브시스템 구체화
- 각 서브시스템의 기능 정의 및 인터페이스 설계
- 검토 및 검증
- 요구사항과 설계 목표를 만족하는지 검토 및 피드백 수행
협약(Contract)에 의한 설계
컴포넌트 간 상호 작용 시 각 클래스가 만족해야 할 조건(계약)을 명세하여 올바른 동작을 보장하는 설계 방식
- 클래스와 오퍼레이션 간의 계약을 명시적으로 정의
- 클래스의 인터페이스에 대한 전제 조건·결과 조건·불변 조건 명세
- 명세에 포함될 조건
- 선행 조건(Precondition)
- 오퍼레이션이 호출되기 이전에 참이어야 하는 조건
- 결과 조건(Postcondition)
- 오퍼레이션이 수행된 이후에 만족해야 하는 조건
- 불변 조건(Invariant)
- 오퍼레이션이 수행되는 동안 항상 유지되어야 하는 조건
- 선행 조건(Precondition)
'정보처리기사' 카테고리의 다른 글
| 정보처리기사 실기 - 객체지향의 구성요소와 특징 정리 (0) | 2025.11.05 |
|---|---|
| 정보처리기사 실기 - 아키텍처 패턴 종류·특징 정리 (0) | 2025.11.05 |
| 정보처리기사 실기 - 개발 환경 구성 요소 및 구축 절차 정리 (0) | 2025.11.04 |
| 정보처리기사 실기 - 연계 테스트: 시스템 간 데이터 검증 절차 정리 (0) | 2025.11.03 |
| 정보처리기사 실기 - XML (0) | 2025.11.03 |