소프트웨어 아키텍처
1. 개념
외부에서 인식할 수 있는 특성이 담긴 소프트웨어의 골격이 되는 기본 구조
시스템 전체에 대한 큰 밑그림
2. 특징
- 개발할 소프트웨어에 대한 전체적인 구조를 다룸
- 소프트웨어를 이루고 있는 여러 구성 요소 (서브 시스템, 컴포넌트)를 다룸
- 구성 요소들이 인터페이스를 통해서 어떻게 상호작용하는지를 정의
- 세부 내용 보다는 중요한 부분을 다룸
- 시스템 설계와 개발 시 적용되는 원칙과 지침이 있어야 함
3. 아키텍처 설계 시 고려사항
- 모든 이해관계자의 이해를 도울 수 있는 의사소통 도구로 활용할 수 있어야 함
- 개발 비용, 기간, 조직의 역량 등의 제약 사항을 정의해야 함
- 시스템 품질 속성(성능성, 사용성, 보안성, 안전성, 검증성, 변경성 등)의 우선순위를 결정해야 함
- 소프트웨어 구성 요소를 표준화하고 패턴화하여 재사용 할 수 있게 설계해야 함
4. 아키텍처 모델의 분류
1) 데이터 중심형 모델
- 주요 데이터가 단일 중앙 저장소에서 중앙 관리되는 형태
- 모든 서브 시스템은 저장소에 저장된 공유 데이터에 접근하여 정보를 저장, 검색, 변경함
- 서브 시스템들은 각각 독립적이고 중앙 저장소를 이용해서 상호 대화를 함
※ 장점
- 데이터를 모순되지 않고 일관성 있게 관리
- 새로운 서브 시스템을 추가하기 쉬움
※ 단점
- 저장소가 병목 현상을 일으킬 수 있음
- 저장소를 변경하면 서브 시스템에 영향을 줌
2) 클라이언트-서버 모델
- 네트웨크를 이용하는 분산 시스템 형태의 모델
- 데이터와 처리 기능을 클라이언트와 서버에 분할하여 사용
3) 계층 모델
- 여러 가지 기능을 몇 개의 계층으로 나누어 배치
- 계층 모델 형태로 설계할 때는 상호작용하는 계층 간의 프로토콜을 정의해야 함
- 계층 간의 역할 분담을 명확히 하여 각 계층을 필요에 따라 쉽게 변경할 수 있음
4) MVC(Model-View-Controller) 모델
- 시스템을 모델, 뷰, 컨트롤러로 나누어서 구성하는 형태
- 모델 시스템 : 도메인의 지식을 저장(데이터베이스)
- 뷰 시스템 : 사용자에게 보여주는 모듈
- 제어 시스템 : 뷰와 모델 사이의 전달자 역할
※ 장점
- 각각의 서브 시스템이 독립적이므로 변경에 대한 영향을 덜 미침
※ 단점
- 기본 기능 설계로 인한 클래스 수의 증가로 복잡도가 증가할 수 있음
- 속도가 중요한 프로젝트에는 적합하지 않을 수 있음
5) 데이터 흐름 모델
- 파이프 필터 구조
- 필터에 해당되는 서브 시스템이 하나의 데이터를 입력으로 받아 처리한 후
그 결과를 다음 서브 시스템으로 넘겨주는 과정을 반복
- 데이터를 변환하는 시스템에서 주로 사용
- 필터 또는 파이프 단위로 나누어 개발할 수 있으므로 동시 개발이 가능함