Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

생각자리

아키텍처 설계 본문

CS/소프트웨어공학

아키텍처 설계

Manze 2022. 6. 8. 18:06
더보기

객체지향 소프트웨어공학 (최은만 著, 한빛아카데미) 참고하여 작성했습니다. 

소프트웨어 아키텍처

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

(a) : 검색, 입력, 출력을 상품관리파일과 같이 사용자 컴퓨터에 하나로 배치하는 경우
       검색시간이 짧아져서 응답성이 향상됨

(b) : 입출력 기능을 다른 pc 에 빼고 검색을 상품관리파일과 같은 pc 와 배치
       검색시간은 짧으나 컴퓨터간의 통신시간이 필요하여 응답성은 떨어짐 (길어짐)

 

  1. 개발 시 변경이 예상되는 기능을 가능한 모아두거나(=응집력 향상),
         다른 기능과 모아두는것(=결합력 하락)은 성능 향상에 중요함
  2. 위 그림에서도 연관있는 모듈끼리 붙여 응집력을 향상시키면 효율적인 운용에 도움이 된다
  3. 비기능적 요구사항에 따라 결과물이 다르게 나올 수 있음

아키텍처 설계 (가지)

분석의 결과물을 바탕으로 최종 시스템을 구현하기 위한 구체적인 시스템 결정 과정

기능적인 요구사항과 비기능적인 요구사항을 만족하도록 소프트웨어의 기본 구조를 검토하고 골격을 정하는 과정

소프트웨어 아키텍처 설계 과정

개발 초기 단계에서 수행되므로 고도의 경험이 필요

다수의 소프트웨어에 반복적으로 나타내는 구조를 아키텍처 패턴 또는 아키텍처 스타일이라고 한다.


분산 아키텍처

시스템은 일반적으로 성능, 확장성, 신뢰성 등을 위해 여러개의 노드(컴퓨터) 를 사용함

분산 아키텍처는 소프트웨어시스템을 구동시키기 위해 노드와 노드간의 통신 관계로 구성된다

 

분산 아키텍처

  1. 위 사례는 4-Tier (Tier : 물리적으로 분리된 시스템) 시스템
  2. 1개가 고장나도 3개로 바로 대체되므로 신뢰성 및 가용성이 상승됨
  3. 각 시스템(티어) 별로 플랫폼 소프트웨어를 선택한다.

아키텍처 설계 (뿌리)

각 노드의 소프트웨어는 응용소프트웨어와 플랫폼소프트웨어 계층으로 분리할 수 있다.

 

여러 시스템(티어) 중 1개

응용 소프트웨어 계층은 특정 소프트웨어가 실제로 제공할 고유의 기능을 구현한다


시스템 아키텍처 설계 (=분산 아키텍처에 대한 설계)

시스템을 구성하는 컴퓨터와 컴퓨터 간의 연결을 결정하는 (분산) 아키텍처에 대한 설계를 수행

각 노드별로 응용 소프트웨어의 실행 환경으로서 플랫폼 소프트웨어를 결정

시스템 아키텍처의 설계란, 결국 OS (&플랫폼소프트웨어) 와 응용소프트웨어를 설계하는 과정 

 


응용 소프트웨어 설계

각 노드에서 결정된 플랫폼 소프트웨어 위에서 동작하는 실제 소프트웨어의 기능을 제공할 응용 소프트웨어의 구조를 결정

응용 소프트웨어를 구성하는 컴 포넌트와 패키지들을 결정한다

분석 클래스를 바탕으로 기능적 단위인 논리적 컴포넌트와 배포의 단위인 물리적 컴포넌트를 도출한다

 

논리적 컴포넌트

기능적 단위로 인터페이스를 통해 자신의 기능을 제공한다

<<component>> 스테레오 타입으로 표현하며, 인터페이스는 원 으로 표현한다.

실선은 컴포넌트가 인터페이스를 실현(제공)함,

점선은 컴포넌트가 해당 인터페이스를 이용함을 뜻한다

 

물리적 컴포넌트

논리적 컴포넌트 및 패키지의 구현물로 노드에 실제로 배치되어 수행되는 단위


참조 아키텍처

