본문 바로가기
Software 공학

Architecture Styles

by 개발자J의일상 2022. 8. 1.
반응형

Batch Sequential Style

정의

  • 데이터 흐름 아키텍처 스타일
    • 시스템은 데이터 셋을 조작하고 순차적으로 실행되는 독립 컴포넌트로 구성됨
    • 한 컴포넌트는 이전 컴포넌트가 완료되어야 다음이 시작됨
  • 데이터는 컴포넌트 간에 whole batch로 전송됨

동기

  • 여러 단계에서 데이터 셋을 조작해야 할 때
  • 하나의 컴포넌트로 전체 기능을 처리하기 어려울 때 (컴포넌트들의 시퀀스에 대한 수요)
  • 시스템을 재구성해야 할 때 
    • 컴포넌트를 쉽게 삽입, 제거 또는 재 정렬해야 할 때

Applicable Situation 

  • 독립적인 데이터 조작 컴포넌트로 구성된 시스템(즉, 데이터 조작 집약적인 시스템)
  • 컴포넌트는 데이터 흐름의 순서에 따라 순차적으로 연결됨 (병렬 처리는 지원하지 않음)
  • 전체 배치에서 컴포넌트에서 다음 컴포넌트로의 데이터 전송
    • 결과적으로, 현재 컴포넌트가 완료되어야 다음 컴포넌트가 시작됨
  • 데이터 조작 중 사용자와 상호작용이 없음

구조

  • Component (컴포넌트) : 데이터 조작 단위
  • Data Flow (데이터 흐름) : 컴포넌트 간 연결

장점

  • 높은 재사용성 : 컴포넌트 재사용 용이
  • 높은 유지 보수성 : 유지보수 및 신규 추가 또는 컴포넌트 교체 용이
  • 컴포넌트 간 상호작용의 복잡성이 낮음 : 프로세싱 모듈은 블랙박스임

단점

  • Interactive Application 모델링에는 적용 불가 (기능 실행 중간에 개입할 수 없음)
  • 낮은 성능 및 효율성 ( 순차 처리(Sequential processing)만 지원하기 때문에)
  • 사용자가 결과를 얻기 전에 시스템을 통해 모든 데이터를 준비해야 함

 

Pipe-and-Filter Style

정의 

: 데이터 스트림 절차의 각 단계를 필터 컴포넌트로 캡슐화하여 파이프를 통해 데이터를 전송하는 패턴

  • Data-flow Architecture Style
    • 시스템은 데이터 조작 컴포넌트로 구성됨
    • 컴포넌트는 Stream에서 데이터 셋을 전송
    • 여러 컴포넌트가 병렬로 실행될 수 있음

동기 

  • 데이터 스트림으로 작업해야 함
  • 시스템 재구성 필요 (컴포넌트를 쉽게 삽입, 제거 또는 재정렬해야 함)
  • 사용자와의 상호작용을 지원함

Applicable Situation

  • 독립적인 데이터 조작 컴포넌트들로 구성된 시스템 (즉, 데이터 조작 집약적 시스템)
  • 다음 컴포넌트로 전송되는 데이터 스트림
    • 결과적으로 컴포넌트는 입력 데이터 스트림이 전달될 때 기능을 시작
  • 컴포넌트는 병렬로 실행될 수 있음
  • 데이터 조작 중 사용자와의 상호작용 지원
  • 각 컴포넌트를 쉽게 재구성할 수 있음 : 처리 단계를 교환하거나 재정렬함

Structure

- Filter 

  • 독립적인 기능 단위
  • 입력에서 데이터 스트림을 읽고 출력에서 데이터 스트림 생성
  • 입력 스트림에 로컬 변환을 적용하고 데이터를 점진적으로 처리

- Pipe

  • 컴포넌트 간에 데이터 스트림을 전송
  • 서로의 존재에 대한 사전 지식 없이 필터들을 결합하는 것

- Data source

  • 타깃 시스템의 입력

- Data Sink

  • 마지막 필터의 출력

