소프트웨어 아키텍쳐에서 일반적으로 발생하는 문제점들에 대한 일반화되고 재사용 가능한 솔루션이다.
OReilly
Dossier
Category | General | Distributed Computing | Communication | Event Handling |
---|---|---|---|---|
Patterns | Layer Pattern Hexagon Pattern Pipe&Filter Pattern MVC Pattern | Client-Sever Pattern Shared Data Pattern Multi-Tier Pattern Service-oriented Architecture Pattern P2P Pattern | Messaging Pattern Broker Pattern Publisher-Subscriber Pattern | Reactor proactor Connector-Acceptor Asynchronous Completion Token |
n-티어 아키텍쳐 패턴
전체적인 흐름의 디자인
각 계층의 역할을 정의하여 세분화, 구조화의 목적
계층 | ' | 설명 |
---|---|---|
Presentation Layer | UI Layer | |
Application layer | Service layer | 유저 + 브라우저와 상호작용하는 로직을 가짐 |
Business Layer | Domain layer | 요청에 맞는 비즈니스 로직을 수행 |
Data access layer | Persistence layer | 데이터를 저장하고 관리 |
대부분의 Web application은 N-Tier 아키텍처이다. Application, Server, 다수의 Client 및 DB가 있다.
N-Tier는 실제로 Layered Pattern 와 결합된 Client-Server 아키텍처이다.
SETI에는 Master라는 단일 중앙 컴퓨터가 있고, Client라고 하는 인터넷 컴퓨터에 data package를 보낸다. 각 Client 는 이 데이터를 처리하고 그 결과를 Master Server로 다시 보낸다. Master는 이 결과를 DB에 통합하고 Client에게 더 많은 Data를 제공한다.
요소 | 설명 |
---|---|
Filter | 연결된 Pipe를 통해 수신하는 Data를 변환하거나 필터링한다. Filter에는 원하는 수의 입력 Pipe와 원하는 수의 출력 Pipe가 있을 수 있다. |
Pipe | 한 Filter에서 다음 Filter로 Data를 전달하는 Connector이다. 다음 Filter가 처리할 시간이 있을 때 까지 모든 Data를 저장하기 위해 일반적으로 Data Buffer에 의해 구현되는 방향성 Data Stream이다. |
Pump (producer) | Data Source. Static Text File 또는 Keyboard 입력 장치가 될 수 있으며, 지속적으로 새로운 Data를 생성한다. |
Sink (Consumer) | Data Target. 다른 File, DB, 또는 Computer 화면이 될 수 있다. |
수행하기 위해 많은 Transformation이 필요하며, 유연성/강력함이 요구될 때 사용한다.
Service Oriented Architecture
"You just want the job to be done.
You don't care who performs it, but you may have some demands.
Tell your broker. He will take care of it."You go to a broker to buy a house. You don't want to need to know all about the housing business, costs, quality, suppliers. You just tell the broker your maximum price and some other requirements, and he starts looking.
Broker를 설정하면 Service 호출을 쉽게 프로그래밍 할 수 있다. 따라서 Transaction, Exception 처리를 잘 해 주어야 한다.
Resource 감지를 위해서 Hasing을 일반적으로 사용한다.
Message Bus
relate with : Observer Pattern in Design Pattern
다양한 방식으로 서로 통신해야 하는 많은 Module이 필요한 경우.
Runtime에 Module을 추가, 제거하고 직접 통신하거나 Message를 BroadCast할 수 있다.
요소 | 설명 |
---|---|
이벤트 소스 (Event Source) | Event Bus를 통해 특정 Channel로 message를 발행(publish)한다. |
이벤트 리스너 (Event Listener) | 특정 Channel에서 message를 구독(subscribe)한다. 이전에 구독한 Channel에 발행된 message에 대해 알림을 받는다. |
채널 (Channel) | |
이벤트 버스 (Event Bus) |
통신 | 설명 |
---|---|
Publish-Subscribe | Module은 특정 message 유형을 구독할 수 있다. Module이 Bus에 message를 게시할 때마다 해당 message 유형을 구독하는 모든 module에게 전달된다. |
BroadCast | message가 모든 Module에 전달된다. |
Point-to-point | 1 Message : 1 Receiver |
BlackBoard는 Knolege Source의 공통 Data 구조이다.
요소 | 설명 |
---|---|
블랙보드 (blackboard) | 솔루션의 객체를 포함하는 구조화된 전역 메모리 별도의 자료구조가 필요한 경우 board를 pannel로 나눈다. 'is-part-of' |
지식 소스 (knowledge source) | 자체 표현을 가진 특수 모듈 솔루션에 추가되는 구성 요소 knowlege source는 다른 knowlege source와 완전히 연결되어 있지 않다. |
제어 컴포넌트 (control component, Scheduler) | 모듈 선택, 설정 및 실행을 담당 |
아키텍처 | 장점 | 단점 |
---|---|---|
Layered | 하위 레이어는 다른 상위 Layer에 의해 사용됨 Layer 표준화가 쉬우며 Layer 수준을 정의하기 수월 Layer를 변경해도 다른 Layer에는 영향을 끼치지 않음 | 광범위한 적용이 어려움 특정 상황에서는 특정 Layer가 불필요할 수 있음 |
Client-Server | Client가 요청할 수 있는 일련의 Service를 Modeling 할 수 있음 | 요청은 일반적으로 서버에서 별도의 Thread로 처리. Process간 통신은 서로 다른 Client가 서로 다르게 표현되므로 Overhead 발생 |
Master-Slave | 정확성-서비스의 실행은 각기 다른 구현체를 가진 slave 들에게 전파 | Slave가 독립적이므로 공유되는 상태가 없음 Real time System에서는 Master-slave간 latency 문제가 발생할 수 있음. 분리가능한 문제에만 적용가능 |
Pipe-Filter | 동시성 처리를 나타냄 I/O가 Stream으로 구성되고 Filter가 Data를 수신하면서 연산을 수행하기 시작 Filter 추가가 쉬움 System 확장성이 좋음 Filter는 Reuse 가능 주어진 Filter을 재구성하여 또 다른 Pipeline을 구축가능 | 가장 느린 Filter연산에 의해 효율성이 제한될수 있음 Filter간 Data 이동에서 Data 변환 overhead가 발생 |
Broker | 객체의 동적인 변경, 추가, 삭제 및 재할당이 가능하며 개발자에게 배포를 투명하게 만듬 | Service 표현에 대한 표준화가 필요 |
Peer to Peer | 탈중앙화딘 컴퓨팅을 지원. 특정 노드 장애에 매우 강함 Resource 및 컴퓨팅 성능면에서 확장성이 뛰어남 | Node들이 자발적으로 참여하기 대문에 서비스 품질에 대한 보장이 어려움 보안에 대한 보장이 어려움 노드의 갯수에 따라 성능이 좌우 |
Event-bus | 새로운 Publishers와 Subscribers 및 연결의 추가가 수월 고도로 분산화된 Application에 효과적 | 모든 message가 동일한 event bus를 통해 전달되기 때문에 확장성 문제가 발생 할 수 있음 |
MVC | 동일한 model에 대해 여러개의 view를 만들 수 있으며, Runtime에 동적으로 연결/해제 가능 | 복잡성을 증가시키며, 사용자의 행동에 대한 불필요한 업데이트가 많이 발생 가능 |
BlackBoard | 새로운 Application을 쉽게 추가할 수 있음 데이터 공간의 구조를 쉽게 확장 가능 | 모든 Application이 영향을 받기 때문에 data 공간의 구조를 변경하기가 어려움 동기화 및 접근 제어가 필요 |
Interpreter | 매우 동적인 설계 가능 최종 사용자가 프로그래밍하기 좋음 Interpreter Program을 쉽게 교체 할 수 있기 때문에 유연성이 향상 | Interpreter 언어는 일반적으로 Compile 언어보다 느리기 때문에 성능 문제가 발생 할 수 있음 |