소프트웨어 아키텍처
소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체
소프트웨어 아키텍처를 설계한다는 것은 소프트웨어 개발의 상위 설계의 개념입니다.
1. 소프트웨어 아키텍처 설계의 기본 원리
1.1 모듈화 - Modularity
시스템의 기능들을 모듈 단위로 나누는 것
- 장점
- 소프트웨어의 성능 향상
- 시스템의 수정 및 재사용 용이
- 유지관리 용이
- 단점
- 모듈의 크기를 너무 작게 나누면 모듈 간의 통합 비용이 많이 든다.
- 모듈의 크기를 너무 크게 나누면 모듈 하나의 개발 비용이 많이 든다.
1.2 추상화 - Abstraction
문제를 전체적이고 포괄적인 개념을 설계 → 세분화하여 구체화시켜나가는 것
- 유형
- 과정 추상화 - 전반적인 흐름만을 파악할 수 있게 설계하는 유형
- 데이터 추상화 - 데이터의 구조를 표현하여 설계하는 유형
- 제어 추상화 - 이벤트등에 대한 흐름을 표현하여 설계하는 유형
1.3단 계적 분해 - Stepwise Refinement
문제를 상위의 중요 개념부터 → 하위 개념으로 분할시켜 구체화하는 기법
- 특징
- Niklaus Wirth에 의해 제안된 하향식 설계 전략
- 포괄적인 기능부터 시작해 점자적으로 구체화 한다.
- 알고리즘, 자료구조등 구체적인 내용은 가능한 뒤로 미루어 진행
1.4 정보 은닉 - Information Hiding
모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근 또는 변경하지 못하도록 하는 기법
- 특징
- 정보은닉을 통해 모듈을 독립적으로 수행할 수 있다.
- 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않는다.
- 즉 수정, 시험, 유지보수가 용이하다.
2. 소프트웨어 아키텍처의 품질 속성
소프트웨어 아키텍처가 좋은 품질로 설계되었는지 확인하기 위해 평가 요소를 구체화한 것
- 종류
- 시스템 측면 - 성능, 보안, 가용성, 기능성, 사용성, 변경 용이성, 확장성 등
- 비즈니스 측면 - 시장 적시성, 비용과 혜택, 예상 시스템 수명, 목표 시장, 공개 일정 등
- 아키텍처 측면 - 개념적 무결설, 정확성, 완결성, 구축 가능성, 변경성, 시험성 등
3. 소프트웨어 아키텍처의 설계 과정
- 설계 목표 설정
- 시스템 타입 결정
- 아키텍처 패턴 적용
- 서브시스템 구체화
- 검토
4. 협약에 의한 설계
컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
- 명세에 포함될 조건
- 선행 조건 - 오퍼레이션 호출 전 참이 되어야 할 조건
- 결과 조건 - 오퍼레이션 호출 후 만족되어야 할 조건
- 불변 조건 - 오퍼레이션 실행 중 항상 만족되어야 할 조건
아키텍처 패턴
아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
- 주요 아키텍처 패턴
- 레이어 패턴 (Layers Pattern)
- 클라이언트 - 서버 패턴 (Client - Server Pattern)
- 파이프 - 필터 패턴 (Pipe - Filter Pattern)
- 모델 - 뷰 - 컨트롤러 패턴 ( MVC:Model - View - Controller Pattern)
- 마스터 - 슬레이브 패턴 (Master - Slave Pattern)
- 중개인 패턴 (Broker Pattern)
- 피어 - 투 - 피어 패턴 (Peer - To - Peer Pattern)
- 이벤트 - 버스 패턴 (Event - Bus Pattern)
- 블랙보드 패턴 (Blackboard Pattern)
- 인터프리터 패턴 (Interpreter Pattern)
1. 레이어 패턴 - Layers Pattern
시스템을 계층으로 구분하여 구성하는 고전적인 방법의 패턴
- 하위 계층은 바로 위 계층의 서비스 제공자가 된다
- 상위 계층은 바로 아래 계층의 클라이언트가 된다.
- 대표적으로 OSI참조 모델이 있다.
2. 클라이언트-서버 패턴 - Client - Servier Pattern
하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
- 사용자가 클라이언트를 통해 서버에 요청
- 요청받은 서버는 클라이언트에 응답
- 클라이언트는 응답받은 데이터를 사용자에게 전달
3. 파이프 - 필터 패턴 - Pipe - Filter Pattern
데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴
- 앞 시스템의 결과물을 파이프를 통해 전달받고 처리한 후 다시 파이프를 통해 뒤 시스템으로 넘겨주는 방식
- 데이터 변환, 버퍼링, 동기화등에 주로 사용된다.
- 대표적으로 UNIX의 Shell이 있다.
4. 모델 - 뷰 - 컨트롤러 패턴 - Model - View - Controller Pattern
MVC이라 불리며, 모델, 뷰, 컨트롤러로 구조화하는 패턴
- 모델은 정보들을 보관하고 요청에 따라 정보를 제공해 주는 역할을 한다.
- 뷰는 사용자에게 필요한 정보를 모델로부터 받아 보여주는 역할을 한다.
- 컨트롤러는 사용자의 요청을 받아 뷰를 제어하고 모델에 데이터를 갱신하는 역할을 한다.
5. 마스터 - 슬레이브 패턴 - Master - Slave Pattern
슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업을 수행하는 패턴
- 장애 허용 시스템, 병렬 컴퓨팅 시스템에 주로 사용
6. 중개인 패턴 - Broker Pattern
사용자가 원하는 서비스를 브로커 컴포넌트에 요청하면 요청에 맞는 컴포넌트와 사용자를 연결해 주는 패턴
즉, 중계 역할을 하는 구조가 있는 패턴
7. 피어 - 투 - 피어 패턴 - Peer - To - Peer - Pattern
피어라 불리는 하나의 컴포넌트가 클라이언트 또는 서버가 될 수도 있는 패턴
즉, 요청과 응답을 둘 다 할 수도 있는 구조
8. 이벤트 - 버스 패턴 - Event - Bus Pattern
특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메세지를 받아 처리하는 패턴
9. 블랙보드 패턴 - Blackboard Pattern
모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴
- 음성인식, 차량 식별, 신호 해석 시스템에 주로 사용
10. 인터프리터 패턴 - Interpreter Pattern
프로그램 코드의 각 라인을 수행하는 방법을 지정하고 기호마다 클래스를 갖도록 구성된 패턴
- 번역기, 컴파일러, 인터프리터 시스템에 주로 사용
Commnet