Software Engineering

[소프트웨어공학] Chapter 06. Architectural Design

ChoiSW 2023. 4. 17. 13:53

Architectural design 

 - 시스템의 전반적인 아키텍쳐와 시스템이 어떻게 조직되어야하는지.

 - 설계 과정과 요구공학 과정 간의 중요한 연결고리 ( 시스템의 메인구조 구성요소들과 그들간의 관계를 나타내기 때문

 - 아키텍쳐 설계의 결과물은 architectural 모델인데 이는 어떻게 시스템이 조직되어있는지 서술한다 ( 구성요소 간의 관계를 통해 )

 

Agility and architecture ( 민첩성과 아키텍쳐 )

 - 애자일 방법론과 소프트웨어 아키텍쳐 개발을 함께 고려하여 개발하는 것

 - agile의 초기단계에는 전반적인 구조를 설계

 - 시스템 구조를 리팩토링하는 것은 비용이 많이 든다 (시스템 안의 많은 컴포넌트에 영향을 주기때문)

 

Architecctural abstraction ( 아키텍쳐 추상화 ) 

 - 좁은 영역에서는 각각의 프로그램의 아키텍쳐신경쓰고 각각의 프로그램이 어떻게 컴포넌트들로 나뉘는지 고려

 - 넓은 영역에서는 다른 시스템들, 프로그램들, 프로그램 구성요소들을 포함하는 복잡한 기업 시스템의 아키텍쳐에 관한 고려

   ( 이 기업 시스템들은 다른 회사들에 의해 관리되고 소유되는 여러 컴퓨터들에 분산되어있음 )

 

Advantages of explicit architecture ( 명시적 아키텍쳐의 이점 )

 - Stakeholder communication : 이해관계 당사자들의 토론 시 이용할 수 있음

 - System analysis : 시스템이 비기능적 요구사항을 충족하는지 분석할 수 있음

 - Large-scale reuse : 큰 규모의 구조 재사용

   ( 디테일 한 부분 제외하고 아키텍쳐는 재사용 될 수 있음. 설계 시 큰 도움을 얻음

 

Architectural representations

Box and Line diagrams

 - 매우 추상적 ( 하위(sub) 시스템의 컴포넌트간의 관계를 알 수 없고 외부에서 볼 수 있는 속성을 알 수 없다)

 - However, 이해관계 당사자와 소통하거나 프로젝트를 계획하는데 유용

 

Use of architectural models

- 시스템 설계에 대한 논의를 용이하게 하는데 쓰임

- 설계된 아키텍쳐를 문서화하는데 쓰임

 

Architectural design decisions

Architectural design decisions

 - 아키텍쳐 설계는 창의적인 활동이며 설계 과정은 개발되는 시스템의 유형에 따라 다름

 - However, 모든 아키텍쳐 디자인에 적용될 수 있고 시스템의 비기능적 특성에 영향을 주는 공통적인 결정 요소들이 있다

공통적인 결정 요소

 
1. 템플릿처럼 활용할 수 있는 아키텍쳐가 있는가?

 2. 하드웨어 코어나 프로세서에 시스템이 어떻게 분배될 것인가 // 분산 시스템으로 할지 고려
 3. 어떤 구조패턴이나 스타일이 적용될 것인가? // 디자인 패턴
 4. 시스템을 구조화하는데 사용되는 기본적인 접근 방법이 무엇인가?
 5. 시스템 상의 컴포넌트의 동작을 제어하는데 어떤 전략을 쓸 것인가
 6. 시스템의 컴포넌트가 어떻게 sub 컴포넌트로 분해될 수 있는가
 7. 어떤 아키텍쳐 조직이 비기능적 요구사항을 만족시키는데 좋을까
 8. 시스템 아키텍쳐를 어떻게 문서화할까?

 

Architecture reuse ( 아키텍쳐 재사용 )

 - 같은 영역에 있는 시스템은 보통 같은 구조를 지님

 - 시스템의 구조는 하나 이상의 패턴 or 스타일을 이용하여 설계된다

 

Architecture and system characteristics ( 성능 vs 유지보수 )

(아키텍쳐가 정해지면 비기능적 특성이 결정된다)

 - Performance (성능) : 중요한 연산은 로컬에서, 통신은 최소화. 작게 모듈화 하기보다는 크게 모듈화(ex. 액정)

    ( 유지보수에 부담 up )

 - Security (보안성) : 계층 구조를 사용하여 중요한 것들은 안쪽으로 넣는다

 - Safety (안정성) : 안전이 중요한 특징은 하위 시스템으로 로컬화시킴

 - Availabilty (가용) : 중복된 컴포넌트, 매커니즘을 포함시켜, 장애 허용성(fault tolerance) 매커니즘을 적용해야함

   ( 시스템이 부분적인 장애 상황에서돋 중복된 컴포넌트(ex. 서버)가 있으면 해당 컴포넌트가 작동하지 않더라도 커버칠 중복된 컴포넌트가 있기에 시스템의 가용성을 유지할 수 있음 )

 - Maintainability (유지보수성) : 작게 만들고 대체가능한 컴포넌트를 만들기

 

Architectural views

Architectural views

 - 시스템 구조를 설계화, 문서화할 때 어떤 view or perspective에서 하는 것이 유용한지

 - 아키텍쳐 모델을 묘사할 때 어떤 표기방법(notation)써야할지

 -아키텍쳐 모델은 오직 하나의 view or perspective보여줘야한다

 

4+1 view model of software architecture

   · 논리적 관점 : 객체로 시스템의 핵심부분 추상화

   · 프로세스 관점 : 런타임에 어떻게 시스템이 구성되고 소통하는지

   · 개발 관점 : 소프트웨어가 어떻게 분해되는지

   · 물리적 관점 : 시스템 하드웨어와 소프트웨어 컴포넌트가 어떻게 분배되는지

     +1 ( 관련된 use case or scenarios )

 

Architectural patterns

Architectural patterns

 - 패턴이란 지식을 표현하고 공유하고 재사용하는 방법을 의미

 - 여러 환경에서 시도되고 테스트된 패턴은 좋은 활용의 예라고 여겨진다

 - 패턴은 언제 유용하고 유용하지 않은지에 대한 정보를 가지고 있어야함

 - 패턴은 표나 다른 시각적 요소 등으로 표현될 수 있다.

 

 1. MVC pattern ( 모델-뷰-컨트롤러 패턴 )

Model - View - Controller 세가지 논리적인 컴포넌트로 구성, 이 컴포넌트들은 서로 상호작용

Model 컴포넌트 : 시스템 데이터와 해당 데이터에 대한 연산을 관리

View 컴포넌트 : 데이터가 사용자에게 어떻게 제시되는지 정의하고 관리

Controller 컴포넌트 : 사용자와의 상호작용 ( ex. keyboard input, mouse click 등 )을 관리하고 이러한 상호작용들은 view 및 model 컴포넌트에 전달

 

 - when used : 데이터를 여러 방식으로 보여주고 상호작용 할 때

 - 장점 : model과 view 컴포넌트가 분리되어있기에 데이터와 데이터의 표현방식이 독립적으로 변경될 수 있음, 같은 데이터를 여러 방식으로 표현 및 상호작용할 수 있으며  한 표현방식에서 변경사항이 생기면 다른 표현방식들 모두에도 변경사항이 적용될 수 있음

 - 단점 : 데이터 모델과 상호작용이 간단할 때 추가 코드와 코드 복잡성을 유발할 수 있음

   ( MVC패턴을 사용하면 컴포넌트 간의 인터페이스, 메시지 전달 등을 처리하는 코드가 추가로 필요한데 데이터 모델과 상호작용이 간단한 경우, 이러한 추가 코드와 복잡성이 필요하지 않을 수 있음. 하지만 MVC패턴을 적용하면 추가코드와 코드 복잡성이 유발될 수 있음 )

 

 2. Layered architecture pattern ( 계층화 구조 패턴 ) 

- 하위(sub) 시스템과의 상호작용을 모델링할 때 사용

- 서비스를 제공하는 여러 계층으로 구성 ( 각 계층은 바로 위의 계층에 서비스를 제공하며 가장 하위 계층은 시스템 전체에 자주 사용되는 핵심 서비스를 제공함 )

- 증분 발전 방식 제공 ( layer interface가 바뀌어도 인접한 계층에만 영향을 끼친다)

 

 - when used: 데이터를 여러 방식으로보여주고 상호작용 할 때

 - 장점 : 인터페이스를 유지할 수 있다면 계층은 교체 가능함. 각 계층이 독립적으로 동작할 수 있으므로 중복되는 기능들이 있으면 시스템의 신뢰성이 향상됨.

 - 단점 : 실무에서 계층을 깔끔히 분리하기 어려움. 하위 계층을 건너 뛸 수 없어 delay가 걸려 성능이 저하될 수 있음.

A generic layered architecture
The architecture of the iLearn system

 3. Repository architecture pattern (저장소 구조 패턴)

- 시스템 내 모든 데이터는 모든 시스템 컴포넌트에 의해 접근될 수 있는 중앙 저장소(central repository)에서 관리됨.

  컴포넌트들은 데이터에 직접적으로 접근할 수 없고 오직 저장소를 통해서 데이터에 접근할 수 있음

- sub시스템은 저장소에서 데이터 가져와서 interact

- 하위 시스템이 데이터를 주고 받아야한다

    1) 공유 데이터 : 중앙처리방식 (중앙에 요구)

    2) 분산 데이터 : 자신만의 데이터 베이스를 가지고 있다

