[애플리케이션 설계] 소프트웨어 아키텍처

당고짱·2023년 5월 13일
0

SW design and develop

목록 보기
9/11
post-thumbnail

소프트웨어 아키텍처

소프트웨어의 골격이 되는 기본 구조이자, 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템 구조

  • 개발 시 적용되는 원칙과 지침, 의사소통 도구
  • 좋은 품질을 유지하며 비기능적 요구사항으로 나타난 제약을 반영, 기능적 요구사항을 구현하는 방법을 찾는 과정
  • 애플리케이션 분할 방법, 분할된 모듈에 할당될 기능, 모듈 간 인터페이스 등 결정

모듈화(Modularity)

시스템의 기능들을 모듈 단위로 나누는 것

  • 프로젝트의 재사용성 향상
  • 모듈의 크기를 작게 나누면 통합 비용이 많이 들고, 크게 나누면 하나의 개발 비용이 많이 듬
  • 인터페이스가 단순해 짐
  • 프로그램의 효율적인 관리 가능
  • 오류의 파급 효과 최소화

추상화(Abstraction)

전체적이과 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화 하는 것

  • 완전한 시스템 구축 전 유사한 모델을 만들어 테스트
  • 최소 비용으로 실제 상황 대처 및 시스템 구성 파악

추상화 유형

  • 과정 추상화 : 전반적인 흐름만 파악하도록 설계
  • 데이터 추상화 : 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법
  • 제어 추상화 : 이벤트 발생을 대표할 수 있는 표현으로 대체하는 방법

단계적 분해

문제를 상위 중요 개념에서 하위 개념으로 구체화시키는 분할 기법

  • 추상화의 반복에 의해 세분화
  • 기기능에서 시작해 구체화하고, 알고리즘, 자료 구조 등 상세 내역은 가능한 뒤로 미루어 진행

정보 은닉

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

  • 필요한 정보만 인터페이스를 통해 주고 받음
  • 모듈을 독립적으로 수행할 수 있음
  • 다른 모듈에 영향을 주지 않음 -> 수정, 시험, 유지보수 용이

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

시스템 측면

  • 성능 : 이벤트 발생 시 적절하고 빠르게 처리
  • 보안 : 허용되지 않은 접근을 막고 허용된 접근은 적절한 서비스 제공
  • 가용성 : 장애 없이 정상적으로 서비스 제공
  • 기능성 : 사용자가 요구한 기능을 만족스럽게 구현
  • 사용성 : 소프트웨어를 명확하고 편리하게 구현
  • 변경 용이성 : 처음 목표와 다른 플랫폼에서도 동작할 수 있도록 구현
  • 확장성 : 용량, 처리능력 등을 확장시켰을 때 효과적으로 활용할 수 있도록 구현
  • 기타 : 테스트 용이성, 배치성, 안정성 등

비즈니스 측면

  • 시작 적시성 : 정해진 시간에 맞춰 출시
  • 비용과 혜택 : 비용을 더 투자하여 유연성 높은 아키텍처를 개발할 것인지. 유연성이 떨어지면 많은 비용 소모
  • 예상 시스템 수명 : 시스템을 얼마나 오래 사용할 것인지
  • 기타 : 목표 시장, 공개 일정 등

아키텍처 측면

  • 개념적 무결성 : 전체 시스템과 구성 요소들 간 일관성 유지
  • 정확성, 완결성 : 발생하는 제약사항을 모두 충족
  • 구축 가능성 : 모듈 단위의 시스템을 적절히 분배해 유연하게 일정 변경
  • 기타 : 변경성, 시험성, 적응성 등

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

  1. 설계 목표 설정
  2. 시스템 타입 결정
  3. 아키텍처 패턴 적용
  4. 서브시스템 구체화
  5. 검토
profile
초심 잃지 말기 🙂

0개의 댓글