장점

  • 전체 기능을 여러 컴포넌트로 잘게 나누어서 순차적으로 개발할 수 있다.
  • 필터 유지 및 재사용 용이
    • 필터는 기능적으로 독립적이다. 
    • 다른 시스템 요소에 영향을 주지 않고 필터 구현을 쉽게 변경할 수 있도록 한다.
    • 필터의 순서를 재구성할 수 있다.
  • 병렬 처리에 의한 효율성
    • 여러 필터가 동시에 실행되는 병렬 처리 지원

단점

  • 상태 정보를 공유하는 데 비용이 많이 들거나 inflexibile 하다. 
  • 데이터 변환 오버헤드

Batch-Sequential vs. Pipe-and-Filter

Similarity 

  • 데이터 조작의 컴포넌트
  • 일련의 컴포넌트는 전체 기능을 수행하기 위해 실행

Differences

  Batch-Sequential Pipe-and-Filter
언제 입력 데이터를 처리? 모든 입력 데이터가 전달되면 입력 데이터의 스트림이 전달될 때
어떻게 데이터를 처리? 각 컴포넌트는 배치 방식으로 기능을 수행 각 컴포넌트는 기능을 점진적으로 수행
동시성 지원 여부? 동시성 없음 (순차 처리만) 동시성 가능
상호작용 지원 여부 Interactive 안됨(입력 데이터가 시스템에 전달되면 모든 컴포넌트가 실행을 중지할 수 없음) Interactive 가능(다소 어려움)

 

Layered Architecure Style

정의

: 시스템을 계층으로 구분하여 구성하는 고전적 방법 중 하나

  • 타깃 시스템은 계층 스택으로 구성
  • 각 계층은 상위 계층에 서비스를 제공하고 하위 계층에 서비스를 요청함
  • 레이어는 추상화 수준에 따라 정렬됨
  • 각 계층은 고유한 기능을 제공
    • 상위 레이어는 "버츄얼 머신"
    • 가장 하위 레이어는 하드웨어/커널

Motiviation

  • 독립적인 추상화 계층 필요(별도의 관심사, 종속성 제한, 대체 허용)

Layer vs. Tier

Layer 

  • 응집력 있게 관련된 기능 단위
  • 기계의 다른 폴더나 디렉터리에 있는 컴포넌트로 구성

Tier

  • 여러 기계에 배치된 컴포넌트로 구성
  • 일반적으로 계층은 물리적 하드웨어를 나타냄

Applicable Situation

  • 타겟 시스템이 여러 레이어들로 계층적으로 잘 구성될 수 있다.
  • 각 레이어는 상위 레이어에 기능을 제공하고 하위 레이어에 대한 클라이언트 역할을 한다.
  • 레이어는 가상 머신으로 간주된다.
    • 인접한 상위 레이어를 제외한 다른 레이어에서 내부 레이어를 숨길 필요가 있을 때 

Structure

Layer

  • 특정 추상 수준의 기능을 그 위의 레이어 또는 레이어에 제공하는 컴포넌트 모음을 포함한다.
  • 레이어 간의 관계
    • 레이어에서 다음 레이어로의 호출
    • 동기 및 비동기 모두 가능("이벤트", "콜백")

장점 

  • 레이어 재사용
    • 표준 인터페이스를 생성해야 한다.
    • 다른 플랫폼으로 쉽게 이식
  • 레이어를 통해 위로 올라갈수록 추상화 수준 증가
    • 복잡한 문제를 쉽게 분할
  • 관심사들을 알맞게 분리할 수 있다.
  • 레이어별 구현이 분리되어 있어 유지보수가 상대적으로 용이
    • 한 레이어를 새 레이어로 대체하여 쉽게 수정

단점 

  • 잠재적인 성능 문제
    • 레이어 간 통신으로 인한 성능 저하
    • 레이어를 통해 아래로 통신하고 백업하므로 효율성을 위해 바이패스가 발생할 수 있다.
  • 적절한 추상화 수준을 찾기 어려움
    • 특히 기존 시스템이 여러 레이어를 교차하는 경우
  • 구현 유연성 감소
    • 시스템 구성이 어려울 수 있다.

 

