김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㄱ
  • 원격저장소
  • KMU_WINK
  • local저장소
  • Remote저장소
  • GitHubDesktop
  • 깃허브데스크탑
  • 로컬저장소

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

[Object Oriented S/E] Chapter 6 - Architectural Design
• 독서/Object Oriented Software Engineering

[Object Oriented S/E] Chapter 6 - Architectural Design

2023. 4. 28. 01:16

# 범위

139 page ~ 

# 내용

## 6 Architectural Design

많은 소프트웨어들은 개발이 완료되고 수십년동안 동작한다. 그리고 그러는 사이에 많은 업그레이드를 거친다.

소프트웨어 아키텍처와 같은 요소는 system properties나 performance, efficiency,security,maintainablity와 같은 요소에 지대한 영향을 끼친다.

 

## 6.1 WHAT IS ARCHITECTURAL DESIGN?

  • 소프트웨어 아키텍처 디자인은 건물의 아키텍처 디자인과 같다.
  • 아키텍처 디자인은 주요시설과 하위 시스템들 그리고 그것들이 어떻게 관계되고 작동하는지에 대해서 강조한다.
  • [시스템 또는 하위 시스템의 소프트웨어 아키텍처는 주요 구성 요소간의 상호 작용 및 상호 작용을 포함하는 시스템 구조의 설계 스타일을 의미한다.]
  • [소프트웨어 아키텍처 설계 또는 단순한 아키텍처 설계는 개발 중인 시스템의 소프트웨어 아키텍처를 결정하기 위한 의사 결정 프로스세이다.]
  • 설계 타입의 소프트웨어 아키텍처는 디자인 결정은 이미 완료됐으며, 아키텍처는 이러한 디자인 의사 결정의 결과이다.
  • 설계 스타일의 아키텍처와 설계 결정 집합 사이에는 사소한 차이가 존재하고, 전자가 조금더 실체적인 것이다.

## 6.2 THE IMPORTANCE OF ARCHITECTURAL DESIGN

  • 한 회사에 예를 들었다. 데이터 베이스 래퍼에 관한 이야기 였다.
  • 기존 설계는 DB를 바꾸기 위해서는 다른 의존된 많은 코드를 수정해야 했기에 wrapper를 만들자는 이야기가 나왔지만 묵살됐다.
  • 얼마 후 Ontologies라는 것에 의존했던 개발팀은 해당 회사가 파산하자, wrapper를 늦게나마 만들기 시작했지만 때는 늦었고 결국 회사가 망했다.

 

## 6.3 ARCHITECTURAL DESIGN PROCESS

  • 어떤 종류의 시스템을 개발할것인지에 대한 것은 중요한 관심사항이다 이러한 시스템의 타입은 아키텍처 스타일에 영향을 주기 때문이다.
  • 아키텍처 디자인은 재귀적인 과정이다. 그리고 sopping rule(재귀 과정을 멈추는)은 따로 없다. 이것은 불명확하고 경험에서 나온다.
  • 아키텍처 설계 프로세스 - 아래 과정들이 재귀적으로 반복적으로 행해짐.
    • 1. 설계 목표를 정한다 - 이 설계는 소프트웨어 안전 및 보안 을 제공하고 성능을 극대화는 것을 목표로 한다.. 이러한 설계 목표는 요구사항에서 도출 가능하다.
    • 2. 시스템 유형을 확인한다.
    • 3. 아키텍처를 적용하거나, CUSTOM 아키텍처를 수행한다.
    • 4. 설계도롤 검토한다.

### 6.3.1 Determine Architectural Design Objectives ( 아키텍처 설계 목표 결정 )

  • 어떤 좋은 아키텍처가 다른 시스템에서도 똑같이 좋은것만은 아니다.
  • 다른 어플리케이션들은 다른 목표와 우선순위를 두고 있기 때문에 아키텍처를 결정하는데 영향을 끼친다.
  • 고려해야할 요인들
    • 변경 및 유지보수 용이성 : 얼마나 자주 변경이 일어나는가?
    • 상용 기성품 부품의 사용 - 사용 툴들을 사용하고 있거나 금지하고 있거나
    • 신뢰성
    • 보안
    • 내결함성 - 응용 프로그램에 오류가 발생할 때 시스템이 계속 작동하도록 요구되어지는 범위가 어디인가?
    • 복구

