본문 바로가기

학습/정처기필기

1-3 애플리케이션 설계

소프트웨어 아키텍처

소프트웨어의 골격이 되는 기본 구조

이해관계자들의 의사소통 도구,

비기능적 요구사항의 제약, 기능적 요구사항의 구현

모듈의 기능, 인터페이스의 결정

  • 모듈화 : 시스템의 기능을 모듈 단위로 나눔
  • 추상화 : 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화
  • 단계적 분해 : 하향식 설계 전략으로 구체화
  • 정보 은닉 : 정보를 감추어 접근, 변경 못하게 함

품질

시스템
성능 요청을 적절하고 빠르게 처리
보안 허용되지 않은 접근 막음
가용성 장애 없는 서비스
기능성 요구 기능 만족하게 처리
사용성 사용자가 명확하고 편리하게 사용
변경용이성 다른 하드웨어나 플랫폼 동작
확장성 용량, 처리능력 확장
기타속성 테스트 용이성, 배치성, 안정성 등
비즈니스
시장 적시성 정해진 시간에 맞춰 출시
비용과 혜택 비용과 높은 유연성의 아키텍처 조율
예상 시스템 수명 시스템 수명
기타 속성 목표 시장, 공개 일정, 기존시스템과의 통합 등
아키텍처
개념적 무결성 시스템 구성 요소들의 일관성
정확성, 완결성 요구사항과 제약사항을 충족
구축 가능성 시스템을 분배하여 유연하게 일정 변경
기타 속성 변경성, 시험성, 적응성, 일치성, 대체성 등

 

설계 과정

  1. 설계 목표 설정 : 요구사항 분석하여 목표 설정
  2. 시스템 타입 결정 : 대화형, 이벤트 중심, 반환형, 객체 영속형 시스템 등 타입 결정
  3. 아키텍처 패턴 적용 : 기존의 아키텍처 패턴 참조
  4. 서브시스템 구체화 : 서브시스템 간의 인터페이스 구체화
  5. 검토

아키텍처 패턴

아키텍처 설계 시 참조할 수 있는 전형적인 해결 방식

종류 설명
레이어 패턴 - 계층으로 구문하여 구성
- 상위가 제공자, 하위가 클라이언트
- 특정 계층 변경 용이
- 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