Model-View-Controller Style

정의

: 서브시스템을 3개의 부분으로 구조화하는 패턴

- Layered Architecture style

  • 애플리케이션은 3개의 레이어로 나뉩니다.
  • View는 사용자와 상호작용한다.
  • Controller는 사용자 입력으로 업무처리를 수행한다.
  • Model은 영구 데이터 세트를 관리한다.

Motivation

  • 원래 GUI 응용 프로그램에 의해 모티브가 됨
    • 사용자 뷰의 'Look and feel'은 시간이 지남에 따라 많이 변하는 경향이 있다.
    • 때로는 기본 기술도 변경이 된다.
    • 변경 사항은 애플리케이션의 전체 기능에 영향을 미칠 수 있다.
    • UI 변경의 영향을 최소화해야 한다.
  • 많은 현대 애플리케이션에 적용할 수 있음

Applicable Situation

  • 시스템은 사용자 인터페이스 제공, 워크플로 처리 및 데이터 지속성 관리의 3가지 역할로 이상적으로 분할될 수 있는 경우 (View, Control, Model에 각각 해당)
  • 시스템은 사용자 인터페이스의 다중 구현이 필요한 경우 
    • 다양한 GUI 플랫폼을 위한 다양한 사용자 인터페이스
    • 기능의 다양한 가용성을 위한 다른 사용자 인터페이스(사용자의 역할, 시간대, 'Look and Fell', 기타)
  • 사용자 인터페이스의 변경이 다른 계층에 미치는 영향을 최소해야 하는 경우
  • 시스템은 기본 데이터베이스 스키마와 독립적으로 영구 데이터 세트에 액세스 하기 위한 안정적인 인터페이스를 제공해야 한다.

구조

Model

  • 데이터 모델을 표현하기 위해
  • 애플리케이션의 기능적 핵심을 제공하기 위해
  • 데이터 변경 사항에 대해 종속 컴포넌트들에 알리기 위해

View

  • 사용자에게 정보를 표시하기 위해
  • Model로부터 알림을 받은 후 Model에서 데이터를 가져오기 위해

Controller

  • 사용자 입력을 처리하기 위해
  • 이벤트(즉, 사용자 입력)를 Model에 대한 서비스 요청으로 변환

장점

  • 3가지 관심사의 분리
    • 시스템은 종종 3가지 관심사로 구성된다; 유저 인터랙션, workflow, persistent 데이터 관리
    • MVC는 이러한 문제를 Model, View, Control 레이어에 반영한다.
  • 동일한 Model을 사용하는 다중 뷰 구현이 가능
    • 모델 컴포넌트는 구현, 테스트 및 유지 관리가 더 쉽다.
  • 새로운 유형의 클라이언트를 추가하는데 더 쉽다.
    • 뷰와 컨트롤러를 작성하여 기존 엔터프라이즈 모델에 연결한다.
  • 뷰 및 컨트롤러를 언제든지 교체할 수 있다. (Pluggable)
    • MVC의 개념적 분리를 통해 모델의 뷰 및 컨트롤러 객체를 교환할 수 있다.

단점

  • 약간의 설계 복잡성
    • MVC는 모델, 뷰 및 컨트롤러의 분리로 인해 일부 클래스와 코드를 추가해야 함
  • 잦은 이벤트에 불편함 (3가지 레이어를 거쳐야 하기 때문에)

 

Shared Repository Architecture Style

정의

  • 데이터 중심 아키텍처 스타일
    • 모든 공유 데이터는 모든 컴포넌트에서 액세스 할 수 있는 중앙 DB에 보관된다.
  • 각 컴포넌트는 공유 데이터를 통해 데이터를 교환한다.
    • 컴포넌트들은 저장소에 데이터를 쓴다.
    • 컴포넌트들은 저장소에서 데이터를 읽는다.

