본문 바로가기
정보과학/소프트웨어공학특론

아키텍쳐 설계

by J1소프트 2023. 11. 25.
728x90

1. 시스템 구조화(System structuring)

[아키텍쳐 설계(architectural design) 개요]
■ 아키텍쳐 설계(architectural design)
① 시스템 설계 과정의 초기 단계에 이루어진다.
② 명세(specification)와 설계(design) 과정의 연결고리 역할을 한다.
③ 명세 활동과 병행되어 이루어지기도 한다.
④ 시스템의 주요 구성요소(components)와 통신관계(communication)를 파악하는 작업.
 
□ 장점
①  프로젝트 참여자 의사소통 수단
②   시스템 분석(특히 비기능적 요구사항의 만족여부를 판단)에 용이
③ 대규모 재사용(Large-scale reuse)이 가능

□ 설계 과정
1. 시스템 구조화(System structuring): 서브 시스템으로 분해하고 이들간의 통신관계를 파악
2. 제어 모델링(Control modeling): 시스템의 다양한 부분의 제어 관계에 대한 모델
3. 모듈 분해(Modular decomposition): 서브 시스템을 다시 세부 모듈로 분해

※ 서브 시스템(sub system)은 다른 서브 시스템에서 제공되는 서비스와는 독립적인 오퍼레이션(operation)을 제공하며, 모듈(module)은 독립성과는 상관없이 다른 구성요소(component)에 필요한 서비스를 제공해주는 시스템 구성요소이다.

■ 아키텍쳐 모델(Architectural models)
① 정적 구조 모델(static structural model): 시스템의 주요 구성요소(component)를 보여줌
② 동적 프로세스 모델(dynamic process model): 실행시 시스템 프로세스의 구성을 보여줌
③ 인터페이스 모델(interface model): 서브 시스템의 인터페이스를 정의함
④ 관계 모델(relationships model): 서브시스템 간의 데이터 흐름 관계를 보여줌

■ 아키텍쳐 속성(Architectural attributes)
① 성능(performance): 서브 시스템 간의 통신(sub-system communication)을 최소화하기 위해 오퍼레이션을 지역화(큰 컴포넌트 몇 개로 중요 오퍼레이션을 지역화 함)
② 보안(security): 계층형 아키텍쳐(layered architecture)를 사용하고 주요한(critical) 요소는 내부 레이어(layer)에 놓는 것이 좋다.
③ 안전성(safety): 안전성이 필요한 컴포넌트는 고립화(isolation)시키는 것이 좋다.
④ 유효성(availability): 아키텍쳐에 컴포넌트를 중복(redundant)시키면 된다. (결함-내성 시스템 아키텍쳐)
⑤ 유지보수성(maintainability): 변경이 용이하게 컴포넌트를 작게(fine-grained), 독립적(self- contained) 으로 만들고, 데이터 공유를 피해야 함.

1) 시스템 구조화(System structuring)
① 전체 시스템을 상호작용하는 서브 시스템(sub-system)으로 분해(decomposition)하는 작업
② 아키텍쳐 설계(architectural design)은 일반적으로 블록 다이어그램(block diagram)으로 표현되며, 시스템 구조의 개요를 보여준다.
③ 세부적인 모델의 경우는 서브 시스템이 어떻게 데이터를 공유하고, 분산되어 있으며, 다른 서브 시스템과의 인터페이스는 어떤식으로 구성되어 있는지에 대한 정보까지 보여준다.

 

예) 포장 로봇 제어 시스템의 블록 다이어그램

[그림 10.1 Block diagram of a packing robot control system]



2) 저장소 모델(The Repository model)
서브 시스템은 서로 데이터를 공유해야 하는데, 데이터 교환 방법으로 다음과 같은 2 가지 방법이 있다.

① 공유된 데이터는 모두 중앙 데이터베이스(central database)에 보관되고, 모든 서브
시스템이 이곳에 접근할 수 있다. 이러한 공유된 데이터베이스에 기반한 시스템 모델을 저장소 모델(repository model)이라고 한다.
② 각각의 서브 시스템이 독립적인 데이터베이스를 가지고 동작한다. 서브 시스템들간의 데이터 교환은 메시지(messages)를 통해 이루어진다.

