Software Architecture Pattern
References
소프트웨어 아키텍처가 프로젝트의 성공에 중요한 13가지 이유
- 아키텍처는 시스템의 구동 품질 속성을 억제하거나 활성화합니다.
- 아키텍처에서 내린 결정을 통해 시스템이 발전함에 따라 변경 사항을 추론하고 관리할 수 있습니다.
- 아키텍처 분석을 통해 시스템 품질을 조기에 예측할 수 있습니다.
- 문서화된 아키텍처는 이해 관계자 간의 의사 소통을 향상시킵니다.
- 아키텍처는 가장 초기에 가장 기본적이고 가장 변경하기 어려운 설계 결정의 전달자입니다.
- 아키텍처는 후속 구현에 대한 일련의 제약 조건을 정의합니다.
- 아키텍처는 조직의 구조를 결정하거나 그 반대의 경우도 마찬가지입니다.
- 아키텍처는 진화적 프로토타이핑의 기초를 제공할 수 있습니다.
- 아키텍처는 건축가와 프로젝트 관리자가 비용과 일정에 대해 추론할 수 있도록 하는 핵심 아티팩트입니다.
- 아키텍처는 제품 라인의 핵심을 형성하는 양도 가능하고 재사용 가능한 모델로 생성될 수 있습니다.
- 아키텍처 기반 개발은 단순히 구성 요소를 만드는 것보다 구성 요소의 조립에 주의를 집중합니다.
- 설계 대안을 제한함으로써 아키텍처는 개발자의 창의성을 전달하여 설계 및 시스템 복잡성을 줄입니다.
- 아키텍처는 새로운 팀원을 교육하기 위한 기반이 될 수 있습니다.
10가지 소프트웨어 아키텍처 패턴
- 계층화 패턴 (Layered pattern)
- 클라이언트-서버 패턴 (Client-server pattern)
- 마스터-슬레이브 패턴 (Master-slave pattern)
- 파이프-필터 패턴 (Pipe-filter pattern)
- 브로커 패턴 (Broker pattern)
- 피어 투 피어 패턴 (Peer-to-peer pattern)
- 이벤트-버스 패턴 (Event-bus pattern)
- 모델-뷰-컨트롤러 패턴 (Model-view-controller pattern)
- 블랙보드 패턴 (Blackboard pattern)
- 인터프리터 패턴 (Interpreter pattern)
1. 계층화 패턴 (Layered pattern)
계층화 패턴에서 흔히 볼 수 있는 4개의 계층은 다음과 같다.
- 프레젠테이션 계층 ( UI 계층 이라고도 함 )
- 애플리케이션 계층 ( 서비스 계층 이라고도 함 )
- 비즈니스 논리 계층 ( 도메인 계층 이라고도 함 )
- 데이터 액세스 계층 ( 지속성 계층 이라고도 함 )
(1) 일반 데스크탑 애플리케이션
(2) 전자 상거래 웹 애플리케이션
2. 클라이언트-서버 패턴 (Client-server pattern)
흔히 사용되는 패턴입니다. 서버와 여러 클라이언트가 존재할 수 있습니다.
서버는 여러 클라이언트에 서비스를 제공합니다.
- 클라이언트는 서버에 서비스 요청
- 서버는 클라이언트에 서비스 제공
- 서버는 클라이언트 요청을 계속 수신
3. 마스터-슬레이브 패턴 (Master-slave pattern)
서비스 주체가 Master와 Slave로 구성됩니다.
마스터 컴포넌트는 슬래이브 컴포넌트간에 작업을 분배하고 슬래이가 반환한 결과로부터 최종 결과를 계산합니다.
4. 파이프-필터 패턴 (Pipe-filter pattern)
데이터스트림을 생성하고 가공하는 시스템을 구성하는데 사용할 수 있습니다.
각 단계는 필터 구성 요소로 구분되고 처리 데이터는 파이프를 통해 전달됩니다.
5. 브로커 패턴 (Broker pattern)
분리된 구성 요소가 있는 분산 시스템을 구성하는데 사용됩니다.
원격 서비스 호출을 통해 서로 상호작용할 수 있습니다.
브로커 구성 요소는 구성 요소간의 통신을 담당합니다.
(1) Apache ActiveMQ
(2) Apache Kafka
(3) RabbitMQ
6. 피어 투 피어 패턴 (Peer-to-peer pattern)
개별 구성요소는 피어로 표현하며, 각 피어는 다른 피어에게 서비스를 요청하는 클라이언트와
다른 피어에게 서비스를 제공하는 서버역할을 모두 할 수 있습니다.
(1) 파일 공유 네트워크(Gnutella)
(2) 블록체인 기반 상품
7. 이벤트-버스 패턴 (Event-bus pattern)
이벤트 소스, 이벤트 리스터, 채널 및 이벤트 버스 4가지 구성요소로 구성됩니다.
소스는 이벤트 버스의 특정 채널에 메시지를 게시합니다.
청취자는 특정 채널을 구독합니다.
리스너트 이전에 구독한 채널에 게시된 메시지에 대한 알림을 받습니다.
8. 모델-뷰-컨트롤러 패턴 (Model-view-controller pattern)
MVC 패턴으로 불리며 대화형 애플리케이션을 구성하는데 사용됩니다.
- Model : 핵심 기능 및 데이터
- View : 사용자에게 정보를 표시
- Controller : 사용자의 입력을 처리
(1) 웹 애플리케이션을 위한 아키텍처로 사용
9. 블랙보드 패턴 (Blackboard pattern)
이 패턴은 솔루션이 결정되지 않은 문제에 유용합니다.
- blackboard : 솔루션 공간의 객체를 포함하는 구조화된 전역 메모리
- 지식 소스 : 고유한 표현이 있는 특수 모듈
- 제어 구성 요소 : 모듈을 선택하고 구성 및 실행합니다.
10. 인터프리터 패턴 (Interpreter pattern)
이 패턴은 전용 언어로 작성된 프로그램을 해석하는 구성 요소를 설계하는데 사용됩니다.
기본 아이디어는 언어의 각 기호에 대한 클래스를 구성하는것입니다.
(1) SQL과 같은 데이터베이스 쿼리 언어
(2) 통신 프로토콜에 사용