Applicable Situation

  • 애플리케이션들이 공통 데이터 세트를 공유해야 할 때
  • 애플리케이션 간 데이터 셋 공유를 위한 고효율성이 필요할 때 (공유 저장소에 직접 접근)
  • 데이터 조작 기능에서 데이터 저장소를 격리해야 할 때

구조

Data Repository

  • 컴포넌트들에서 교환해야 하는 모든 데이터를 저장하는 곳

Data Accessor

  • 독립 컴퓨팅 컴포넌트
  • 공유 데이터 저장소에 직접 액세스(중간 계층 없음)

장점

  • 대용량 데이터를 효율적으로 공유하는 방법
    • 한 서브시스템에서 다른 서브시스템으로 데이터를 명시적으로 전송할 필요가 없음
  • 컴포넌트 수정 용이
    • 컴포넌트가 서로 의존하지 않고 새로운 컴포넌트 추가가 용이
  • 일관된 데이터에 대한 동시 액세스 지원
  • 관심사 분리 가능
    • 컴포넌트는 다음 문제에 관심을 두지 않고 주요 기능에 집중할 수 있다(백업, 보안, 접근통제 및 장애 복구)

단점

  • Repository의 Data Schema 관리가 어려움
    • 공유 저장소의 구조를 변경하면 컴포넌트들에 큰 영향을 미침
  • 잠재적인 성능 문제
    • 컴포넌트들(클라이언트들) 간의 통신이 느릴 수 있다.
  • 데이터 보안에 대한 우려
  • 가용성에 대한 우려

 

Blackboard Architecture Style

정의

: 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 형태

  • 데이터 중심 아키텍처 스타일
    • 독립 프로그램을 Blackboard라고 하는 글로벌 데이터 저장소를 통해 독점적으로 통신한다.
    • 전문가가 데이터 셋 또는 문제의 일부를 해결하고 해당 솔루션을 게시한 후 다른 전문가가 문제를 식별한다. (전체 문제가 해결될 때 까지 프로세스가 계속됨)
    • 독립적인 프로그램들은 부분적 또는 대략적인 솔루션을 구축하기 위해 지식을 수집한다.
  • 공유 저장소 스타일과의 차이점
    • Shared Repository Style의 Shared Data는 Passive하고 Blackboard는 Active하다.
      • Blackboard는 관심 데이터가 변경될 때 컴포넌트들에게 알림을 보낸다.

Applicable Situation

  • 결정론적(deterministic) 솔루션 전략이 알려져 있지 않은 문제
    • 솔루션 전략에 대한 근접한 Approach가 알려져 있지 않거나 실현 가능성이 없는 미성숙한 문제 영역
    • 예시(복잡한 데이터 해석, 신호 처리, 음성/패턴 인식 등)
  • 컴포넌트들은 공유 상태를 통해서만 연결되어야 함(통신 컴포넌트들은 서로를 알지 못함, 즉 느슨하게 연결됨)

구조

Blackboard

  • 중앙 데이터 저장소를 관리

Knowledge Source

  • 새로운 데이터를 생성하고 Blackboard에 업데이트하는 독립 컴포넌트
  • 문제를 해결하는 데 필요한 지식을 포함하는 독립 컴포넌트

Control

  • Knowledge Source들 간의 전송 제어
    • 문제 해결 과정과 문제 해결 자원의 지출에 대한 런타임 결정을 내림
  • 공유 blackboard를 모니터링

장점

  • 실행 가능한 deterministic 솔루션이 없는 문제에 적응함(adapted)
  • 오픈 데이터 표현 지원 (Supporting Open Data representation)
    • Repository들에서 서로 다른 컴포넌트를 연결하고 작동할 수 있도록 한다.
  • Knowledge source 추가가 쉬움
    • Knowledge source 간의 독립성으로 인해

