본문 바로가기
CS 지식/소프트웨어 공학

Architectural Pattern(아키텍처 패턴)과 스타일 종류

by 코딩하는 동현😎 2024. 12. 1.

Architectural Pattern/Style

  • 다양한 환경에서 시험되고 검증된 좋은 디자인 관행을 설명하는 스타일화된 설명
  • 사용될 때와 사용되지 않을 때에 대한 정보 포함
  • 예시: POSA 시리즈
    • MVC (Model-View-Controller)
    • Layered
    • Repository
    • Client-Server
    • Pipe & Filter

A Taxonomy(분류) of Architecture Styles


The Model-View-Controller (MVC) Pattern

  • 시스템 데이터를 기준으로 프리젠테이션과 상호작용을 분리함
  • 시스템은 상호작용하는 세 가지 논리적 구성 요소로 구조화됨
    • Model: 시스템 데이터와 그에 대한 연산 관리
    • View: 데이터를 사용자에게 어떻게 표시할지 정의하고 관리
    • Controller: 사용자 상호작용(예: 키 입력, 마우스 클릭 등)을 관리하고 이 상호작용을 View와 Model에 전달
  • 사용 시기
    • 데이터와 상호작용하는 방법이 여러 가지일 때 사용
    • 데이터와 상호작용 및 프리젠테이션 요구 사항이 불확실할 때 사용
  • 장점
    • 데이터는 그 표현과 독립적으로 변화 가능
    • 동일한 데이터를 다양한 방식으로 표시할 수 있으며, 하나의 표현에서 변경되면 다른 모든 표현에 반영됨
  • 단점
    • 데이터 모델과 상호작용이 간단할 경우 코드가 추가되거나 복잡해질 수 있음

The Layered Architecture Pattern

  • 시스템을 기능과 관련된 레이어로 구성
  • 각 레이어는 위의 레이어에 서비스를 제공하며, 가장 낮은 레이어는 시스템 전반에서 사용될 핵심 서비스를 나타냄
  • 사용 시기
    • 기존 시스템 위에 새로운 기능을 구축할 때
    • 여러 팀이 각자 책임지는 기능 레이어로 개발할 때
    • 다중 보안 계층이 필요할 때
  • 장점
    • 레이어를 교체할 수 있으며, 인터페이스만 유지하면 됨
    • 각 레이어에서 중복 기능(예: 인증)을 제공하여 시스템의 신뢰성을 높일 수 있음
  • 단점
    • 레이어 간 명확한 구분을 제공하는 것이 어려움
    • 고수준 레이어가 하위 레이어와 직접 상호작용해야 할 수도 있음
    • 여러 레벨의 서비스 요청 해석으로 성능에 문제가 생길 수 있음

The Repository Pattern

  • 시스템의 모든 데이터를 중앙 리포지토리에서 관리하며, 시스템의 모든 구성 요소가 이 리포지토리를 통해 상호작용함
  • 구성 요소는 서로 직접 상호작용하지 않음
  • 사용 시기
    • 대량의 데이터를 생성하고 이를 장기 보관해야 하는 시스템
    • 데이터 기반 시스템에서 리포지토리의 데이터가 특정 동작이나 도구를 트리거할 때
  • 장점
    • 구성 요소는 서로 독립적이고, 다른 구성 요소의 존재를 알 필요 없음
    • 한 구성 요소의 변경은 모든 구성 요소에 반영됨
    • 데이터를 일관되게 관리할 수 있음(예: 동시에 백업 수행)
  • 단점
    • 리포지토리는 시스템 전체에 영향을 미치는 단일 실패 지점이 됨
    • 리포지토리를 통해 모든 통신을 조직하는 데 비효율적일 수 있음
    • 리포지토리를 여러 컴퓨터에 분산시키는 것이 어려움

The Client-Server Pattern

  • Client-Server
    • 시스템의 기능을 서비스로 조직하며, 각 서비스는 별도의 서버에서 제공됨
    • 클라이언트는 이러한 서비스를 사용하는 사용자로, 서버에 접근하여 서비스를 이용함
  • 사용 시기
    • 공유 데이터베이스에서 데이터를 여러 위치에서 접근해야 할 때
    • 서버를 복제할 수 있어 시스템 부하가 가변적일 때
  • 장점
    • 서버를 네트워크를 통해 분산시킬 수 있음
    • 모든 클라이언트에게 일반적인 기능(예: 인쇄 서비스)을 제공할 수 있음
  • 단점
    • 각 서비스는 단일 실패 지점이 되어 서비스 거부 공격이나 서버 실패에 취약함
    • 성능은 네트워크와 시스템에 따라 달라지므로 예측 불가능할 수 있음
    • 서버가 다른 조직에 속할 경우 관리에 문제가 발생할 수 있음

