[소프트웨어설계] 소프트웨어 아키텍처

thingzoo·2024년 1월 21일
0
post-thumbnail

설계 모델링

소프트웨어 설계 유형 중

협약에 의한 설계

클래스나 컴포넌트의 동작에 필요한 여러 가정을 정의하고 공유

  • 선행조건
  • 결과 조건
  • 불변 조건

설계의 종류

(20년 4회)

상위 설계

아키텍처 설계, 데이터 설계, 인터페이스 정의, 사용자 인터페이스 설계

하위 설계

모듈 설계, 자료구조 설계, 알고리즘 설계

설계의 원리

분할과 정복

큰 문제를 작은 부분 문제로 나누어 해결하는 방식

추상화

복잡한 시스템을 이해하기 쉽게 만들기 위해 핵심 내용만 강조하고 상세한 내용은 숨기는 기법

  • 추상화 기법⭐️
    • 과정 추상화: 자세한 단계 고려 없이 상위 수준에서 수행흐름만 먼저 설계
    • 데이터 추상화: 데이터 구조를 대표할 수 있는 표현으로 대체
    • 제어 추상화: 여러 명령들을 간단한 표현으로 대체

단계적 분해

복잡한 문제나 시스템을 여러 단계로 나누어 점차적으로 상세하게 분해하는 방식

모듈화

큰 시스템을 독립적인 작은 부분(모듈)로 나누는 기법

  • 모듈의 크기 大: 모듈 개수 적음, 모듈 간 통합 비용 적음, 모듈 하나 개발 비용 큼
  • 모듈의 크기 小: 모듈 개수 많음, 모듈 간 통합 비용 많음

정보은닉

시스템의 내부 상세 정보를 외부로부터 감추는 기법

소프트웨어 아키텍처

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

  • 정확성: 소프트웨어가 정확하게 사용자의 요구사항 및 기대를 충족하는지
  • 신뢰성: 소프트웨어가 안정적으로 오류나 오차없이 동작하는지
  • 효율성: 소프트웨어가 필요한 자원을 최소한 사용하면서 기능을 수행하는데 효과적인지
  • 무결성: 소프트웨어가 비허용된 액세스나 데이터변경을 방지하는 원리나 구조를 갖추고 있는지
  • 사용 용이성: 사용자가 소프트웨어를 쉽게 배우고 이해하며 사용할 수 있는지
  • 유지 보수성: 필요한 변경이나 오류 수정이 쉽게 이루어질 수 있는지
  • 시험 용이성: 소프트웨어의 특정 부분을 테스트하거나 검증하기 용이한지
  • 유연성: 새로운 요구사항이나 변경사항을 소프트웨어에 쉽게 통합할 수 있는지
  • 이식성: 소프트웨어가 다양한 환경, 플랫폼, 하드웨어에서 동작할 수 있는지
  • 재사용성: 기존의 컴포넌트나 모듈을 다른 목적이나 프로젝트에 재사용할 수 있는지
  • 상호 운용성: 소프트웨어가 다른 시스템이나 소프트웨어와 효과적으로 통신하고 상호 작용할 수 있는지

소프트웨어 아키텍처의 특징

  • 간략성
  • 추상화
  • 가시성
  • 관점 모형
  • 의사소통수단

소프트웨어 아키텍처 4+1 뷰

  • 논리뷰: 시스템의 주요 기능과 기능들 간의 상호작용 표현
  • 구현뷰: 개발자 관점에서 보는 소프트웨어 모듈의 구성과 관리에 중점
  • 프로세스뷰: 시스템의 실행 시 동작, 동시성, 분산처리 등에 중점
  • 배치뷰: 실행 파일과 런타임 컴포넌트의 플랫폼 및 노드에 대한 매핑에 중점
  • 유스케이스 뷰: 시스템의 기능 요구사항을 보여주는 것에 중점

소프트웨어 아키텍처 패턴⭐️

계층화 패턴(Layer Pattern)

  • 상 하위 계층 상호작용, 변경작업 용이
  • n-티어 아키텍처 패턴
  • 하위 모듈을 그룹으로 나눌 수 있는 구조화된 프로그램에서 사용
  • 각 서브시스템이 하나의 계층이 되고 하위층이 제공하는 서비스를 상위층의 서브시스템이 이용할 수 있는 구조
  • 예: OSI 7계층, TCP/IP 4계층

클라이언트-서버 패턴(Client-Server Pattern)

  • 다수의 클라이언트와 하나의 서버로 구성
  • 서버는 클라이언트에게 서비스를 제공하며 데이터를 관리하는 역할
  • 예: 일반적인 웹 프로그램

마스터-슬레이브 패턴(Master-Slave Pattern)

  • 마스터 컴포넌트가 동등한 구조의 슬레이브 컴포넌트로 작업을 분산하고, 슬레이브가 결과값을 반환하면 최종 결과값을 계산하는 구조
  • 예: 컴퓨터와 주변장치, 장애 허용 시스템, 병렬 컴퓨팅 시스템

파이프-필터 패턴(Pipe-Filter Pattern)⭐️

(20년 4회)

  • 재사용, 확장 용이, 전송 넘겨주는 방식
  • 데이터 스트림을 생성하고 처리하는 시스템에서 사용가능한 패턴
  • 필터 컴포넌트에서 각 처리과정을 실행하며, 처리된 데이터는 파이프를 통해 전송
  • 데이터는 파이프를 통해 한쪽방향으로 흐르며, 필터이동시 오버헤드가 발생
  • 예: Unix 쉘처리

브로커 패턴(Broker Pattern)

  • 분리된 컴포넌트로 구성된 분산시스템에서 사용되는 패턴
  • 각 컴포넌트들은 원격 서비스를 통해 서로 상호작용할 수 있으며 브로커 컴포넌트가 컴포넌트간의 통신을 조절

피어 투 피어 패턴(Peer-To-Peer Pattern)

  • 피어라 부르는 각 컴포넌트 간에 서비스를 주고 받는 패턴
  • 피어 객체 하나가 클라이언트, 서버의 역할을 모두 수행하는 구조
  • 노드와 간선, 멀티스레딩 방식 사용
  • 예: 파일공유

이벤트-버스 패턴(Event-Bus Pattern)

  • 이벤트 버스를 통해 특정 채널로 메시지를 발행
  • 리스너가 구독한 채널소스가 서비스를 제공하면 채널이 리스너에게 서비스를 제공
  • 예: 알림 서비스

MVC 패턴(Model-View-Controller Pattern)⭐️⭐️

  • 자료의 저장(모델), 제어(컨트롤러), 표현(뷰) 기능을 분리하여 재사용을 증진
  • 사용자 인터페이스를 시스템의 비즈니스 로직 부분과 분리하는 구조
  • 사용자 인터페이스를 담하는 하는 계층의 응집도는 높이고, 여러 개의 UI를 만들어 그 사이에 결합도를 낮출 수 있음
  • 디자인 패턴 중 옵서버 패턴에 해당
  • 예: 일반적인 웹 애플리케이션 설계 아키텍처, 대화형 애플리케이션

블랙보드 패턴

  • 해결책이 명확하지 않은 문제 처리에 유용한 패턴
  • 예: 음성인식, 차량식별 및 추적, 단백질 구조식별 등

인터프리터 패턴

  • 특정 언어로 작성된 프로그램을 해석하는 컴포넌트를 설계할 때 사용되는 패턴
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글