Software Architecture

‍이세현·2024년 12월 6일
0

소프트웨어 아키텍처의 정의

한 번 구현하면 변경되지 않는 비용이 많이 드는 근본적인 구조

  • 단위 (Building Block): 무엇으로 구성할 것인가
    • 함수, 객체 등 language의 개념
    • 컴포넌트, 서비스 등 language에서 지원하지 않는 개념
    • 함수의 구성
      int func(int in1, const char *in2, int *out1)
      • int: Return value
      • in1: Input (Call by value)
      • *in2: Input (Call by reference), 메모리 주소
      • *out1: Output (Call by reference), output을 받고 싶은 주소
  • 통신 구조: 어떤 방식으로 모듈 간 데이터를 교환할 것인가
    • 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

  • 추상화: 하위 레이어의 복잡한 세부사항을 감추고 상위 레이어에 간소화된 인터페이스 제공
    1. Applications
    2. Application Framework
      • Domain Knowledge: Application domain 별로 특성이 매우 다르다.
      • AUTOSAR(자동차), Android(모바일)
    3. Middleware, Database
      • Communication
      • AUTOSAR, ROS
    4. Hypervisor, Container Manager
      • Virtualization
      • VirtualBox, Docker
    5. Operating System
      • Resource Management, Scheduling
      • Linux 및 RTOS 등
    6. Hardware
      • CPU, GPU, 컴퓨팅 하드웨어
  • Function call-oriented 인터페이스: 동기적 구조로 설계
    • 함수 호출이 흐르는 control flow
  • 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

  • 이벤트 발생 시 핸들러(Event Handler)가 동작
    • GUI 개발 시 사용된다.
    • onClickAdd()과 같은 이벤트 핸들러
  • 블로킹 모델: 모든 이벤트를 처리할 때까지 대기
    while (True) {
        Wait Events
        Accept Events
        Call Event Handlers
    }
  • 비블로킹 모델: 대기하지 않고 진행
    while (True) {
        if pending events
            Accept Events
            Call Event Handlers
    }
    • 비효율적 반복문은 CPU를 과소비한다.
  • Example: CAN

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 기반으로 받는 주체를 설정하지 않아도 된다.
profile
Hi, there 👋

0개의 댓글

관련 채용 정보