단점

  • Optimal Solution(최적 솔루션)은 얻기 어렵다(단, 부분적 솔루션 또는 근사적 솔루션만)
  • 변경 또는 진화가 어려운 Blackboard (knowledge source들은 데이터베이스 구조에 동의해야 함)
  • 잠재적인 성능 문제
    • 컴포넌트들 (클라이언트들) 간의 통신이 느릴 수 있다.
    • Blackboard는 너무 많은 클라이언트들로 병목 현상이 된다.
  • 시스템 디버깅 및 테스트 어려움

 

Broker Architecture Style

정의

: 사용자가 원하는 서비스, 특성을 브로커 컴포넌트에 요청 > 브로커 컴포넌트가 요청에 맞는 컴포넌트와 사용자를 연결

  • 로드 밸런싱 아키텍처 스타일
    • 분산 컴퓨팅에서 등록된 서버와 클라이언트 간의 통신을 조정하고 용이하게 하는 데 사용
    • 브로커 컴포넌트는 요청 전달과 같은 통신 조정과 결과 및 예외 전송을 담당함 -> 시스템의 유연성 증가
    • 각 클라이언트는 서버 컴포넌트와 직접 통신하지 않고 브로커에 요청을 보냄
    • 클라이언트는 서버의 위치를 알 필요가 없음

Applicable Situation

  • 서버들 복제 필요
  • 높은 QoS로 서버를 호출해야 함
  • 서버에서 클라이언트 분리
    • 분산된 heterogenous (이기종) 환경에서 분리되고 상호 작용하는 컴포넌트 집합으로 복잡한 시스템을 구조화해야 할 때
  • 유연성과 변경 가능성을 향상하기 위해

구조

Client

  • 사용자 기능 구현
  • 조회를 통해 정적으로 또는 동적으로 브로커에게 서버의 서비스를 요청

Stub (Client-side-Proxy)

  • 클라이언트와 브로커 사이를 중재
  • 프로토콜 수준에서 프로세스 간 통신을 숨김으로써 그들 사이의 투명성을 제공

Server

  • 브로커에 인터페이스를 등록하고 게시하여 클라이언트가 사용할 수 있는 서비스를 제공

Skeleton (Service-side Proxy)

  • 서버와 브로커를 중재
  • 저수준 시스템별 네트워킹 기능을 캡슐화

Broker

  • 커뮤니케이션을 조율하는 역할
    • 서비스 요청 중개, 적절한 서버 찾기, 요청 전달 및 발송, 클라이언트에 응답 또는 예외 보내기
    • 클라이언트와 서버 간의 연결을 유지

Bridge (Optional)

  • 두 브로커가 상호 운용할 때 구현 세부 정보를 숨김
  • 기본 네트워크 세부 구현을 캡슐화하여 로클 브로커와 원격 브로커 브리지 간의 중재

Relationships among Components

  • 회신/요청 (메소드 호출 형식)

Constraints

  • 서버와 클라이언트는 브로커를 통해 서로 상호 작용

장점

  • 위치 투명성
  • 컴포넌트들의 변경 가능성 및 확장성
  • 브로커 시스템의 Portability
  • 서로 다른 브로커 시스템 간의 상호 운용성
  • 시스템 재사용성
  • QoS가 높아진다 (안정성, 가용성, 성능과 연관)

단점

  • 프록시 오버헤드로 인한 제한된 효율성
  • 낮은 Fault Tolerance
  • 테스트 및 디버깅이 어려움 (관련된 많은 컴포넌트로 인해)

 

Dispatcher Architecture Style

정의

  • 로드 밸런싱 아키텍처 스타일
    • 시스템은 세 부분으로 구성된다. 클라이언트, 서버 및 디스패처
  • 고가용성, 안정성, 성능 및 확장성을 제공하기 위해 다수의 이중화 서버가 활용됨
  • Dispatcher는 서버의 디렉터리와 디렉터리에 있는 서버의 QoS값을 유지관리
  • 클라이언트는 서버 조회 시 디스패처는 QoS가 높은 서버를 찾아 서버 참조를 클라이언트에 보냄, 이후 클라이언트는 세션 중에 서버를 직접 호출

