- 개발할 시스템의 타입은 분석, 모델링, 설계, 구현, 테스팅 거의 모든 개발 작업에 영향을 줌
- 소프트웨어 아키텍처를 설계할 때 시스템의 타입이 고려되어야 함
- 설계 방법과 아키텍처 스타일을 선택할 때 시스템의 타입이 영향을 줌
- 일반적으로 네 가지 타입으로 나눌 수 있음
대화형 시스템
- 대화형 (interactive) 시스템은 PC와 웹 애플리케이션이 널리 사용되면서 가장 보편적이 되었음
EX) 시스템을 사용하기 위해 먼저 로그인 링크를 클릭하면 시스템은 로그인 페이지를 보여줌
사용자가 아이디와 패스워드를 입력하면 시스템은 웰컴 페이지를 디스플레이 함 - 대화형 시스템의 상태를 파악하는 것은 곧 비즈니스 프로세스를 반영하는 것임
EX) 온라인 쇼핑몰 시스템
- 고객이 로그인하여 상품을 고르고 결제함
- 고객이 로그인 하지 않으면 결제할 수 없음
- 결제하는 동안 고객은 배송 주소와 결제 방법, 결제 정보를 제공해야 함
- 시스템이 비즈니스 프로세스를 통제하고 이 순서에 다르지 않는다면 고객이 오퍼레이션을 실행하지 못함 - 대화형 시스템의 모델링/설계
1) 액터가 구동시키는 비즈니스 프로세스를 나타내는 유즈케이스를 찾아내고 명세화
2) 시스템 안에 있는 객체들이 이를 위해 어떻게 협력하고 상호작용하는지 더 상세하게 모델링
3) 아키텍처는 유스케이스 단위로 구성되고 컴포넌트화 함
이벤트 중심 시스템
- 이벤트 중심 (event-driven) 시스템은 상태에 의존적이며 반응 동작을 보임
- 주로 임베디드 시스템에서 찾아볼 수 있음
* 임베디드 시스템 : 하드웨어와 소프트웨어로 구성된 시스템에 소프트웨어가 내장된 형태 - 소프트웨어는 장치에 의해 불규칙적으로 생성된 이벤트를 받아 처리하고 적절히 제어하기 위한 명령을 발생
- 대부분 동시에 여러 외부 엔티티와 상호작용하는데 주로 하드웨어 장치나 다른 소프트웨어 시스템과 작동함
- 이벤트 중심 시스템은 모든 입력 이벤트에 대하여 반응할 필요가 없음
- 상태에 따라 같은 이벤트라도 시스템이 다른 상태에 있다면 반응이 다름
- 시스템이 이벤트를 무시할 수도 있음
➡ 이벤트 중심 시스템은 상태 다이어그램으로 모델링하고 상태 단위로 아키텍처가 구성됨
변환 시스템
- 변환(transformational) 시스템은 과학 계산이나 엔지니어링 계산 분야에서 많이 볼 수 있음
- 워크플로 관리나 비즈니스 데이터 마이닝과 같은 비즈니스 애플리케이션에서도 만날 수 있음
- 많이 알려진 사례 : 컴파일러 (Compiler) - 원시코드를 실행코드로 바꾸어 줌
1) 원시코드에서 토큰으로 변환하는 스캐너
2) 토큰 스트림을 프로그램 문장으로 바꾸는 구문 분석기
3) 각 문장에 대한 실행코드를 생성하는 코드 생성기
4) 실행 코드의 성능 및 효율을 개선하는 코드 최적화
=> 액터나 컴파일러는 거의 상호작용이 없이 일괄적으로 변환됨 - 복잡한 사례 : 작업 공정 관리
- 요청이나 작업이 여러 부서에 의하여 처리되는 단계가 있을 때 다수의 의사결정과 동기화, 병렬처리가 이루어짐
1) 각 부서에서 작업을 자동화한 서브 시스템과 대화하는 대화형 시스템이 있음
2) 중요한 부분은 작업에 대한 정보를 받아 작업의 흐름을 결정하고 여기에 대한 정보로 바꾸는 것
➡ 변환 과정이 아키텍처의 중요한 구성 요소가 됨
객체 영속 시스템
- 객체 영속 (object-persistence) 시스템 : 저장 미디어를 숨기고 데이터베이스나 파일 시스템에 객체를 저장, 검색
- 데이터베이스를 사용한다는 이유로 분산 시스템이라고도 부름
- 데이터베이스를 시스템에서 숨기고 데이터베이스 구현에 대한 변경을 시스템이 잘 모르도록 보호
- 데이터베이스에 객체를 저장하고 검색하는 것 밖에 없음
- 많은 량의 레코드가 변경되는 경우 외에는 성능이 좋아야할 비즈니스 프로세스가 거의 없음
- 데이터베이스 시스템은 대규모의 복잡한 데이터를 효과적으로 저장하고 검색하고 갱신할 수 있어야 함