CS/정보처리산업기사

공통 모듈 설계 - 소프트웨어 아키텍처

jjh0119 2025. 3. 21. 16:56

01. 소프트웨어 아키텍처

1) 개념

  • 소프트웨어 이키텍처를 개발하고자 하는 소프트웨어의 사전작을통하여 소프트웨어 개발을 쉽게 하도록 기본 틀을 만드는 것으로, 복잡한 개발을 체계적으로 접근하기 위한 밑그림이라고 할 수 있다.
  • 소프트웨어 아키텍처는 시스템의 구성요소와 구성요소 간의 상호 관계 구조이다.
  • 외부에서 인식할 수 있는 특성이 담긴 소프트웨어의 골격이 되는 기본 구조이다.
  • 소프트웨어의 구성요소들 사이에서 유기적 관계를 표현하고 소프트웨어의 설계와 업그레이드를 통제하는 지침과 원칙을 의미한다.

2) 소프트웨어 아키텍처의 품질 속성

  • 품질속성은 시스템 품질 속성, 비즈니스 품질 속성, 아키텍처 품질 속성으로 분류한다.
  • 시스템 품질 속성: 가용성, 변경 용이성, 성능, 보안성, 사용 편의성, 시험 용이성
  • 비즈니스 품질 속성
  • 아키텍처 품질 속성 : 개념적 무결성, 정확성과 안정성, 개발 용이성

02. 소프트웨어 아키텍처 패턴(스타일)

1) 패턴

  • 소프트웨어 시스템에 대한 지식을 표현하고 공유하고 재사용하는 방법

2) 아키텍처 패턴

  • 서로 다른 시스템과 환경에서 시도되고 시험된 바람직한 사례를 양식화하고 추상화한 기술
  • 설명 기술과 다이어그램을 섞어서 사용하는 표준방법으로 기술 가능

3) 아키텍처 패턴의 종류

(1) 계층화(Layer) 패턴**

  • n-티어 패턴으로도 불림
  • 하위 모듈을 그룹으로 나눌 수 있는 구조화된 프로그램에서 사용
  • 각 서브 시스템이 하나의 계층이 되고 하위층이 제공하는 서비스를 상위층의 서브 시스템이 이용할 수 있는 구조
  • ex) E-commerce 웹 애플리케이션

(2) 클라이언트-서버(Client-Server) 패턴

  • 클라이언트 : 서버에 서비스를 요청하는 객체
  • 서버 : 클라이언트에 서비스를 제공하는 객체
  • C-S 패턴은 다수의 클라이언트와 하나의 서버로 구성 서버는 클라이언트에 서비스를 제공하며 데이터를 관리하는 역할
  • ex) 일반적인 웹 프로그램

(3) 마스터 슬레이브(Master-Slave)패턴

  • 마스터 컴포넌트가 동등한 구조의 슬레이브 컴포넌트로 작업을 분산하고, 슬레이브가 결과값을 반환하면 최종 결과값을 계산하는 구조
  • ex) 컴퓨터 시스템에서 버스와 연결된 주변장치

(4) 파이프-필터(Pipe-Filter)패턴

  • 데이터 스트림을 생성하고 처리하는 시스템에서 사용
  • 필터 컴포넌트에서 각 처리과정을 실행, 처리된 데이터는 파이프를 통해 전송
  • 파이프는 버퍼링 또는 동기화 목적으로도 사용될 수 있음
  • ex) 컴파일러의 어휘분석, 파싱, 의미분석

(5) 브로커(Broker)패턴

  • 분리된 컴포넌트로 구성된 분산 시스템에서 사용되는 패턴
  • 각 컴포넌트들은 원격 서비스를 통해 상호작용할 수 있으며 브로커 컴포넌트가 컴포넌트 간의 통신을 조절함
  • 서버가 자신의 서비스를 브로커에 넘기고 클라이언트가 브로커에 서비스를 요청하면 브로커가 자신의 레지스트리에 있는 적합한 서비스로 리디렉션 하는 방식으로 작동
  • ex) 메시지 브로커 소프트웨어

(6) 피어 투 피어(Peer to Peer)패턴

  • 피어라 부르는 각 컴포넌트 간에 서비스를 주고 받는 패턴
  • 피어는 클라이언트로서 각 피어에게 서비스를 요청할 수 있고, 서버로서 각 피어에게 서비스를 제공할 수도 있음
  • 피어 객체 하나가 클라이언트, 서버의 역할을 모두 수행하는 구조
  • ex)p2p

(7) 이벤트-버스(Event-Bus)패턴

  • 이벤트 소스, 이벤트 리스너, 채널, 이벤트 버스 4가지 컴포넌트를 갖는 패턴
  • 이벤트 소스 : 이벤트 버스를 통해 특정 채널로 메시지를 발행
  • 이벤트 리스너 : 특정 채널에서 메시지를 구독
  • 리스너가 구독한 채널에 소스가 서비스를 제공하면 채널이 리스너에게 서비스를 제공해 주는 구조
    -ex)안드로이드 개발, 알림 서비스

(8) 모델 뷰 컨트롤러(MVC)패턴

  • 모델 : 도메인의 기능과 자료를 저장, 보관
  • 뷰 : 사용자에게 결과를 표시(하나 이상 정의 가능)
  • 컨트롤러 : 사용자로부터 입력과 상호작용을 처리
  • 3개의 각 컴포넌트는 각자의 역할을 갖고 사용자에게 서비스를 제공
  • 기능마다 컴포넌트를 나눈 이유는 사용자 인터페이스(뷰)가 모델과 컨트롤러보다 더욱 자주 변경되기 때문
  • 자료의 저장, 제어기능과 표현 기능을 분리하여 재사용을 증진시키기 위함
  • ex) 일반적인 웹 어플리케이션 설계 아키텍처

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

  • 명확히 정의된 해결 전략이 알려지지 않은 문제에 대해서 유용한 패턴
  • 부분적인 해법, 대략적인 해법을 수립하기 위한 서브시스템의 지식을 조합하는 방법
  • 블랙보드 : 중앙 데이터 저장소
  • 지식 소스 : 특수한 문제를 해결하는 독립 서브 시스템
  • 제어 컴포넌트 : 변경을 모니터링하고, 다음 동작을 결정
  • 모든 컴포넌트는 블랙보드에 접근하여 새로운 데이터 객체를 생성할 수 있음
  • 공유 데이터 구조 위에서 종합적으로 동작하는 독립적인 프로그램을 모은 방법
  • 각 프로그램은 전체 중 특정한 부분을 해결하기 위해 특수화 되어있음
  • 제어 컴포넌트는 현재 처리과정을 평가하여 특수화된 프로그램을 조율
  • ex) 음성 인식, 차량 식별 및 추적

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

  • 특정 언어로 작성된 프로그램을 해석하는 컴포넌트를 설계할 때 사용되는 패턴
  • ex)DB 쿼리 언어, 통신 프로토콜 정의 언어