Architecture & Design Pattern 전체 링크
아키텍처 스타일 (Architectural Style)
- 시스템의 구조와 구성 요소들 간의 조직된 상호작용 방식을 기술하는 패턴의 집합
- 일반적인 설계 접근 방식을 나타내며, 특정 문제 해결을 위한 구체적인 패턴보다는 더 큰 규모와 범위에서 사용
- Client-Server, Peer-to-Peer, Event-Driven Architecture, Service-Oriented Architecture, ...
아키텍처 패턴 (Architectural Pattern)
- 재사용 가능한 해결책을 제공하는 고수준의 설계 템플릿
- 시스템의 기본 구조를 설계하고, 구성 요소 간의 관계와 상호작용을 규정하고, 여러 품질 속성을 동시에 고려
- MVC 패턴, Layered Architecture, Microservices Architecture, ...
Data Flow Architecture - Batch Sequential, Pipe and Filter, Process Control
Data Centered Architecture - Repository, Blackboard
Implicit Invocation Architecture - Event-Based Style, Message-Based Style
Interaction-Oriented Architecture - MVC, PAC
Hierarchical Architecture - Main-Subroutine, Master-Slave, Layered
Distributed Architecture - Client Server, Multi-Tiers, Broker, Dispatcher, SOA
Data Flow Architecture
- 입력 데이터들에 대한 변환으로 디자인이 정해진다.
- 데이터 흐름의 패턴이 명확하다.
- 프로세스들 간의 다른 상호 작용이 없다.
Batch Sequential
Components : 독립적인 프로그램
Connectors : Files
관계 : 하나의 프로그램에서 생성된 파일이 다음 프로그램의 입력으로 사용된다.
제약사항 : 각 프로그램은 다음 프로그램이 시작되기 전에 완전히 실행되어야 한다.
장점 : 단순한 구성, 일괄 처리 최적화, 각 처리 단계 재사용, I/O가 일치하는 경우 처리 단계 교체 가능
단점 : 실시간 처리 불가, 병목 현상, 제한된 가용성
Pipe and Filter
Components : Filters
Connectors : Pipes
관계 : 파이프의 Source의 끝이 출력 포트와 연결되고, Sink의 끝은 입력 포트와 연결된다.
제약사항 : 필터들은 각각 독립적인 개체여야 한다.
장점 : 단순한 구성, 필터 재사용, 시스템 유지보수 및 향상 용이, 필터의 분산 병렬처리
단점 : 장시간 실행 연산은 비적합, fault tolerance가 낮음, 독립된 필터에 의한 연산 오버헤드 발생
Process Control
Components : Control Unit, Processing Unit
Connectors : Variables (Set Point, Input 등)
제약사항 : Controlled Variable은 Set Point 만큼 유지되어야 한다.
장점 : 최적의 프로세스 조건 유지, 신뢰성, 견고성
단점 : 복잡한 설계, 처리 및 제어 유닛 실패, 오작동 또는 보안 공격이 제어 시스템을 방해
Data Centered Architecture
- 중앙 집중식 데이터 저장소를 가진다.
- 주변의 모든 SW 구성 요소가 데이터를 공유한다.
Repository
Components : Data Store
Connectors : Data Client
제약사항 : Client 간의 직접적인 상호작용이 없어야 한다.
장점 : 새로운 Data, Client 추가 용이 (확장성), Client 재사용, Client 간의 오버헤드를 줄일 수 있음
단점 : 저장소의 공격으로 인해 시스템의 가용성과 보안이 감소, 데이터 구조에 높은 의존성, 데이터 분산 시 추가 비용
Blackboard
Components : Blackboard, Knowlege Source, Control
장점 : 새로운 Data, Client 추가 용이 (확장성), 특정 Client 변경 및 재사용 가능, 동시성 제공
단점 : 저장소의 공격으로 인해 시스템의 가용성과 보안이 감소, 데이터 구조에 높은 의존성, 테스트의 어려움
Implicit Invocation Architecture
- 소프트웨어 구성 요소가 느슨하게 결합된 통신 구조를 가진다.
- 구성 요소 간의 결합도가 낮아 확장성과 유연성이 높다.
- Implicit Invocation : 프로시저를 직접 호출하는 대신, 이벤트가 다른 모듈의 호출을 암시적으로 유발하는 것
Non-buffered Event-Based
- 옵저버 패턴 (1:N, N:1)
Component : Event Source (Subject), Event Listener (Observers)
제약사항 : 이벤트가 발생하면, 이벤트 리스너는 다른 이벤트를 기다리지 않고 즉시 처리해야 한다. (Synchronous)
장점 : 프레임워크 가용성, 컴포넌트 재사용성, 시스템 유지 보수, 유연성
단점 : 리스너는 응답 순서를 예측하고 검증하기 어려움, 간접 호출 오버헤드, 메시지 기반보다 강한 결합
Buffered Message-Based
- Point-to-Point Message Architecture (1:1)
- Publish-Subscribe Messaging Architecture (1:N)
Component : Message Producer, Message Consumer / Publisher, Subscriber
Connector : Queue / Pub-Sub
제약사항 : 일반적으로 비동시식 처리, 동시에 실행될 필요는 없다. (Asynchronous)
장점 : 익명성, 동시성, 메시지 전달에 대한 신뢰성 (제어, 우선 순위, 만료 기간 설정)
단점 : Queue의 용량 제한, 간접 오버헤드, 어려운 디버깅
Interaction-Oriented Architecture
- 사용자와 시스템 간의 상호작용을 데이터 추상화 및 비즈니스 데이터 처리와 분리한다.
MVC (Model-View-Controller)
- 대화형 애플리케이션 설계에 일반적으로 사용
- 사용자에게 표시될 정보와 내부 정보를 분리하고 UI와 Model 간의 일관성을 보장한다.
- Model : 기본 데이터와 비즈니스 로직을 캡슐화
- View : 정보를 사용자에게 표시, Application Logic을 포함하지 않는다.
- Controller : 사용자 입력을 받아 모델로 변환, Application Logic을 포함하고, Model과 View 사이의 데이터 흐름을 관리
장점 : 모델과 뷰, 컨트롤러 객체는 런타임 대체가 가능, Platform에 맞는 뷰와 컨트롤러 구성 요소 구현이 가능
단점 : 복잡도, Model 변경 시 View의 불필요한 업데이트
PAC (Presentation-Abstraction-Control)
- 트리 형태의 계층 구조
- 각 PAC 에이전트는 Application 기능의 특정 측면을 담당한다.
- Presentation, Abstraction, Control로 구성
- Presentation : UI를 처리한다.
- Abstraction : Application Data와 Logic을 담당한다.
- Control : Presentation과 Abastraction 사이을 중개, 다른 에이전트의 제어와의 모든 통신을 처리한다.
장점 : 관심사 분리, 변경 및 확장 용이성, 다중 작업 지원
단점 : 복잡도 증가, PAC 에이전트 간 통신에 따른 오버헤드 증가
Hierarchical Architecture
- SW 시스템은 계층의 서로 다른 수준에서 논리적 모듈로 분해
- 하위 모듈은 인접한 상위 모듈에 서비스를 제공
Main-Subroutine
Components : Procedures, Functions
Connectors : Procedure Calls, Functional Calls
제약사항 : 중앙 집중식 구조, 단일 제어 스레드
장점 : 단순한 구조, 선형적인 제어 흐름, 테스트 용이성,
단점 : 전역 데이터 공유로 인한 취약점 발생, 긴밀한 결합으로 인한 파급 효과 증가
Master-Slave
Master : 서비스의 호출을 구성, 모든 Slave로부터 결과를 받고 특정 전략에 의해 Slave 중 하나의 결과를 선택
Slave : 동일한 기능의 복제된 서비스를 Master에게 제공
장점 : Slave 구성 요소가 실패하더라도, 다른 Slave로 재할당 (장애 허용, Fault Tolerance), 병렬 처리, 확장성, 정확성
단점 : Master가 Single Point of Failure가 될 수 있음, 분산 환경에서의 통신 오버헤드 발생
Layered
Layer : 동일한 수준의 컴포넌트의 집합
관계 : 한 Layer의 컴포넌트가 다른 Layer의 컴포넌트를 사용할 수 있다.
제약 조건 : 비순환 구조, 최소 2개 이상의 Layer가 존재
장점 : Layer 간의 독립성, 병렬 처리, 테스트 용이성, 보안성, 재사용성
단점 : Layer가 많아질수록 성능 감소, 복잡성 증가, 너무 적은 Layer는 재사용, 변경 용이성, 이식성이 감소
Distributed Architecture
- 통신 네트워크를 통해 연결된 컴퓨팅 및 스토리지 장치의 모음으로 구분
- 메시지 전달, 원격 프로시저 호출, 원격 메소드 호출 등으로 통신
Multi-Tiers (2T : Client-Server, 3T : Middleware, ...)
Component : Client, Server, ...
Connetor : Request, Reply Connector
장점 : 책임 분리, Server Component의 재사용성, 병행성, 확장성, 효율적 자원 이용
단점 : Server 성능에 따라 병목 발생, Server가 Single Point of Failure가 될 가능성, 제한된 테스트, 보안 취약
Broker
- 분산 컴퓨팅에 등록된 서버와 클라이언트 간의 통신을 조정하는 미들웨어 아키텍처
- Broker Comonent : 적절한 서버를 찾고, 요청 전송 및 분배, 클라이언트로 응답을 보내는 역할
- Server : 브로커에 등록하고 클라이언트에 대한 인터페이스를 제공
- Client : 브로커를 통해 서버에 Access
장점 : Location Transparency (클라이언트는 서버의 위치를 알 필요가 없음), 변경용이성, 확장성, 이식성, 재사용
단점 : 간접 접근으로 인한 비효율, 낮은 장애 허용 (Low Fault-Tolerance), 테스트 및 디버깅이 어려움
SOA (Service Oriented Architecture)
- 서비스 : 잘 정의되고, 다른 서비스들로부터 독립적이고 표준 프로그래밍 인터페이스를 통해 이용 가능한 비즈니스 기능
- SOA는 Application 구성 요소에 의해 네트워크 통신 프로토콜을 통해 다른 구성 요소에 서비스를 제공한다.
- Service Provider : 공개된 인터페이스로 하나 이상의 서비스를 제공하고, Intermediary Component 에 등록
- Intermediary Component : Service Consumer에게 서비스 관련 정보를 제공, 메시지 라우팅
- Service Consumer : 서비스를 직접 호출하거나 Intermediary를 통해 요청
장점 : 구성 요소가 독립적이므로 변경 용이성, Evolution 증가, 상호운용성, 재사용성, 확장성
단점 : 구축이 복잡하고, 미들웨어에 대한 오버헤드, 병목 현상, 성능 보장 미제공
Edge Computing
- Data 연산과 Storage를 Data의 Source에 가깝게 가져와서 대역폭을 절약하고 성능을 개선할 수 있다.
- Edge Device : 데이터를 수집하거나, Edge Data와 상호작용하는 실제 장치 (카메라, 센서 등)
- Edge Node : 데이터의 생성 지점과 가까운 위치에서 실행되는 시스템
- 클라우드 / 원격 데이터 센터 : Application을 호스팅하거나 서비스를 처리하고 Data를 저장하는 백엔드 인프라
장점 : Privacy, 속도, 가용성
단점 : 코어 외부에서 데이터가 처리되므로, 보안 사고가 날 가능성이 큼, 로컬 HW로 인한 비용
'개발 > Architecture & Design Pattern' 카테고리의 다른 글
아키텍처 뷰 (Architectural View) (0) | 2024.07.18 |
---|---|
아키텍처 전술 (Architectural Tactics) (0) | 2024.07.18 |
품질 속성 시나리오 (Quality Attribute Scenarios) (0) | 2024.07.17 |
UML - 상태 다이어그램 (Statechart Diagram) (0) | 2024.03.03 |
UML 다이어그램 (Unified Modeling Language Diagram) (0) | 2024.03.02 |
댓글