소프트웨어 아키텍처
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)
- 멀티미디어 프로토콜
'소프트웨어' 카테고리의 다른 글
[소프트웨어] 모듈의 독립성 평가, 코드 종류 (1) | 2024.01.15 |
---|---|
[소프트웨어] 객체 지향의 개요, 객체지향 방법론의 종류 (1) | 2024.01.15 |
[소프트웨어] 요구사항 분석, UI 프로토타입 (0) | 2024.01.15 |
[소프트웨어] UI의 특징, UI 설계 도구, UI 요구사항 확인 (0) | 2024.01.15 |
[소프트웨어] UML관계, UML다이어그램 (1) | 2024.01.15 |