본문 바로가기
소프트웨어

[소프트웨어] 소프트웨어 아키텍처, 아키텍처 패턴

by 정공자씨 2024. 1. 15.

 


소프트웨어 아키텍처


1. 소프트웨어 아키텍처의 의미

  • 소프트웨어의 골격이 되는 기본구조
  • 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조
  • 소프트웨어 개발 시 적용되는 원칙과 지침이며,
  • 이해 관계자들의 의사소통 도구로 활용
  • 소프트웨어 아키텍처의 설계는
    • 사용자의 기능적 요구사항, 비기능적 요구사항으로 나타난 제약조건등을 반영하고 구현하는 방법을 찾는 해결과정
  • 애플리케이션의 분할 방법과 분할된 모듈에 할당될 기능, 모듈간의 인터페이스등을 결정
  • 설계 기본 원리
    • 모듈화, 추상화, 단계적 분해, 정보은닉

 

 

2. 설계의 기본 원리

모듈화
  • 소프트웨어 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 작업이 용이하도록
  • 시스템의 기능들을 모듈 단위로 나누는 작업을 의미
  • 모듈의 크기가 작으면 : 모듈 간의 통합 비용 발생
  • 모듈의  크기가 크면 : 통합 비용은 적게 들지만, 모듈당 개발비 용이 증가
추상화
  • 문제의 전체적이고 포괄적인 개념을 설계한 후, 차례로 세분화하여 구체화시키는 작업
  • 이렇게 세분화 한 것이 클래스
  • 불필요한 부분을 생략하고 필요한 부분만을 강조화하여 모델화
  • 추상화의 종류
    • 과정 추상화
    • 데이터 추상화
    • 제어 추상화
단계적 분해
  • 하향식 설계 전략으로
  • 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화시키는 분할 기법
정보 은닉
  • 한 모듈 내에 포함된 절차와 자료들의 정보가 감추어져 있어
  • 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법

 

 

 

 

 


아키텍처 패턴(아키텍처 스타일, 표준 아키텍처)


1. 아키텍처 패턴이란?

  • 소프트웨어 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미
  • 소프트웨어 시스템의 구조를 구성하기 위한 기본적인 윤곽을 제시
  • 아키텍처 패턴에는 서브시스템들과 그 역할이 정의되어 있으며, 서브시스템 사이의 관계와 여러 규칙/지침이 포함
  • 아키텍처 패턴은 시행착오를 줄여 개발시간을 단축시키고 고품질의 소프트웨어를 생산할 수 있음
  • 검증된 구조로 개발하기 때문에 안정적인 개발이 가능 
  • 이해관계자들이 공통된 아키텍처를 공유할 수 있어서 의사소통이 간편 
  • 시스템의 구조를 이해하는 것이 쉬워 개발에 참여하지 않은 사람도 손쉽게 유지보수를 수행할 수 있음
  • 시스템의 특성을 개발 전에 예측하는 것이 가능

 

 

2. 아키텍처 패턴의 종류

 

1) 레이어 패턴 (layers pattern)

  • 시스템을 계층으로 구분하여 구성하는 방법
  • 각각의 서브시스템들이 계층구조를 이루며,
    • 상위 계층은 하위 계층에 대한 서비스 제공자가 되고
    • 하위계층은 상위계층의 클라이언트가 됨
  • 서로 마주보는 두 개의 계층 사이에서만 상호작용이 이뤄지므로,
    • 변경사항 적용 시에도 두 개 계층에만 영향을 미침
  • 레이어 패턴은 특정계층만을 교체해 시스템을 개선하는 것이 가능
  • (활용 예)
    • OSI참조모델
    • 스프레드 시트 시스템

 


 

 

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

  • 하나의 서버다수의 클라이언트, 두 부분으로 구성
  • 클라이언트가
    • 서버에 서비스를 요청하면
  • 서버는
    • 클라이언트에게 적절한 서비스를 제공
  • 서버계속 클라이언트로부터의 요청을 대기하는 상태를 유지
  • 클라이언트나 서버는
    • 요청과 응답을 받기 위해 동기화되는 경우를 제외하고는
    • 서로 독립적
  • (활용 예)
    • 이메일
    • 문서공유 애플리케이션

 


 

 

