Software Architecture Pattern

References

소프트웨어 아키텍처가 프로젝트의 성공에 중요한 13가지 이유

  1. 아키텍처는 시스템의 구동 품질 속성을 억제하거나 활성화합니다.
  2. 아키텍처에서 내린 결정을 통해 시스템이 발전함에 따라 변경 사항을 추론하고 관리할 수 있습니다.
  3. 아키텍처 분석을 통해 시스템 품질을 조기에 예측할 수 있습니다.
  4. 문서화된 아키텍처는 이해 관계자 간의 의사 소통을 향상시킵니다.
  5. 아키텍처는 가장 초기에 가장 기본적이고 가장 변경하기 어려운 설계 결정의 전달자입니다.
  6. 아키텍처는 후속 구현에 대한 일련의 제약 조건을 정의합니다.
  7. 아키텍처는 조직의 구조를 결정하거나 그 반대의 경우도 마찬가지입니다.
  8. 아키텍처는 진화적 프로토타이핑의 기초를 제공할 수 있습니다.
  9. 아키텍처는 건축가와 프로젝트 관리자가 비용과 일정에 대해 추론할 수 있도록 하는 핵심 아티팩트입니다.
  10. 아키텍처는 제품 라인의 핵심을 형성하는 양도 가능하고 재사용 가능한 모델로 생성될 수 있습니다.
  11. 아키텍처 기반 개발은 단순히 구성 요소를 만드는 것보다 구성 요소의 조립에 주의를 집중합니다.
  12. 설계 대안을 제한함으로써 아키텍처는 개발자의 창의성을 전달하여 설계 및 시스템 복잡성을 줄입니다.
  13. 아키텍처는 새로운 팀원을 교육하기 위한 기반이 될 수 있습니다.

10가지 소프트웨어 아키텍처 패턴

  1. 계층화 패턴 (Layered pattern)
  2. 클라이언트-서버 패턴 (Client-server pattern)
  3. 마스터-슬레이브 패턴 (Master-slave pattern)
  4. 파이프-필터 패턴 (Pipe-filter pattern)
  5. 브로커 패턴 (Broker pattern)
  6. 피어 투 피어 패턴 (Peer-to-peer pattern)
  7. 이벤트-버스 패턴 (Event-bus pattern)
  8. 모델-뷰-컨트롤러 패턴 (Model-view-controller pattern)
  9. 블랙보드 패턴 (Blackboard pattern)
  10. 인터프리터 패턴 (Interpreter pattern)

1. 계층화 패턴 (Layered pattern)

계층화 패턴에서 흔히 볼 수 있는 4개의 계층은 다음과 같다.

  • 프레젠테이션 계층 ( UI 계층 이라고도 함 )
  • 애플리케이션 계층 ( 서비스 계층 이라고도 함 )
  • 비즈니스 논리 계층 ( 도메인 계층 이라고도 함 )
  • 데이터 액세스 계층 ( 지속성 계층 이라고도 함 )

(1) 일반 데스크탑 애플리케이션
(2) 전자 상거래 웹 애플리케이션

2. 클라이언트-서버 패턴 (Client-server pattern)

흔히 사용되는 패턴입니다. 서버와 여러 클라이언트가 존재할 수 있습니다. 서버는 여러 클라이언트에 서비스를 제공합니다.

  • 클라이언트는 서버에 서비스 요청
  • 서버는 클라이언트에 서비스 제공
  • 서버는 클라이언트 요청을 계속 수신

3. 마스터-슬레이브 패턴 (Master-slave pattern)

서비스 주체가 Master와 Slave로 구성됩니다. 마스터 컴포넌트는 슬래이브 컴포넌트간에 작업을 분배하고 슬래이가 반환한 결과로부터 최종 결과를 계산합니다.

(1) 데이터베이스 복제

4. 파이프-필터 패턴 (Pipe-filter pattern)

데이터스트림을 생성하고 가공하는 시스템을 구성하는데 사용할 수 있습니다. 각 단계는 필터 구성 요소로 구분되고 처리 데이터는 파이프를 통해 전달됩니다.

(1) 컴파일러

5. 브로커 패턴 (Broker pattern)

분리된 구성 요소가 있는 분산 시스템을 구성하는데 사용됩니다. 원격 서비스 호출을 통해 서로 상호작용할 수 있습니다. 브로커 구성 요소는 구성 요소간의 통신을 담당합니다.

(1) Apache ActiveMQ
(2) Apache Kafka
(3) RabbitMQ

6. 피어 투 피어 패턴 (Peer-to-peer pattern)

개별 구성요소는 피어로 표현하며, 각 피어는 다른 피어에게 서비스를 요청하는 클라이언트와 다른 피어에게 서비스를 제공하는 서버역할을 모두 할 수 있습니다.

(1) 파일 공유 네트워크(Gnutella)
(2) 블록체인 기반 상품

7. 이벤트-버스 패턴 (Event-bus pattern)

이벤트 소스, 이벤트 리스터, 채널 및 이벤트 버스 4가지 구성요소로 구성됩니다. 소스는 이벤트 버스의 특정 채널에 메시지를 게시합니다. 청취자는 특정 채널을 구독합니다. 리스너트 이전에 구독한 채널에 게시된 메시지에 대한 알림을 받습니다.

(1) 안드로이드 개발
(2) 알림서비스

8. 모델-뷰-컨트롤러 패턴 (Model-view-controller pattern)

MVC 패턴으로 불리며 대화형 애플리케이션을 구성하는데 사용됩니다.

  • Model : 핵심 기능 및 데이터
  • View : 사용자에게 정보를 표시
  • Controller : 사용자의 입력을 처리

(1) 웹 애플리케이션을 위한 아키텍처로 사용

9. 블랙보드 패턴 (Blackboard pattern)

이 패턴은 솔루션이 결정되지 않은 문제에 유용합니다.

  • blackboard : 솔루션 공간의 객체를 포함하는 구조화된 전역 메모리
  • 지식 소스 : 고유한 표현이 있는 특수 모듈
  • 제어 구성 요소 : 모듈을 선택하고 구성 및 실행합니다.

(1) 음성 인식
(2) 차량 식별 및 추적

10. 인터프리터 패턴 (Interpreter pattern)

이 패턴은 전용 언어로 작성된 프로그램을 해석하는 구성 요소를 설계하는데 사용됩니다. 기본 아이디어는 언어의 각 기호에 대한 클래스를 구성하는것입니다.

(1) SQL과 같은 데이터베이스 쿼리 언어
(2) 통신 프로토콜에 사용