- 많은 데이터가 공유될 때 저장소 모델이 가장 흔히 사용된다

-  진입장벽이 높지만 그 이후부터는 사용하기 편하고 유용함.

 

- when used: 많은 양의 정보가 생성되고 긴 시간동안 저장될 때, data-driven 시스템에서 사용됨

- 장점 : 컴포넌트들이 독립적일 수 있음. 한 컴포넌트에서 생긴 changes는 다른 컴포넌트들에 전파될 수 있음. 모든 데이터는 한 장소에 저장되어있기에 지속적으로 관리될 수 있음.

- 단점 : 문제가 생기면 전체 시스템에 영향을 줌(단일 장애 지점(signle point of failure)이 될 수 있음 ). 모든 컴포넌트들이 저장소를 통해 상호작용하기에 대량의 데이터를 처리해야할 때 데이터 요청이 많아지므로 비효율적일 수 있음. 여러 컴퓨터를 거쳐 저장소를 분산하는 것은 어려울 수 있음(데이터의 일관성 동기화를 유지하기 위해서는 많은 추가 작업이 필요하기 때문)

  // 따라서 안정성, 비효율성, 분산구조의 어려움 등을 고려하여 적절한 패턴을 선택해야함

A repository architecture for an IDE ( sub-systems의 저장소에 대한 상호작용 )

 4. Client-server architecture pattern ( 클라이언트-서버 구조 패턴) 

 

 - 데이터와 프로세싱이 여러 컴포넌트에 분산되어있다 ( 하나의 컴퓨터에서 동작될 수 있다 )

 - 독립적 서버는 프린팅, 데이터 관리와 같은 특정 서비스를 제공하고

 - 위와 같은 서비스들은 클라이언트에 의해 호출되어 사용됨

 - 네트워크를 통해 클라이언트는 서버에 접근 가능

 