3) 마스터 슬레이브 패턴 (master slave pattern)

  • 마스터 컴포넌트
    • 슬레이브 컴포넌트들로 작업을 분산시킨 후
  • 슬레이브
    • 처리한 결과값을 다시 마스터 컴포넌트에 반환하는 작업을 수행하는 패턴
  • (활용 예)
    • 병렬 컴퓨팅  
    • 장애허용 시스템 : 특정 슬래이브가 문제가 되더라도, 다른 슬래이브에게 작업을 주면 되기 때문에 괜찮음

 


 

 

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

 

  • 데이터 스트림(데이터를 연속적으로 내보냄)을 생성하고 처리하는 각 과정은
    • 필터 (filter) 컴포넌트에서 캡슐화하여 이루어지고
    • 즉, 필터가 입력 데이터를 연속적으로 받아서 처리하고
  • 처리한 데이터는
    • 파이프(pipe)라인을 통해 다른 시스템으로 보냄
  • 필터 컴포넌트
    • 재사용성이 좋고, 추가가 쉬워 확장이 용이
    • 필터 컴포넌트들을 재배치하여 다양한 파이프라인 구축이 가능
    • 즉, 비슷한 필터들을 다시 재구성 하여, 또 다른 파이프라인 구축
  • (활용 예)
    • 데이터 스트리밍
    • 데이터 변환
    • 버퍼링
    • 동기화
    • UNIX shell

 


 

 

5) 모델-뷰-콘트롤러 패턴(model-view-controller pattern)

 

  • 서브시스템을 3개 부분으로 구조화하는 패턴
    • 모델 : 데이터와 비즈니스 로직을 관리
    • 뷰 : 레이아웃과 화면을 처리하여 사용자에게 정보를 표시
    • 컨트롤러 : 뷰로부터 받은 명령을 처리(장바구니 요청하면, 컨트롤러에서 처리)
  • 여러 개 뷰를 만들 수 있으므로
    • 한 개 모델에 대해 여러 개 뷰를 필요로 하는 대화형 애플리케이션에 적합
  •  각 부분은 별도의 컴포넌트로 분리되어 있으므로
    • 서로 영향을 받지 않고 개발작업을 수행 가능
  • (활용 예)
    • 쇼핑몰

 


 

 

6)  이벤트-버스 패턴(event-bus pattern) 

 

  • 4가지 컴포넌트로 구성되는 패턴
    • 이벤트 소스 (event source) : 이벤트를 생성
    • 채널 (channel) : 이벤트 통로
    • 이벤트 리스너 (event listener) :  이벤트 실행
  • (활용 예)
    • 안드로이드
    • 알림 서비스 등

 


 

 

7)  브로커 패턴(broker pattern) 

  • 사용자가 원하는 서비스와 특성을 브로커에 요청하면
  • 브로커 컴포넌트가
    • 요청에 맞는 컴포넌트와 사용자를 연결
  • 원격서비스 호출에 응답하는 컴포넌트들이 여러 개 있을 때 적합한 패턴
  • (활용 예)
    • 분산시스템에 사용

 


 

 

8)  블랙보드 패턴(blankboard pattern)

  • 이 패턴은 해결 전략이 명확하지 않은 문제 처리에 유용
  • 모든 컴포넌트들이 공유 데이터 저장소블랙보드 컴포넌트에 접근이 가능한 형태로
  • 컴포넌트들은
    • 검색을 통해 블랙보드에서 원하는 데이터를 찾을 수 있음
  • 컴포넌트는
    • 블랙보드에 추가되는 새로운 데이터 객체를 생성할 수 있음
  • 컴포넌트는
    • 블랙보드에서 특정 종류의 데이터를 찾으며, 
    • 기존의 지식 소스와의 패턴 매칭으로 데이터를 찾음
  •  (활용 예)
    • 음성 인식
    • 차량 식별
    • 신호 해석 등

 


 

 

9)  인터프리터 패턴(interpreter pattern) 

  • 특정 언어로 작성된 프로그램을 해석하는 컴포넌트를 설계할 때 사용
  • 주로 특정 언어로 작성된 문장 혹은 표현식이라고 하는 프로그램의 각 라인을 수행하는 방법을 지정하고,
  • 언어의 각 기호에 대해 클래스를 생성
  • (활용 예)
    • sql과 같은 데이터베이스 쿼리언어

 


 

 

10)  피어 투 피어 패턴(peer to peer pattern)

  • 피어를 하나의 컴포넌트로 간주하며,
  • 각 피어는
    • 서비스를 호출하는 클라이언트가 될 수도
    • 서비스를 제공하는 서버가 될 수 도 있는 패턴
    • 즉, 클라이언트면서 서버도 될 수 있음
  • 따라서 보안에 취약하고, 속도에 영향을 미침
  • (활용 예)
    • 파일 공유 네트워크(P2P)
    • 멀티미디어 프로토콜