※ 대규모 데이터를 공유하는 경우 대부분의 경우 저장소 모델(repository model)을 사용한다.

[그림 10.2 The architecture of an integrated CASE toolset]


저장소 모델(repository model)의 예: CASE toolset 아키텍쳐

□ 장점
① 대규모 데이터를 공유하는데 효율적이다.
② 서브 시스템이 데이터가 생성되는 방법에 독립적이다. 즉, 데이터가 어떻게 생성되는지에 대해 알 필요가 없다.
③ 공유 모델은 저장소 스키마(repository schema)을 통해 쉽게 확장 가능하다.

□ 단점
① 서브 시스템은 저장소 모델에 맞도록 구성되어야 한다. 이러한 이유 때문에 성능이 저하되거나 특정 데이터 모델의 경우 호환이 어려울 수도 있다.
② 데이터 진화(data evolution)가 어려워 데이터 모델의 변경에 비용이 많이 든다.
③ 모든 서브 시스템들에 대해 동일한 정책을 강요한다. (실제로 각각의 서브 시스템은 다양하고 특화된 보안, 백업 등에 대한 정책을 사용할 수 도 있다.)
④ 저장소 데이터를 분산하기 어렵다. ( 데이터 중복이나 불일치의 문제가 발생할 수도 있다.)

3) 클라이언트-서버 모델(The client-server model)
데이터와 처리를 컴포넌트를 사용하여 분산시키는 모델로 다음 3 가지로 구성된다.
1. 프린팅이나 데이터 관리와 같은 특정 서비스를 제공하는 독립형 서버들 (stand-alone servers)의 집합
2. 이러한 서비스를 요청하는 클라이언트들(clients)의 집합
3. 클라이언트가 서버에 접근할 수 있도록 하는 네트워크(Network)

[그림 10.3 The architecture of a film and picture library system]


클라이언트-서버 모델의 예: 멀티미디어 라이브러리 시스템의 아키텍쳐

□ 장점
① 데이터의 분산이 용이하다.
② 네트워크 시스템의 효율적 사용이 가능하다.
③ 새로운 서버를 추가하거나 기존의 서버를 업그레이드하기 쉽다.

□ 단점
① 공유된 데이터 모델이 없으며, 데이터의 교환이 비효율적이다.
② 모든 서버가 각각 데이터 관리(백업/ recovery)책임을 가진다. 
③ 이름이나 서버가 중앙에 등록되지 않기 때문에 어떠한 종류의 서비스가 있는지 알기 어렵다.

4) 추상 머신 모델(Abstract machine model)
① 서브 시스템의 인터페이스를 모델링하는데 사용된다.
② 시스템을 계층(layer)의 집합으로 구성하고, 각각의 레이어는 서비스를 제공한다.
③ 서브 시스템의 점진적 개발(incremental development)을 지원한다.
④ 특정 계층의 인터페이스(interface)가 변경되는 경우 인접한 계층만 영향을 받는다.
⑤ 실제로 시스템을 계층형 구조로 만들기가 어려우며, 성능 저하가 문제가 되기도 한다.

 

2. 제어 모델(Control models)

[들어가기]
서브 시스템들간의 제어의 흐름과 관련한 모델이며, 일반적으로 다음의 2 가지 모델이 있다.

1) 중앙 제어(Centralized control)
하나의 서브 시스템이 다른 서브 시스템의 제어에 대한 모든 책임을 지게 된다. 순차적 또는 병행적 처리가 가능한 지에 따라 두 종류가 있다.

□ 호출-응답 모델(The call-return model)
① 서브루틴(subroutine) 계층의 최상위(top)에서 제어가 시작되어 아래쪽으로 전파되어 가는 모델
② 순차적 시스템(sequential system)에 적용
③ 장점 : 제어 흐름에 대한 분석이 용이
④ 단점 : 예외상황(exceptions)에 대한 처리가 어려움.

[그림 10.5 The call-return model of control] 호출-응답 모델의 예



□ 관리자 모델(The manager model)
① 하나의 시스템 컴포넌트가 다른 시스템의 프로세스를 제어하는 모델
② 순차 또는 병행 시스템(concurrent system)에 적용
③ 시스템 상태 변수를 두고, 계속적으로 루프(loop)를 돌면서 이벤트나 상태 변화를 감시하기 때문에 이벤트 루프 모델(event-loop model)이라고도 함.
④ 상태 변수는 일반적으로 case 문을 사용하여 구현됨.