The Pipe and Filter Pattern

  • Pipe and Filter
    • 시스템의 데이터 처리가 각 처리 구성 요소(필터)에서 하나의 데이터 변환을 수행하도록 조직됨
    • 데이터는 하나의 구성 요소에서 다른 구성 요소로 파이프처럼 흐름
  • 사용 시기
    • 배치 처리 및 트랜잭션 기반의 데이터 처리 응용 프로그램에서 사용됨
    • 입력이 여러 단계에서 처리되어 관련된 출력을 생성해야 할 때
  • 장점
    • 이해하기 쉽고 변환 재사용을 지원
    • 비즈니스 프로세스 구조와 맞는 워크플로 스타일
    • 변환을 추가하여 진화할 수 있음
    • 순차적 또는 동시 시스템으로 구현 가능
  • 단점
    • 데이터 전송 형식은 상호작용하는 변환들 간에 합의가 필요
    • 각 변환은 입력을 파싱하고 출력을 파싱해야 하므로 시스템 오버헤드가 증가할 수 있음

Application Architectures

  • 특정 요구 사항을 충족하는 시스템을 구성하고 조정할 수 있는 소프트웨어 시스템 유형에 대한 아키텍처
  • 비즈니스들이 공통점을 많이 가지므로, 그들의 애플리케이션 시스템도 공통 아키텍처를 가지며 이는 애플리케이션 요구 사항을 반영함
  • Reference Architecture로 발전 중

Reference Architecture by Microsoft

코드까지 동반된 아키텍처로 Specific하다.(ex .net)

  • Application Types
    • Data processing applications: 배치로 데이터를 처리하며 사용자 개입 없이 처리됨
    • Transaction processing applications: 사용자 요청을 처리하고 시스템 데이터베이스를 업데이트함
    • Event processing systems: 시스템 환경의 이벤트를 해석하여 시스템 동작을 결정하는 애플리케이션
    • Language processing systems: 사용자의 의도가 공식 언어로 지정되어 시스템이 이를 처리하고 해석함 (컴파일러)

Transaction Processing Systems

  • 사용자 요청을 데이터베이스에서 정보로 처리하거나 데이터베이스를 업데이트하는 시스템
  • 사용자는 서비스 요청을 비동기적으로 제출하고, 이 요청은 트랜잭션 관리자에 의해 처리됨
  • 트랜잭션: 목표를 달성하는 일련의 일관된 연산

Information Systems Architecture

  • Information systems: 일반적으로 레이어드 아키텍처로 조직됨
    • 트랜잭션 기반 시스템: 시스템과의 상호작용은 일반적으로 데이터베이스 트랜잭션을 포함함.

Web-Based Information Systems (분산 시스템)

  • Web-based systems: 웹 브라우저를 사용하여 사용자 인터페이스를 구현함
    • 예시: 전자상거래 시스템은 상품이나 서비스에 대한 전자 주문을 받고, 고객에게 배송함
    • 애플리케이션 특정 레이어: 사용자가 여러 아이템을 개별 트랜잭션으로 추가하고, 이를 한 번에 결제할 수 있는 '쇼핑 카트' 기능 포함
    • 웹 기반 시스템은 Muti-tier client-server(서버들의 티어) 아키텍처로 구현됨
      • Web server: 사용자 통신과 웹 브라우저를 이용한 사용자 인터페이스 구현
      • Application server: 애플리케이션 특정 로직 및 정보 저장 및 검색 요청 처리
      • Database server: 데이터베이스 간 정보 이동 및 트랜잭션 관리

Language Processing Systems

  • Language Processing Systems: 자연어 또는 인공 언어를 입력받아 그 언어의 다른 표현을 생성함
    • 인터프리터 포함, 언어 처리 명령을 수행함
    • Meta-case tools: 도구 설명, 방법 규칙 등을 처리하고 도구를 생성함

Compiler Components

  • Compiler components:
    • Lexical analyzer: 입력 언어 토큰을 내부 형식으로 변환
    • Symbol table: 번역되는 텍스트에 사용된 엔터티(변수, 클래스명 등) 정보를 저장
    • Syntax analyzer: 언어 구문을 검사
    • Syntax tree: 번역된 프로그램을 나타내는 내부 구조
    • Semantic analyzer: 구문 트리와 심볼 테이블 정보를 사용하여 의미적 정확성 검사
    • Code generator: 구문 트리를 순회하며 추상 기계 코드 생성

A Repository Architecture for a Language Processing System


A Pipe and Filter Architecture for Compilers

반응형

댓글