- when used: 공유 데이터베이스가 다양한 위치에서 접근되는 경우, 서버를 복제할 수 있기에 시스템 부하가 가변적인 경우

- 장점 : 서버들은 네트워크를 통해 분산될 수 있음. 일반적인 기능들은 모든 client에서 이용가능하고 모든 서비스에서 구현될 필요는 없음. 업데이트 시 서비스를 멈추지 않고 가능함.

- 단점 : 서비스 문제 발생 시 관련된 모든 client에 영향을 줌(단일 장애 지점(signle point of failure)). 성능은 시스템과 네트워크에 따라 예측불가능함. 서버가 다른 조직에게 소유권이 넘어가면 관리 문제가 있을 수 있음.

A client–server architecture for a film library

 5. Pipe and filter architecture pattern ( 파이프와 필터 구조 패턴 ) 

 - 일련의 변환 작업을 파이프라인으로 연결하여 입출력 처리하는 방식

 - 입력이 들어오면 처리 후 출력하는 기능을 가진다  - 파이프와 필터 모델 (UNIX시스템)

 - 변환 작업이 연속적이면 일괄처리 순차 모델임 ( batch sequential model )

 - 상호작용하는 시스템에 적절하지 않음

 

- when used : 데이터를 처리할 때 사용 (입력이 들어오고 과정을 거쳐 출력)

- 장점 : 이해하기 쉽고 변환의 재사용을 지원. 변환작업을 추가함으로써 업그레이드가 바로 이루어짐. 연속적이고 동시적인 시스템으로 구현가능

- 단점 : 입출력의 형식이 동일해야한다 (동일하지 않으면 오버헤드 발생하며 호환되지 않는 데이터 구조를 사용하는 기능 변환은 재사용할 수 없게 될 수 있음 )

 

Application architecture 

Application architecture ( 어플리케이션 아키텍쳐 )

 - 조직의 요구를 충족하기위해 설계됨

 - 사업들은 공통된 것들이 많기에, 어플리케이션의 요구사항을 반영하는 공통된 아키텍쳐를 갖는 경향이 있음

 - 일반적으로, 특정 요구사항에 맞게 기존의 것들을 구성 및 수정하여 만든 개발사항들로 구성된 시스템 유형에 대한 아키텍쳐임

 

Use of application architectures ( 어플리케이션 아키텍쳐의 사용 )

 - 아키텍쳐 설계의 시작점으로 사용됨

 - 설계 체크리스트용으로 사용됨

 - 개발팀 조직하는데 사용됨

 - 컴포넌트 재사용을 평가하는 방식으로 사용됨

 - 어플리케이션 유형에 대해 이야기하기 위한 어휘

 

Examples of application types ( 어플리케이션 유형 예시 )

 - 데이터 처리 어플리케이션 (데이터 기반)

 - Transaction 처리 어플리케이션(데이터 중심 => 사용자의 요청을 처리하고 시스템 데이터베이스 업데이트)  ex) 예약 시스템, E-commerce( 전자상거래 ) 시스템

 - 이벤트 처리 시스템

 - 언어 처리 시스템  ex) 컴파일러, 명령어 인터프리터

ref) 정보 시스템 구조

 - 계층구조로 조직  => 데이터베이스와의 상호작용

  사용자 인터페이스, communication, 정보 검색, 시스템 데이터베이스 계층으로 구성

The structure of transaction processing applications