Applicable Situation

  • Broker 아키텍처 스타일과 유사
    • 서버들 복제 필요
    • 높은 QoS로 서버를 호출해야 함
  • 최소한의 디커플링 및 고효율
    • 클라이언트 프로그램은 QoS가 높은 서버와 직접 상호작용
  • 유연성과 변경 가능성을 향상하기 위해

구조 

Components

  • Server
  • Client
  • Dispatcher
    • 서버 디렉터리
    • 클라이언트 디렉터리

Connectors

  • 제어 흐름 (클라이언트, 서버, 디스패처 사이)

Options

  • Single Dispatcher
  • Multiple Dispatchers

Elements of Dispatcher

  • View Layer
    • Client Interface
    • Server Interface
  • Control Layer
    • Server Locator
    • QoS Evaluator
  • Model Layer
    • Client 
    • Server

장점

  • 고성능
    • 단일 서버에서 전체 기능을 실행하는 오버헤드는 여러 서버에 대한 기능 분할로 인해 해결할 수 있음
    • 적절한 서버를 찾고 할당하기 위해 중개자를 고용하면 오버헤드는 최소화된다. 클라이언트는 세션 중에 할당된 서버와 직접 상호작용함
  • 고가용성 및 안정성
    • 클라이언트 부하의 로드 밸런싱
    • 클라이언트의 부하를 동적으로 균형 조정하여 한 서버의 오류 또는 오류를 허용할 수 있음
  • 높은 확장성
    • 시스템의 다른 부분에 영향을 주지 않고 서버 수를 늘리거나 업데이트할 수 있음

단점

  • 최소의 성능 오버헤드
    • 적절한 서버를 동적으로 찾고 할당하려면 어느 정도의 오버헤드가 있다. 오버헤드에는 서버의 QoS값을 계산하는 비용이 포함
  • 최소의 신뢰성 위험
    • 시스템 신뢰성은 디스패처의 오류 또는 장애에 의해 영향을 받음
    • 이것은 단일 디스패처 모델에서 더 심함

 

Microservice Architecture Style

정의

  • 서비스 기반 아키텍처 스타일
    • SOA 스타일의 변형
    • 작고 자율적인 서비스의 집합체로 구성
  • 마이크로 서비스
    • 독립적이며 단일 비즈니스 기능을 구현해야 한다.
    • 표준화된 API를 통해 다른 서비스와 커뮤니케이션하며 다른 언어 또는 다른 기술로 작성된 서비스를 실행할 수 있다.

Applicable Situation

  • 서비스 소비자
    • 외부 서비스를 통해 충족될 수 있는 기능들이 있을 때
    • 서비스 공급업체가 존재할 때
  • 서비스 공급자
    • 공동 서비스에 대한 수요가 높을 때
    • 서비스 소비자가 존재할 때

구조

Microservice

  • 작고 독립적이며 느슨하게 결합된 기능 장치
  • 단일 소규모 개발자 팀에 의해 개발 및 유지 관리
  • 독립적으로 구현됨 (팀은 전체 애플리케이션을 재구축 및 재배포하지 않고도 기존 서비스를 업데이트할 수 있음)
  • 자신의 데이터 또는 외부 상태를 유지하는 책임
  • 잘 정의된 API를 사용하여 서로 통신
  • 서비스는 동일한 기술 스택, 라이브러리 또는 프레임워크를 공유할 필요가 없음

API Gateway

  • 클라이언트들을 위한 진입점
    • 서비스를 직접 호출하는 대신 클라이언트가 API 게이트웨이를 호출하여 백엔드의 적절한 서비스로 호출을 전달함
  • API 게이트웨이를 사용하는 장점은 다음과 같음
    • 클라이언트를 서비스에서 분리, 모든 클라이언트를 업데이트할 필요 없이 서비스의 버전을 지정하거나 리팩터링 할 수 있음
    • 서비스는 AMQP와 같이 웹 친화적이지 않은 메시징 프로토콜을 사용할 수 있음
    • API Gateway는 인증, 로깅, SSL 종료 및 로드 밸런싱과 같은 다른 교차 기능을 수행할 수 있음