특정한 유형의 어플리케이션에 대하여 전반적인 논리적 구조를 제공

Rich (=fet) 클라이언트 → 클라이언트의 부담이 크기 때문 

방화벽 두 개를 통과해야 DB 에 접근 가능한 아키텍처

안정성, 가용성, 신뢰성 ↑ , 응답성 ↓


소프트웨어 설계 과정

설계범위

여러 가지 대안의 집합을 총망라함으로써 달성할 수 있는 모든 설계 방법을 나타낸 것

 

컴포넌트 

명백한 역할을 가지며 독립적으로 존재할 수 있는 소프트웨어 또는 하드웨어의 한 부분

대부분 재사용이 가능하도록 설계되며, 같은 기능을 가진 다른 컴포넌트로 대체 시킬 수 있어야 함

 

모듈

프로그래밍 언어 수준에서 정의된 컴포넌트로써 자바에서는 메소드, 클래스, 패키지를 말한다.

 

시스템 

어떤 책임과 목적을 가지고 있고 소프트웨어나 하드웨어로 구성된 논리적 개체

명세를 가질 수 있고 컴포넌트의 집합에 의해 구현

시스템은 컴포넌트가 변하거나 다른 컴포넌트로 대치되더라도 지속적으로 존재

 

서브시스템

보다 큰 시스템의 일부분으로 확정된 인터페이스를 가짐

예를 들면 자바는 서브시스템을 구현하기 위해 패키지를 사용하며 더 낮은 수준의 개별 서브 시스템을 구현한다

 

하향식 설계 (→ 좋은 구조를 가진 시스템을 대부분 하향식 설계를 필요)

시스템의 최상위 수준의 구조부터 점차 낮은 수준의 구조로 내려오면서 각종 설계 이슈에 대한 의사결정

 

상향식 설계 (→ 재사용 가능한 컴포넌트를 만드는데 도움을 줌)

재사용 가능한 낮은 수준의 기능을 먼저 정한 다음, 높은 수준의 구조를 위해 이를 어떻게 배치할 지 결정


좋은 설계를 통해 달성하려는 목표

  1. 분할 정복 (나누어진 각 부분에서 개발 작업을 병행 진행하여 개발 기간을 줄일 수 있음)
  2. 응집력 증진
  3. 결합력 감소
  4. 높은 수준의 추상화 (복잡도 ↓ , 정보 은닉 , public 메소드가 적고 모든 메소드가 private 일 경우 더욱 좋음) 
  5. 재사용성 증진 
  6. 설계와 코드의 재사용 (복제는 재사용 형식이 아님) 
  7. 유연성 고려
  8. 노후 예측
  9. 이식성 (가능하면 많은 플랫폼에서 소프트웨어를 실행할 수 있도록 하는 것)
  10. 테스트 가능성
  11. 방어적 설계

응집력 증진

서브시스템이나 모듈 중 서로 관련 있는 것끼리 모으고, 그 외의 것은 외부에 존재하게 하여
응집력을 높이고 전체 시스템을 이해하거나 변경하기 쉽게함

높은 응집력 &rarr; 낮은 응집력

  1. 기능적 응집 : 이해가 쉬움, 재사용 용이, 유지보수가 쉬움 → 예) 사인, 코사인 등 수학 함수
  2. 계층적 응집 : API (=하나의 계층에 있는 절차와 메소드)를 통해 서비스
                          하나 이상의 상위 계층을 하위 계층에 영향을 주지 않고 교체 가능 (하위계층은 상위 계층으로 교체X)
                          예) 연산, 메시지 or 데이터전송, 데이터 저장, 보안관리, 운영체제 접근 ... 
  3. 교환적 응집 : 교환적 응집을 갖는 모듈은 동일 계층에 탑재가능
                          데이터를 조작할 때 한 곳에서 모든 코드를 찾을 수 있다.
  4. 순차적 응집 : 한 프로시저의 출력이 다음 프로시저의 입력이 될 때 나타나는 응집력
                          예) 문서 인식 시스템
  5. 절차적 응집 : 한 프로시저의 결과가 다음 프로시저의 입력으로 사용되지는 않지만, 
                          프로시저 이후에 차례로 수행되는 응집 (순차적 응집보다 약함) 
                         예) 대학수강신청 시스템에서 강좌 신청시 요구되는 모든 과정
  6. 시간적 응집 : 프로그램 수행에서 같은 단계에 있는 오퍼레이션들이 같이 모여 있음
                          다른 응집에 영향을 미치지 않게 하면서, 시스템 종료를 위한 코드 또는 특별한 때에
                          사용되는 코드를 묶는 경우
  7. 실용적 응집 : 예) java.lang.Math