### 6.3.2 Determine System Type

  • 시스템의 유형은 분석,설계,모델링, 구현 테스트에 많은 영향을 끼친다.
  • 한 프로젝트에서 잘 작동하는 모델링 디자인 방법이 다른 곳에서는 잘 작동하지 않을 수 있다. 이건 모델링과 디자인 방법론의 불일치 때문이다.
  • 4가지 유형의 시스템에 대해서 고려된다. 
    • 대화형 하위시스템 
      • 시스템은 actor부터의 요청을 잘 처리해야한다.
      • 상호작용은 actor와 시작해서 끝낸다
      • 클라이언트-서버관계
    • 이벤트 기반(구동) 하위시스템
      • 외부 엔티티로부터 이벤트를 수신하고 제어한다
      • 수신 요청의 순서가 고정되어 있지 않는다. 무작위다
      • 모든 수신 이벤트에 응답할 필욛가 없다. ( 무시 가능)
      • 둘 이상의 외부 엔티티와 상호작용을 하기도 한다.
      • 타이밍(시간)제한 조건을 충족해야할 수 있다. N-밀리세컨드 안에 도착해야한다..
    • 변환 하위시스템
      • 임베디드 시스템에서 흔히 볼 수 있다
      • 정보처리활동의 네트워크로 구성
    • 데이터베이스 하위시스템
      • 데이터베이스의 나머지 부분을 숨기고 데이터베이스 구현으로부터 보호

 

### 6.3.3 Applying Archtectural Styles

  • 4가지 다른 유형의 어플리케이션 시스템을 확인했다. 이에 따른 아키텍처가 필요로 하다.
  • N계층 아키텍처
    • 클라이언트의 요청은 한계층에서 다른 계층으로 전송 된다. 하위 계층에서 상위 계층으로 전송은 피해야한다.
    • 대화형 시스템의 객체를 여러 계층으로 분할하고 해당 계층에 책임을 할당한다.
    • 대화형 뿐만 아니라 네트워크에 쓰이는 7계층, 보안에도 많이 쓰인다.
  • 클라이언트-서버 아키텍처
    • 공항 수화물 처리 시스템과 같은게 클라이언트-서버 아키텍처이다.
    • 서버는 클라이언트의 요청을 처리하고 결과를 응답한다.
    • 클라이언트는 서버의 존재를 알지만 서버는 클라이언트의 존재를 모른다.
  • 메인 프로그램과 서브루틴 아키텍처
    • 하나의 메인프로그램과 다수의 서브루틴으로 이루어져 있다. (트리 형식)
    • 메인프로그램은 다수의 하위서브루틴을 호출하고 하위 서브루틴은 하위서브루틴을 호출한다.
  • 이벤트 기반 시스템 아키텍처
    • 상태 의존적이다. ( 에어컨 )
    • 제어의 문제
      • 적절한 상태가 아니면 요청을 무시할 수 있음( 클라이언트-서버는 그렇지 못함 )
  • 영속성 프레임워크 아키텍처
    • 데이터베이스는 서로 다른 공급업체로부터 제공 될 수 있다.
    • 각 비즈니스 개체들은 다른 업체의 데이터베이스에도 접근할 수 있어야 한다. 그렇기 위해서는 구성 방식을 알야아하고 복잡성이 증가한다. 
    • 인터페이스를 제공하고 데이터베이스 매니저가 요청을 위임한다.

 

## 6.4ARCHITECTURAL STYLE AND PACKAGE DIAGRAM

  • 개념화
  • 구조화
  • 매니징
  • 발전

## 6.5 APPLYING SOFTWARE DESIGN PRINCIPLES

  • 1970년대 다른 기능들의 수천줄의 코드가 한모듈에 작성됐으며 이런건 이해하기 어렵고 테스트 관리 하기 어렵다. 기능적 응집도가 낮다고 설명할 수 있다.
  • 높은 결합도 문제 중하나이다. 서로 복잡하게 얽혀있으면 서로가 서로에게 복잡한 영향을 끼친다.

 

### 6.5.1 What Are Software Design Principles?

  • [소프트웨어 설계 원칙은 소프트웨어 설계를 위한 지침으로 널리 받아들여지고 있다. 이러한 원칙을 올바르게 적용하면 소프트웨어를 크게 향상 시킬 수 있다.]

