소프트웨어 아키텍처
소프트웨어의 골격이 되는 기본 구조
이해관계자들의 의사소통 도구,
비기능적 요구사항의 제약, 기능적 요구사항의 구현
모듈의 기능, 인터페이스의 결정
- 모듈화 : 시스템의 기능을 모듈 단위로 나눔
- 추상화 : 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화
- 단계적 분해 : 하향식 설계 전략으로 구체화
- 정보 은닉 : 정보를 감추어 접근, 변경 못하게 함
품질
시스템 | |
성능 | 요청을 적절하고 빠르게 처리 |
보안 | 허용되지 않은 접근 막음 |
가용성 | 장애 없는 서비스 |
기능성 | 요구 기능 만족하게 처리 |
사용성 | 사용자가 명확하고 편리하게 사용 |
변경용이성 | 다른 하드웨어나 플랫폼 동작 |
확장성 | 용량, 처리능력 확장 |
기타속성 | 테스트 용이성, 배치성, 안정성 등 |
비즈니스 | |
시장 적시성 | 정해진 시간에 맞춰 출시 |
비용과 혜택 | 비용과 높은 유연성의 아키텍처 조율 |
예상 시스템 수명 | 시스템 수명 |
기타 속성 | 목표 시장, 공개 일정, 기존시스템과의 통합 등 |
아키텍처 | |
개념적 무결성 | 시스템 구성 요소들의 일관성 |
정확성, 완결성 | 요구사항과 제약사항을 충족 |
구축 가능성 | 시스템을 분배하여 유연하게 일정 변경 |
기타 속성 | 변경성, 시험성, 적응성, 일치성, 대체성 등 |
설계 과정
- 설계 목표 설정 : 요구사항 분석하여 목표 설정
- 시스템 타입 결정 : 대화형, 이벤트 중심, 반환형, 객체 영속형 시스템 등 타입 결정
- 아키텍처 패턴 적용 : 기존의 아키텍처 패턴 참조
- 서브시스템 구체화 : 서브시스템 간의 인터페이스 구체화
- 검토
아키텍처 패턴
아키텍처 설계 시 참조할 수 있는 전형적인 해결 방식
종류 | 설명 |
레이어 패턴 | - 계층으로 구문하여 구성 - 상위가 제공자, 하위가 클라이언트 - 특정 계층 변경 용이 - OSI 참조모델 |
클라이언트-서버 패턴 | - 하나의 서버, 다수의 클라이언트 - 서버는 클라이언트의 요청을 대기 - 서로 독립적 |
파이프-필터 패턴 | - 데이터 스트림 - 각 단계를 필터로 캡슐화 하여 데이터 변경 - 필터 변경 용이 - 데이터 변환, 버퍼링 동기화 등에 사용 - UNIX 쉘 |
모델-뷰-컨트롤러 패턴 | - 데이터 (모델), 표현 (뷰), 입력처리 (컨트롤러) 로 구성 - 서로 독립적 - 대화형 애플리케이션에 적합 |
마스터-슬레이브 패턴 | - 마스터 (작업분할), 슬레이브 (처리, 결과반환) - 장애허용 시스템, 병렬 컴퓨팅 시스템 |
브로커 패턴 | - 요청을 적합한 컴포넌트로 연결 - 분산 환경 시스템 |
피어-투-피어 패턴 | - 서로 각 컴포넌트가 서버, 클라이언트 동시 가능 - 멀티 스레드 환경으로 구성 |
이벤트-버스 패턴 | - 이벤트를 발행하여 채널을 구독한 리스너가 메시지를 받아 처리 |
블랙보드 패턴 | - 공유 데이터 저장소에서 원하는 데이터를 찾음 - 명확하지 않은 문제 해결 - 음성 인식, 차량 식별, 신호 해석 등 |
인터프리터 패턴 | - 기호마다 클래스를 갖음 - 특정 언어로 작성된 프로그램 코드를 해석 |
객체 지향
소프트웨어를 개발할 때 객체들을 조립해서 작성할 수 있는 기법
재사용, 확장, 유지보수에 좋음
- 객체 : 데이터와 함수를 묶어놓은 모듈, 독립적이며 객체끼리는 연관관계를 갖는다.
- 클래스 : 객체의 타입
- 캡슐화 : 데이터와 함수를 하나로 묶는 것, 정보 은닉, 재사용 용이, 결합도 낮춤
- 상속 : 상위 클래스의 속성을 하위 클래스가 물려받음, 재사용이 높음
- 다형성 : 하나의 메세지에 대해 각 객체가 고유한 방법으로 응답
모듈
모듈화를 통해 분리된 시스템의 각 기능들
독립적이며, 재사용 가능하고, 결합도와 응집도를 통해 독립성이 측정됨
- 결합도 : 모듈 상호간의 의존도
결합도 (점점 높아짐) |
설명 |
자료 결합도 | 자료 요소로만 구성 |
스탬프 결합도 | 자료구조가 전달됨 |
제어 결합도 | 내부의 논리적인 흐름을 제어하는 제어 신호 |
외부 결합도 | 모듈을 참조함 |
공통 결합도 | 공통 데이터 영역 사용 |
내용 결합도 | 내부 자료를 직접 참조하거나 수정 |
- 응집도 : 모듈 내부 요소들의 관련정도
응집도 (점점 낮아짐) |
설명 |
기능적 응집도 | 모든 기능이 단일 문제와 연관 |
순차적 응집도 | 하나의 활동의 출력 데이터가 다음 활동의 입력 데이터로 사용 |
교환적 응집도 | 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행 |
절차적 응집도 | 모듈 안의 구성요소들이 순차적으로 기능을 수행 |
시간적 응집도 | 특정 시간에 처리되는 몇개의 기능을 모아 모듈로 작성 |
논리적 응집도 | 유사한 성격을 갖거나 특정 현태로 분류되는 요소들로 모듈 작성 |
우연적 응집도 | 서로 관련없는 요소로만 모듈 작성 |
- 팬인 / 팬 아웃 : 호출 하는 숫자 / 호출 되는 숫자
공통 모듈
공통적으로 사용할 수 있는 모듈
- 정확성 : 해당 기능의 필요성을 정확히 작성
- 명확성 : 중의적으로 해석되지 않도록 명확히 작성
- 완전성 : 시스템 구현을 위해 필요한 것을 작성
- 일관성 : 상호 충돌이 발생하지 않도록 작성
- 추적성 : 기능에 대한 출처 관련 시스템 관계 파악하도록 작성
공통 모듈은 재사용을 위해 작성한다.
재사용성을 높이기 위해서는 결합도를 줄이고 응집도를 높인다.
코드
자료를 처리하는 과정에서 분류 조합 및 집계 등을 쉽게 하기 위한 기호
코드 | 설명 |
순차 코드 | 일정 순서에 따라 일련번호 부여 1, 2, 3, 4 |
블록 코드 | 공통성으로 블록을 구분하고 일련번호 부여 1001~1100 : 총무부, 1101~1200 : 영업부 |
10진 코드 | 10진 분할하여 필요한만큼 반복 1000 : 공학, 1100 : 소프트웨어 공학, 1110 : 소프트웨어 설계 |
그룹 분류 코드 | 대분류 중분류 소분류 하여 그룹 안에서 일련번호 부여 1-01-001 : 본사-총무부-인사계, 2-01-001 : 지사-총무부-인사계 |
연상 코드 | 항목의 명칭이나 관계있는 숫자를 이용하여 부여 TV-40 : 40인치 TV, L-15-220 : 15W 220V 램프 |
표의 숫자 코드 | 항목의 성질, 길이 높이 부피 지름 등을 코드에 적용 120-720-1500 : 120x720x1500 크기의 강판 |
합성 코드 | 2개 이상의 코드를 조합 KE-711 : 대한항공기 711기 (연상 + 순차) |
디자인 패턴
코드 작성 수준의 세부적인 구현 방안을 설계할 때 참조할 수 있는 전형적인 해결 방식
바퀴를 다시 발명하지 마라.
생성 패턴 | |
추상 팩토리 | 인터페이스를 통해 서로 연관, 의존하는 객체들을 그룹으로 생성 |
빌더 | 객체의 생성과정을 세분화시킴 |
팩토리 메소드 | 객체 생성을 서브 클래스에 위임 |
프로토타입 | 원본 객체를 복제하여 생성 |
싱글톤 | 하나의 인스턴스만 생성 |
구조 패턴 | |
어댑터 | 인터페이스가 일치하지 않을때 변환해줌 |
브리지 | 기능과 구현을 두 개의 별도 클래스로 구현 |
컴포짓 | 복합 객체와 단일 객체를 구분없이 다룰 수 있도록 구현 |
데코레이터 | 객체 간의 결합 중 능동적으로 기능 확장하도록 구현 |
퍼싸드 | 상위 인터페이스로 서브 클래스들의 기능을 간편하게 사용 |
플라이웨이트 | 인스턴스를 새로 생성하지 않고 가능한 공유하여 사용 |
프록시 | 접근이 어려운 객체에 연결고리를 담당하는 인터페이스 역할 |
행위 패턴 | |
책임 연쇄 | 한 객체가 처리하지 못한 요청을 다음 객체가 처리함 |
커맨드 | 요청을 캡슐화하여 재 이용할 수 있도록 요청에 처리 정보를 둠 |
인터프리터 | 언어의 문법 표현을 정의 |
반복자 | 접근이 잦은 객체에 대해 동일한 인터페이스 사용 |
중재자 | 객체들 간의 상호작용을 캡슐화 하여 객체로 정의 |
메멘토 | 특정 시점의 객체 내부 상태로 되돌릴 수 있음 |
옵저버 | 객체의 상태 변화에 따라 다른 객체들에게 전달 |
상태 | 객체의 상태에 따라 동작을 다르게 처리 |
전략 | 동일한 타입의 다른 알고리즘을 사용할 수 있게함 |
템플릿 메서드 | 상위 클래스에서 골격 정의, 하위 클래스에서 세부 처리 |
방문자 | 데이터 구조와 처리 기능 분리하여 처리 기능을 방문하여 수행 |
'학습 > 정처기필기' 카테고리의 다른 글
1-4 인터페이스 설계 (0) | 2021.07.30 |
---|---|
1-2 화면설계 (0) | 2021.07.28 |
1-1 요구사항 확인 (0) | 2021.07.27 |