소프트웨어 아키텍처의 정의
한 번 구현하면 변경되지 않는 비용이 많이 드는 근본적인 구조
- 단위 (Building Block): 무엇으로 구성할 것인가
- 통신 구조: 어떤 방식으로 모듈 간 데이터를 교환할 것인가
- Client-server, Publish-subscribe
- Building Block들은 통신 구조에 맞게 상호작용한다.
- 실행 구조: 시간 기반인가 이벤트 기반인가
- Time-Triggered, Event-Triggered
소프트웨어 아키텍처
Monolithic vs Modular Architecture
- Monolithic Architecture
- 전체 시스템이 하나로 통합된 구조
- 초기 설계는 간단하지만 복잡도가 증가하면 유지보수에 어려움이 생긴다.
- 전체 시스템이 뭉쳐있다. (Highly cohesive)
- Modular Architecture
- 시스템을 기능별로 분리하여 개발한 후 통합하여 전체 시스템 설계
- 각 모듈은 내부적으로 높은 응집도를 가지며, 모듈 간 결합도는 낮게 설계한다.
- Highly Cohesive, Loosely Coupled
- 인터페이스를 통해 각 모듈이 통신한다.
- 설계에 노력이 필요하지만 복잡도 관리에 유리하다.
- 각 모듈 내부는 자주 변하더라도 인터페이스는 가능한 미리 고정한다.
Layered Architecture
- 추상화: 하위 레이어의 복잡한 세부사항을 감추고 상위 레이어에 간소화된 인터페이스 제공
- Applications
- Application Framework
- Domain Knowledge: Application domain 별로 특성이 매우 다르다.
- AUTOSAR(자동차), Android(모바일)
- Middleware, Database
- Communication
- AUTOSAR, ROS
- Hypervisor, Container Manager
- Virtualization
- VirtualBox, Docker
- Operating System
- Resource Management, Scheduling
- Linux 및 RTOS 등
- Hardware
- Function call-oriented 인터페이스: 동기적 구조로 설계
- AUTOSAR architecture의 쌓여있는 Layers를 위에서 바라보면 component based architecture와 같다.
Component-based Architecture
- 재사용성(Reusability): 기존 컴포넌트를 활용하여 복잡한 시스템 구축
- 복잡한 application 구조를 시각화하는데 유리하다.
- 데이터 흐름(Data Flow-oriented): 비동기적(Asynchronous) 구조로 설계
- 메시지를 받아도 원하는 시점에 반응한다.
- sender는 receiver가 언제 반응할지 알 수 없다.
recv_message()
같은 반응을 해야 receive가 이루어진다.
- 포트(Port): 컴포넌트 간 통신을 위한 연결 지점
- 시스템 전체 layer를 표현하지 않고 application 구조에 집중한다.
- Example: Autoware Architecture
Event-Driven Architecture
Time-Driven Architecture
- 원하는 시간이 되면 함수를 호출한다.
- Time-Triggered Architecture
- Time-Driven Architecture의 극단적인 형태
- 예측 가능성이 중요할 경우 사용된다.
- 사전에 정의된 시간(언제 어떤 모듈을 실행중일지)에 따라 작업을 트리거
- Example: FlexRay(시간 기반)
Client-Server Architecture
- Client: Server에게 서비스를 요청하고 대기한다.
- Client는 Server 주소를 알아야 한다.
- Server: Client의 요청에 대해 응답한다.(동기)
Sender-Receiver Architecture
- Sender: Receiver에게 비동기적으로 메시지를 전달한다.
- Message Passing
- Sender는 receiver가 누구인지 알고 메시지를 보낸다.
- Receiver: 원할 때 메시지를 읽는다.
- Receiver가 메시지를 읽었다는 걸 보장할 수 없다.
- 우체통과 같다.
Publish-Subscribe Architecture
- 자동차에 흔히 사용된다.
- Topic Subscribe 기반으로 받는 주체를 설정하지 않아도 된다.