1-3 016 소프트웨어 아키텍처 [A]

이지우·2024년 4월 2일
0

정보처리기사

목록 보기
16/68

소프트웨어 아키텍처의 설계

소프트웨어 아키텍처는 골격이 되는 기본 구조
소프트웨어 구성 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체

  • 소프트웨어 개발 시 적용되는 원칙과 지침
  • 이해 관계들의 의사소통 도구로 활용
  • 소프트웨어 아키텍처의 설계는 좋은 품질을 유지하면서 비기능적 요구사항의 제약을 반영하고 기능적 요구사항을 구현하는 방법을 찾는 과정
  • 애플리케이션의 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 결정
  • 기본 원리
    : 모듈화, 추상화, 단계적 분해, 정보은닉

상위 설계와 하위 설계

상위 설계
: 아키텍처 설계, 예비 설계
: 시스템의 전체적인 구조
: 구조, DB, 인터페이스

하위 설계
: 모듈 설계, 상세 설계
: 시스템의 내부 구조 및 행위
: 컴포넌트, 자료 구조, 알고리즘


모듈화(Modularity)

소프트웨어의 성능 향상이나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 기능들을 모듈 단위로 나누는 것

  • 자주 사용되는 계산식이나 사용자 인증과 같은 기능들을 공통 모듈로 구성
  • 프로젝트의 재사용성 향상
  • 모듈 크기를 너무 작게 나누면 개수↑ 통합 비용↑
  • 모듈 크기를 너무 크게 나누면 개수↓ 통합 비용↓ 모듈 하나의 개발 비용↑

추상화(Abstraction)

문제의 전체적이고 포괄적인 개념 설계 후 차례로 세분화하여 구체화시켜 나가는 것

  • 완전한 시스템 구축 전에 유사한 모델을 만들어서 여러 가지 요인들 테스트
  • 최소의 비용으로 실제 상황에 대처
  • 시스템의 구조 및 구성을 대략적으로 파악

추상화 유형

과정 추상화
: 자세한 수행 과정 x, 전반적인 흐름 파악만

데이터 추상화
: 세부적인 속성이나 용도 정의 x, 데이터 구조를 대표할 수 있는 표현으로 대체

제어 추상화
: 이벤트 발생의 정확한 절차나 방법 정의 x, 대표할 수 있는 표현으로 대체


단계적 분해(Stepwise Refinement)

Niklaus Wirth의 하향식 설계 전략
상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법

  • 추상화 반복에 의해 세분화
  • 소프트웨어의 기능에서부터 시작하여 점차 구체화
  • 알고리즘, 자료 구조 등 상세한 내역은 뒤로 미루어 진행

정보 은닉(Information Hiding)

모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법

  • 어떤 모듈이 소프트웨어 기능 수행에 반드시 필요한 기능을 정보 은닉된 모듈과 커뮤니케이션할 필요가 있을 때는 인터페이스를 통해 주고 받음
  • 정보 은닉을 통해 모듈을 독립적으로 수행할 수 있음
  • 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않음
  • 수정, 시험, 유지보수 용이

소프트웨어 아키텍처의 품질 속성

이해 관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 시스템 측면, 비즈니스 측면, 아키텍처 측면으로 구분하여 구체화

시스템 측면

성능
: 사용자의 요청과 같으 이벤트를 적절하고 빠르게 처리

보안
: 허용되지 않은 접근을 막고, 허용된 접근에만 서비스 제공

가용성
: 장애 없이 정상적으로 서비스 제공

기능성
: 기능을 만족스럽게 구현

사용성
: 사용하는데 헤매지 않도록 명확하고 편리하게 구현

변경 용이성
: 다른 하드웨어나 플랫폼에서도 동작할 수 있도록 구현

확장성
: 용량, 처리 능력 등을 확장 시켰을 때 효과적으로 활용할 수 있도록 구현

기타 속성
: 테스트 용이성, 배치성, 안정성 등


비즈니스 측면

시장 적시성
: 정해진 시간에 맞춰 출시

비용과 혜택
: 개발 비용을 더 투자하여 유연성이 높은 아키텍처를 만들 것인지 결정
: 유연성이 떨어지는 경우 유지보수에 많은 비용 소모

예상 시스템 수명
: 얼마나 오랫동안 사용할 것인지 고려
: 수명이 길어야하면 변경 용이성, 확장성 중요하게 고려

기타 속성
: 목표 시장, 공개 일정, 기존 시스템과의 통합


아키텍처 측면

개념적 무결성
: 구성요소들 간의 일관성 유지

정확성, 완결성
: 요구사항 구현에 발생하는 제약사항 모두 충족

구축 가능성
: 모듈 단위로 구분된 시스템을 적절하게 분배하여 유연하게 일정 변경

기타 속성
: 변경성, 시험성, 적응성, 일치성, 대체성


소프트웨어 아키텍처의 설계 과정

  1. 설계 목표 설정
    : 비즈니스 목표, 우선순위 등의 요구사항 분석하여 전체 시스템의 셜계 목표 설정

  2. 시스템 타입 결정
    : 시스템과 서브시스템 타입 결정

  3. 아키텍처 패턴 적용
    : 아키텍처 패턴 참조하여 표준 아키텍처 설계

  4. 서브시스템 구체화
    : 서브시스템 간의 상호작용을 위한 동작과 인터페이스 정의

  5. 검토
    : 설계 목표에 부합하는지, 요구사항이 잘 반영되었는지, 설계의 기본 원리를 만족하는지 등을 검토

시스템 타입

대화형 시스템
: 온라인 쇼핑몰 같은 웹 애플리케이션
: 사용자의 요구 발생시 시스템이 이를 처리하고 반응하는 시스템

이벤트 중심 시스템
: 전화, 비상벨
: 외부의 상태 변화에 따라 동작하는 시스템

변환형 시스템
: 컴파일러, 네트워크 프로토콜
: 데이터가 입력되면 정해진 작업들 수행하고 결과 출력하는 시스템

객체 영속형 시스템
: 서버 관리 소프트웨어
: 데이터베이스를 사용하여 파일을 효과적으로 저장, 검색, 갱신할 수 있는 시스템

협약(Contract)에 의한 설계

컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
정확한 인터페이스 명세

포함되어야 하는 조건

  • 선행 조건(Precondition)
    : 호출되기 전에 참이 되어야 할 조건

  • 결과 조건(Postcondition)
    : 수행된 후 만족되어야 할 조건

  • 불변 조건(Invariant)
    : 실행되는 동안 항상 만족되어야 할 조건

profile
노력형 인간

0개의 댓글