소프트웨어 아키텍처

Doya·2025년 1월 15일

1. 소트프웨어 아키텍처

  • 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
  • 애플리케이션의 분할 방법과 분활된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정
  • 소프트웨어 아키텍처 설계의 기본 워리에는 모듈화, 추상화, 단계적 분해, 정보은닉이 있음

모듈(Module)

전체 프로그램의 기능 중에서 특정 기능을 처리할 수 있는 소스코드

2. 모듈화(Modularity)

  • 소프트웨어 성능 향상, 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 나누는 것을 의미
  • 모듈의 크기를 너무 작게 나누면 개수가 적어 통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 듬

3. 추상화(Abstraction)

  • 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것
    -완전한 시스템을 구축하기 전에 그 시스템과 유사한 모델을 만들어서 여러가지 요인들을 테스트 할 수 있음

1. 과정 추상화

  • 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법

2. 데이터 추상화

  • 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법

3. 제어 추상화

  • 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법

4. 단계적 분해(Stepwise Refinement)

  • 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
  • Niklaus Wirth에 의해 제안된 하향식 설계 전략
  • 소프트웨어의 포괄적인 기능에서부터 시작하여 점차적으로 구체화하고, 할고리즘, 자료 구조 등 상세한 내역은 가능한 뒤로 미루어 진행

5. 정보 은닉(Information Hiding)

  • 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법
  • 모듈을 독립적으로 수행할 수 있음
  • 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이

6. 상위 설계와 하위 설계

  • 소프트웨어 개발의 설계 단계는 크게 상위 설계와 하위 설계로 구분

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

  • 소프트웨어 아키텍처의 품질 속성은 소프트웨어 아키텍처가 이해 관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지 확인하기 위해 품질 평가 요소들을 구체화 시켜 놓은 것

시스템 측면

  • 성능, 보안, 가용성, 가능성, 사용성, 변경 용이성, 확장성 등

비즈니스 측면

  • 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등

아키텍처 측면

  • 개념적 무결성, 정확성, 완결성, 구축 가능성, 변경성, 시험성

8. 소프트웨어 아키텍쳐의 설계 과정

9. 협약에 의한 설계

  • 컴포너트를 설꼐할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세
  • 컴포넌트에 대한 정확한 인터페이스를 명세
  • 명세에 포함될 조건

    1. 선행조건

    • 오퍼레이션이 호출되기 전에 참이 되어야 할 조건

    2. 결과 조건

    • 오퍼레이션이 수행된 후 만족되어야 할 조건

    3. 불변 조건

    • 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건

연습문제

1. 소프트웨어 아키텍쳐 설계과정을 나열하시오.

정답
설계 목표 설정 -> 시스템 타입 결정 -> 아키텍처 패턴 적용 -> 서브시스템 구체화 -> 검토

2. 다음 설명하는 용어는 무엇인지 쓰시오.

  • 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것
  • 완전한 시스템을 구축하기 전 그 시스템과 유사한 모델을 만들어서 여러가지 요인들을 테스트할 수 있음

정답
추상화 (Abstraction)

profile
안녕하세요. 도야입니다

0개의 댓글