장점

  • 높은 민첩성
    • 독립적으로 배포되어 버그 수정 및 기능 릴리스 관리 용이
    • 전체 애플리케이션을 재배포하지 않고도 서비스 업데이트 용이
  • 소규모 집중 팀이 개발하기 쉬움
    • 마이크로 서비스는 단일 기능 팀이 빌드, 테스트 및 배포할 수 있을 만큼 적당해야 함
    • 소규모 팀 규모는 더 큰 민첩성을 촉진함
  • 신기술 적용 용이
    • 팀은 적절하게 혼합된 기술 스택을 사용하여 서비스에 가장 적합한 기술을 선택할 수 있음
  • 고립된 장애 덕분에 장애 관리 용이
    • 개별 마이크로서비스를 사용할 수 없게 되더라도 업스트림 마이크로서비스가 오류를 올바르게 처리하도록 설계된 한 전체 애플리케이션을 방해하지 않는다.
  • 더 높은 확장성
    • 전체 애플리케이션을 확장하지 않고 독립적으로 확장된다.
  • 데이터 격리
    • 단일 마이크로서비스만 영향을 받기 때문에 스키마 업데이트를 수행하기가 더 쉽다.

단점

  • 장애 관리가 어렵다
    • 네트워크 혼잡 및 지연
  • 잠재적으로 낮은 성능
    • 네트워크를 통한 호출
  • 관리 방식의 부재
    • 마이크로 서비스 구축에 대한 분산된 접근 방식
    • 응용 프로그램을 유지 관리하기 어렵게 되는 많은 다른 언어 및 프레임워크
  • 데이터 무결성/일관성을 유지하기 어려움
    • 각 마이크로서비스는 자체 데이터 지속성을 책임진다. 결과적으로 데이터 일관성이 문제가 될 수 있음
  • 여러 서비스의 어려운 버전 관리
    • 언제든지 업데이트될 수 있으므로 신중하게 설계하지 않으면 이전 버전 또는 이전 버전과의 호환성에 문제가 발생할 수 있음

 

MicroKernel Architecture Style

정의

  • 적응형 아키텍처 스타일
    • 핵심 커널과 플러그인 컴포넌트 세트로 대상 시스템을 구성
    • 플러그 앤 플레이 인프라 활용
  • 핵심 기능을 가변 부분과 분리
    • Open-Closed 원리 적용

Applicable Situations

  • 시스템은 다른 구현에서 동적으로 구성되어야 함
    • 플러그인 컴포넌트들로 가변성을 구현
  • 시스템은 변화하는 시스템 요구 사항에 효과적으로 적응할 수 있도록 설계되어야 함
  • 애플리케이션/버전 제품군
    • 공통 아키텍처 및 가변 플러그인 컴포넌트를 채택함
    • 낮은 유지 비용

구조

  • 코어 시스템, 즉 Microkernel(폐쇄형 설계)
  • 플러그인 컴포넌트들 (개방형 설계, 플러그인에 필요한 인터페이스)

장점

  • 높은 유연성 및 확장성
    • 플러그인 컴포넌트를 사용하여 수정 또는 확장할 수 있음
  • 높은 호환성(Portability)
    • 시스템은 마이크로커널을 수정해야만 새로운 환경에 보고될 수 있음
  • 높은 유지 보수성
    • Core System과 Plug-in 분리로 인해

단점

  • 호환성을 위한 플러그인 검증 필요
    • 하나의 애플리케이션 실행 내에서 훨씬 더 많은 프로세스 간 통신이 필요함
  • 모놀리식 시스템에 비해 복잡한 설계 및 구현

 

Event-Driven Architecture Style