결합력 감소

결합은 두 모듈 사이에 의존관계가 있을 때 발생함

강하게 결합된 모듈일수록 시스템을 이해하고 변경하기 어려움

높은 결합력 &rarr; 낮은 결합력

  1. 내용 결합 :  한 컴포넌트가 다른 컴포넌트를 비밀리에 수정하는 경우
                      내용 결합을 피하기 위하여 모든 인스턴스 변수를 private으로 선언하고
                      get 과 set 메소드를 제공하여 캡슐화해야함
  2. 공통 결합 : 캡슐화로 결합력을 줄이거나, 전역 변수의 사용화를 최소화함
  3. 제어 결합 : 하나의 프러시저가 플래그를 사용하여 다른 프러시저를 직접적으로 제어함
  4. 스탬프 결합 : 스탬프란 데이터 덩어리의 집합을 의미
  5. 자료 결합 : 메소드 인자가 간단한 자료인 경우
                     메소드가 가진 매개변수가 많을 수록 결합도가 높음
                     자료 결합과 스탬프 결합 사이에는 교환법칙이 성립한다 
                     매개 변수가 한 개이면 스탬프 결합 보다 결합력이 낮아진다.
                     매개 변수가 많아질수록 스탬프 결합 보다 결합력이 높아진다
  6. 루틴 호출 결합 : 루틴은 일련의 메소드들을 의미함
                              루틴 호출 결합은 어느 시스템이나 항상 존재
  7. 타입 사용 결합 : 어떤 모듈이 다른 모듈에서 정의된 자료형을 사용할 때 발생
  8. 포함 결합 : 컴포넌트가 패키지를 import 하는 경우(Java) 발생 
  9. 외부 결합 : 모듈이 운영체제, 공유 라이브러리, 하드웨어 등에 의존하는 경우

아키텍처 모델

작업 결과를 정리한 문서를 의미

패키지 다이어그램과 배치 다이어그램을 사용함

 

패키지 다이어그램

소프트웨어의 분할을 나타냄

 

배치 다이어그램

분할된 소프트웨어가 어떤 하드웨어에서 수행되는지를 나타냄

개발될 시스템의 소프트웨어 및 하드웨어 컴포넌트의 물리적인 설치 관계 를 나타냄


아키텍처 패턴

  1. 계층 구조 패턴
    각 서브시스템이 하나의 계층이 되어 하위층이 제공하는 서비스를 상위층의 서브시스템이 사용하도록 구성
  2. 클라이언트-서버 패턴
    서버는 커넥션을 기다리고 처리하는 역할
  3. 브로커 패턴
    원거리에 있는 알지 못하는 객체의 메소드를 호출 가능
    예) CORBA 
  4. 트랜잭션 처리 패턴 
    연달아 들어오는 트랜젝션을 하나씩 읽어 처리
    트랜잭션 사령 컴포넌트가 필요함 
  5. 파이프 필터 패턴
    데이터 변환에 사용되는 아키텍처
    데이터 스트림이 프로세스에 차례로 전달되어, 각 프로세스가 데이터를 일정한 형태로 변형
    프로세스를 쉽게 추가, 대체하거나 순서 변경이 쉬움
  6. MVC(Model-View-Controller) 패턴
    사용자 인터페이스를 시스템의 다른 부분과 분리하여 결합도를 낮추기 위한 아키텍처 패턴
    응집력 ↑ , 결합도 ↓
    뷰는 데이터를 변경할 수 없고 모델이 제공하는 데이터만 가져올 수 있음
    뷰나 모델은 제어만 알고 있으면 됨

'CS > 소프트웨어공학' 카테고리의 다른 글

디자인 패턴  (0) 2022.06.08
동적 모델링  (0) 2022.06.07
Comments