2) 이벤트 유도 시스템(Event-driven systems)
각각의 서브 시스템이 외부 서브 시스템이나 시스템의 환경으로부터 발생하는 이벤트 반응하여 동작한다.
□  장점: 시스템 진화(evolution)이 비교적 쉽다.
□  단점: 서브 시스템은 이벤트의 발생 여부나 언제 발생할지에 대해서는 알 수 없다.

□ 브로드캐스트 모델(Broadcast model)
① 이벤트가 모든 서브 시스템에 전달, 이벤트를 받은 서브 시스템이 그 이벤트를 처리할 수 있는 경우 처리하는 방식으로 동작한다. (processing 오버헤드 큼)
② 네트워크에 물려있는 다른 컴퓨터상의 서브시스템을 통합하는데 효과적이다.
③ 시스템 진화(evolution)가 비교적 쉬움. (이벤트를 생성하는 서브시스템은 그것을 처리하는 서브시스템의 이름과 위치를 알 필요 없음)
④ 서브 시스템은 이벤트의 처리 여부나 처리 시점에 대해서는 알 수 없음.

 

[그림 10.7 A control model based on selective broadcasting]



□ 인터럽트 유도 모델(Interrupt-driven model)
① 이벤트에 대한 반응이 빠르기 때문에 실시간 시스템에 주로 사용된다.
② 인터럽트 처리기(interrupt handler)에 의해 인터럽트가 감지되어 처리를 위해 다른 컴포넌트에 전달된다.
③ 인터럽트 수의 제한으로 시스템 변경이 어려움. 
④ 모델을 프로그램(programming)하거나 검증(validation)하기가 어렵다.

[그림 10.8 An interrupt-driven control model]



3. 모듈 분해(Modular decomposition) [들어가기]
구조적 아키텍쳐(structural architecture)가 설계된 후에는 서브시스템(sub-system)을 모듈(module)로 분해(decomposition)하는 과정이 필요하다. 서브 시스템을 모듈로 분해하는 2 가지 모델에 대해 간략히 살펴보기로 한다.

1) 객체 지향 모델(Object-oriented model)
① 시스템이 통신 가능한 객체들의 집합으로 분해된다.
② 객체들간의 통신을 위해 인터페이스가 잘 정의되어야 한다.
③ 객체 클래스를 찾고, 속성과 오퍼레이션을 찾는 것이 주요 작업이다.
④ 구현되었을 경우 객체는 클래스로부터 생성되며, 객체들의 오퍼레이션을 통제하기 위해 제어 모델(control model)이 사용되기도 한다.

 

(아래 예에서 Invoice 클래스가 객체간의 상호작용을 조정함)

[그림 10.9 An object model of an invoice processing system]



2) 데이터 흐름 모델(data-flow model)
시스템의 입력 데이터들이 변환 프로세스들을 거쳐 결과 데이터로 변환되는 과정의 기능 모듈들로 분해됨
파이프(pipe) 또는 필터(filter) 모델이라고도 불린다.
상호작용이 중요시 되는 시스템(interactive systems)에는 적합하지 않다.

 

[그림 10.10 A data-flow model of an invoice processing system]



[ 정리하기 ]

■ 소프트웨어 아키텍쳐는 구조, 제어, 서브 시스템의 분해 모델에 대해 다루는 것이다.
■ 시스템 구조화에 쓰이는 모델로는 저장소 모델(repository model), 클라이언트-서버(client-server model) 등이 있다.
■ 제어 모델(control model)에는 중앙 제어(centralized control)와 이벤트 유도(event-driven) 모델이 있다.
■ 모듈 분해 모델(modular decomposition model)에는 객체 지향 모델(Object-oriented model)과 데이터 흐름 모델(data-flow model)이 포함된다.

'정보과학 > 소프트웨어공학특론' 카테고리의 다른 글

실시간 소프트웨어 설계  (2) 2023.11.26
분산 시스템 아키텍쳐  (1) 2023.11.26
시스템 모델  (1) 2023.11.25
요구 공학 프로세스  (2) 2023.11.25
소프트웨어 요구사항  (1) 2023.11.25