### 6.5.2 Design for Change ( 변경을 위한 설계 )

  • 변화는 매우 자주 일어나는 상황이다. 어떤 도메인에서던지.
  • 좋은 디자인은 변화하기 쉽고 적용하기 쉬운 디자인이다.

### 6.5.3 Separation of Concerns ( 관심 분리 )

  • 고립된 한 측면에 문제에만 초점을 둔다. 모든 측면을 동시에 다루지 않는다.
  • 높은 수준에서는 전반적인 설계 과정을 어떻게 진행할지에 대한 고려를 한다.
  • 하위수준에는 개별 구성요소들을 설계하는 방법과 관련이 있다.
  • 아키텍처가 전체 설계 프로세스의 한측면에만 집중하고 다른 측면은 일시적을 중지해야 한다.
  • N-계층 아키텍처도 관심사의 분리가 행해진것이다. 다른 관심사의 책임을 다른 하위 시스템에 할당해야 한다. 
  • 높은 응집력과 하위시스템의 이해와 재사용을 촉진시킨다.

 

### 6.5.4 Information Hiding

  • 클래스의 데이터멤버를 숨기고 인터페이스를 제공함으로써 안정적으로 유지할 수 있다.
  • 클라이언트는 둘이상의 구현이 있으면 어떤 구현이 사용될지 알지 못한다. 인터페이슬 활용하면 이러한 문제를 해결 할 수 있고 결국 정보의 은닉에서부터 나온다.

### 6.5.5 High Cohesion ( 높은 응집력 )

  • 모듈형 설계에서 비롯됐다. 상위 레벨 모듈이 하위레벨 모듈을 호출하고 하위 레벨 모듈에서 반환된 결과를 합성하는 트리와 같은 모듈
  • 높은 응집력은 소프트웨어 재사용 및 소프트웨 어 유지보수를 용이하게 한다.

### 6.5.6Low Coupling ( 낮은 결합도 )

  • 런타임에만 알려지기는 요소들은 높은 결합도를 띄면 테스트, 디버깅시 어려움이 발생한다.
  • 모듈간 의존성과 상호작용으로 인한 런타임 효과.
  • 세개 이상의 값을 갖는 관리 변수를 피해라, 변경 및 정보 은닉화 설계를 해라

### 6.5.7 Keep It Simple and Stupid(KISS 원칙)

  • 간단하고 멍청하여 이해하기 쉬운 설계를 선호한다.

## 6.6 GUIDELINES FOR ARCHITECTURAL DESIGN

  • 가능하면 아키텍처를 적용해라
  • 소프트웨어 디자인 원칙을 적용해라
  • 디자인패턴을 적용해라
  • 설계 목표와 설계 원칙을 대조해라
  • 필요할때까지 반복해라

## 6.7 ARCHITECTURAL DESIGN AND DESIGN PATTERNS

## 6.8 APPLYING AGILE PRINCIPLES

  • [포괄적인 문서보다 작동하는 소프트웨어에 집중한다.]
  • [20/80 룰을 적용해라. 그거면 됐다. 충분하다면 된거다]- 

 

 

저작자표시 (새창열림)

'• 독서 > Object Oriented Software Engineering' 카테고리의 다른 글

[Object Oriented S/E] Chapter 8 - Actor System Interaction Modeling  (0) 2023.05.12
[Object Oriented S/E] Chapter 7 - Deriving Use Cases from Requirements  (0) 2023.05.04
[Object Oriented S/E] Chapter 5 - Domain Modeling  (0) 2023.04.13
[Object Oriented S/E] Chapter 4 - Software Requirements Elicitation  (0) 2023.04.06
[Object Oriented S/E] Chapter 3 - System Engineering(2)  (0) 2023.03.29
    '• 독서/Object Oriented Software Engineering' 카테고리의 다른 글
    • [Object Oriented S/E] Chapter 8 - Actor System Interaction Modeling
    • [Object Oriented S/E] Chapter 7 - Deriving Use Cases from Requirements
    • [Object Oriented S/E] Chapter 5 - Domain Modeling
    • [Object Oriented S/E] Chapter 4 - Software Requirements Elicitation
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바