실행·통신 아키텍처 패턴소프트웨어 아키텍처 3축 중 통신 구조실행 구조의 세부 패턴 모음. 호출 인터페이스(Sync/Async), 이벤트 처리 방식(Event-Driven, Time-Driven), 메시지 전달 방식(Publish-Subscribe, Client-Server), 실행 트리거(Time-Triggered, Event-Triggered)를 포괄한다.

호출 인터페이스 — Sync vs Async

Synchronous Call Interface

함수 호출 기반. 호출한 쪽이 반환을 기다린다. 제어 흐름이 소프트웨어 내부에서 어떻게 흐르는지가 핵심.

  • Layered Architecture가 이 모델을 사용한다.
  • 호출한 태스크는 호출된 함수가 끝날 때까지 진행하지 못함.

Asynchronous Message Passing Interface

int main(...) {
    send_message(...);    // 송신자
}
 
int main(...) {
    recv_message(...);    // 수신자
}

Asynchronous란 송신자가 수신자가 언제 반응할지 모른다는 의미. 송신 즉시 제어를 돌려받고, 수신자는 자기 일정대로 처리한다. Component-Based 스타일(Component-Based Architecture)이 주로 채택.

실행 구조 — Event-Driven vs Time-Driven

Event-Driven Architecture

Event Handler를 등록하고 이벤트가 도착하면 핸들러를 호출하는 구조. 예: 계산기 UI의 onClickAdd(...), onClickSub(...).

Blocking 버전

int main(...) {
    Register Event Handlers
    while (TRUE) {            // ← Event Loop
        Wait Events           // 이벤트 없으면 블록
        Accept Events
        Call Event Handlers
    }
}

이벤트가 없을 때 블록 — CPU를 소모하지 않는다.

Non-Blocking 버전

int main(...) {
    Register Event Handlers
    while (TRUE) {            // ← Event Loop
        if (pending events) {
            Accept Events
            Call Event Handlers
        }
    }
}

폴링 방식. 블록하지 않고 루프를 계속 돈다 — 다른 일을 사이사이 처리할 수 있지만 CPU 사용률은 높다.

Time-Driven Architecture

int main(...) {
    Register Timer Handlers
    while (TRUE) {            // ← Event Loop
        Wait Timer Events
        Timer Expires
        Call Timer Handlers
    }
}

트리거가 타이머로 고정된 형태. Event-Driven의 특수한 경우로, 이벤트 소스가 시계뿐이다.

통신 구조 — Pub-Sub vs Client-Server

Publish-Subscribe Architecture

  • 일반 message passing: 송신자가 수신자가 누구인지 알고 보낸다.
  • Pub-Sub message passing: 주제(Topic) 구독(Subscribe) 기반. 송신자는 수신자가 누구인지 모르고, 수신자는 관심 주제만 구독한다.

송·수신자가 서로 모르는 느슨한 결합. 새 구독자 추가 시 송신자 변경이 불필요.

Client-Server Architecture

Client가 Server에 요청을 보내고 응답을 받는 전통적 인터넷 모델. 송·수신자가 서로 식별한다.

실행 트리거 — Time-Triggered vs Event-Triggered

시간 관점에서 예측 가능성이 중요할 경우 Time-Triggered를 사용한다.

자동차 버스 사례

버스트리거 방식성격
CANEvent-Triggered이벤트 발생 시마다 전송
FlexRayTime-Triggered예정된 시각에만 전송, 예측 가능

Time-Triggered는 타임라인 상의 슬롯에서 통신이 일어나도록 미리 계획하므로, 최악 지연이 설계 시점에 정해진다. 실시간성이 중요한 X-by-wire에는 Time-Triggered 접근이 선호된다 (FlexRay, CAN 참고).

패턴 조합

실제 시스템은 이 패턴들을 조합한다. 예:

  • Layered + Sync Call + Event-Driven (Blocking): 전통적 OS 애플리케이션
  • Component-Based + Async Message Passing + Pub-Sub + Time-Triggered: AUTOSAR + FlexRay 기반 자동차 도메인

같이 보기