설계 모델링
소프트웨어 설계 유형 중
협약에 의한 설계
클래스나 컴포넌트의 동작에 필요한 여러 가정을 정의하고 공유
설계의 종류
(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를 만들어 그 사이에 결합도를 낮출 수 있음
- 디자인 패턴 중 옵서버 패턴에 해당
- 예: 일반적인 웹 애플리케이션 설계 아키텍처, 대화형 애플리케이션
블랙보드 패턴
- 해결책이 명확하지 않은 문제 처리에 유용한 패턴
- 예: 음성인식, 차량식별 및 추적, 단백질 구조식별 등
인터프리터 패턴
- 특정 언어로 작성된 프로그램을 해석하는 컴포넌트를 설계할 때 사용되는 패턴