정의

  • 이벤트 기반 아키텍처 스타일
    • 프로시저를 직접 호출하는 대신 독립 컴포넌트들은 이벤트 버스를 통해 전달되는 이벤트를 비동기적으로 보내고 받음
    • Publish-Subscribe와 달리 게시자와 구독자의 구분이 없음
    • 시스템의 다른 컴포넌트들은 이벤트와 프로시저를 연결하여 이벤트에 관심을 등록할수 있음
    • 이벤트가 공지되면 방송 시스템(커넥터) 자체에서 이벤트에 등록된 모든 절차를 호출함
  • 이벤트 알림은 "암시적으로" 다른 모듈의 프로시저 호출을 유발함

Applicable Situations

  • lossely 결합된 이벤트 이미터 및 이벤트 처리기로 시스템을 구성할 때 
  • 명확한 관심사 분리
    • Event Source/Emitter
    • Event Handler
  • 높은 시스템 구성 가능성
    • Event Handler에 Open Design 적용

장점

  • 컴포넌트의 분리 및 자율성
  • 높은 재사용성
    • 기존 컴포넌트에 영향을 주지 않고 새로운 컴포넌트를 쉽게 추가할 수 있음
    • 해당 시스템의 이벤트에 등록하기만 하면 컴포넌트를 시스템에 도입할 수 있음
  • 높은 유지 보수성
    • 컴포넌트는 시스템의 다른 컴포넌트 인터페이스에 영향을 주지 않고 다른 컴포넌트로 대체될 수 있음
  • 이벤트 처리(Event Handling)의 병렬 실행
  • 높은 확장성

단점

  • 낮은 신뢰성(Reliability)
    • 이벤트의 성공적인 전달을 보장하지 않음
  • 불확실성
    • 다른 컴포넌트가 그것에 대해 어떤 반응을 보일지 알기 어려움
    • 응답이 호출되는 순서를 예측하기 어려움
    • 언제 응답이 끝났는지 알기 어려움
  • 정확성을 보장하기 어려움
    • Listener들의 응답 및 응답 순서를 예측하고 검증하기 어렵기 때문에 시스템을 테스트하고 디버그하기 어려움
    • 정확성은 컨텍스트와 호출 순서에 따라 다름

 

Service-Oriented Architecture Style

정의 : 

- Service-based Architecture Style

    - To consist of a collection of distributed components that provide and/or consume services

    - Service Provider and Service Comsumer

- Service is a self-contained functionality.

    - Not to depend on state of other services, or of the system it is running on

- Service is black box for its consumers

    - Meaning the consumer does not have to be aware of the service's inner workings

 

Applicable Situations

- A system can be organized with a collection of independent services with well-defined interfaces

- Service are for reusability.

- A service is a group of methods that contain the business logic.

- A service is accessible through the Internet.

 

Structure

- Service Provider 

    - To provide one ore more services thorugh published interfaces

- Service Consumer

    - To invoke services directly or thorugh an intermediary

- Service Registry

    - By providers to register their services

    - By consumers to query and discover services at runtime

- ESB / Orchestration Server

    - Orchestration Server to coordinate interaction between providers and consumers

    - Enterprise Service Bus to route messages

- Relationships among Components

    - Universal message-oriented protocols like SOAP and REST

- Constraints

    - Service consumers are connected to service providers, but intermediary components (such as ESB) may be used.

    - Application is built ad-hoc out of services that communicate in a standardized manner. (via a network)

    - service providers may also be service consumers.

장점 : 

- High Reusability of Services

    - Easy to develop SOA-based business application development much more efficient in terms of time and cost

- Easy to evolve and update the system

   - Due to the loosely coupled connections between clients and services

- High Interoperability

    - Any client or service can access other services regardless of their platform, technology, vendors, or language implementations.

- Loosely-coupled connections

    - Between service, Between service consumers and service providers, Between service interface and implementation

단점 : 

- High Complexity of Design

- Performance Penalty (Due to network latency, Due to the broker)

- Low Fault Management

   - Consumers have limited manageability of services.

 

 

300x250

'Software 공학' 카테고리의 다른 글

Principles of SW Design  (0) 2022.07.28
OO Analysis & Design  (0) 2022.07.27
OOP Concepts  (0) 2022.07.26

댓글