본문 바로가기
임베디드 관련 정리

서비스 지향 아키텍처 정리

by minhyeok.lee 2025. 5. 29.
반응형

서비스 지향 아키텍처 (Service-Oriented Architecture, SoA)


✅ 개념

각 기능을 서비스로 정의하고, 명시적 요청-응답 형태로 작동하는 아키텍처
ROS2의 Service/Client, DDS 기반 통신 구조에 가장 가까운 개념


✅ 구조 개요

[Client Node] → 요청 → [Service Node] → 응답 반환

예: 
[Navigation Client] → /plan_path → [Planner Service]
  • 각 기능이 서비스 단위로 설계되며, 요청에 따라 응답을 제공
  • 서비스는 네트워크상 또는 내부에서 실행 가능 (로컬/분산 시스템 모두 지원)

✅ 장점

항목 설명
모듈 분리 명확 모든 기능이 서비스 단위로 격리
유지보수 용이 서비스 교체/확장이 간단함
네트워크 통합 쉬움 IoT/서버와도 통합 가능
서비스 재사용성 동일 서비스 여러 로봇에서 호출 가능

❌ 단점

항목 설명
실시간 제어 어려움 서비스 호출/응답은 느릴 수 있음
통신 실패 시 처리 필요 안정적 Fallback 로직 필수
복잡한 상태 공유 상태는 외부 저장소(Context 등)로 분리해야 함

✅ ROS2 기반 예시

# Client
ros2 service call /start_mission my_pkg/srv/Start

# Service
/start_mission (Start.srv)
  request: mission_id
  response: success, message

예: UWB 정밀 추종 시작 → /start_follow 서비스 요청 → UWB 모듈에서 응답


🧠 SoA와 Modular 아키텍처 차이

항목 Modular Architecture Service-Oriented Architecture (SoA)
호출 방식 내부 함수 호출 / Queue 등 명시적 요청/응답 (RPC 방식)
동기/비동기 주로 비동기 (Pub/Sub, Callback) 동기 요청이 많음 (단발성 처리)
상태 공유 공유된 구조체, Context로 관리 상태는 별도 저장소 또는 다시 서비스 요청 필요
실시간성 중간 이상 낮음 (서비스 호출 지연 존재)
확장성 높음 매우 높음 (서비스만 추가 등록하면 됨)

✅ STM32 / 임베디드에서의 간접적 적용

  • RTOS Task 또는 인터럽트 기반 Command Queue 시스템으로 비슷한 구조 구현 가능
struct ServiceRequest {
  enum Type { BUZZER_ON, LED_SET, MOTOR_STOP } type;
  int value;
};

QueueHandle_t commandQueue;

void ControlServiceTask(void*) {
  while (1) {
    ServiceRequest req;
    if (xQueueReceive(commandQueue, &req, portMAX_DELAY)) {
      switch (req.type) {
        case BUZZER_ON: buzzer.on(req.value); break;
        ...
      }
    }
  }
}

📦 사용 추천 예

시스템 유형 적합 여부 설명
ROS2 기반 로봇 ✅ 매우 적합 기본 구조가 SoA 기반
Jetson 서버 + STM32 ✅ 적합 STM32를 Service Provider로 사용
실시간 PID 제어 ❌ 부적합 빠른 응답 요구 시 부적합

📌 결론

  • ROS2, DDS 기반 로봇 시스템에서 강력한 아키텍처
  • 명확한 인터페이스 정의, 모듈화, 원격 호출이 필요한 시스템에 적합
  • 실시간성이 중요하지 않은 관리용 기능 (예: LED 설정, 상태 요청)에 이상적
반응형

댓글