분산 시스템의 세계는 끊임없이 진화해 왔습니다. 그 진화의 최전선에는 단순히 메시지를 주고받는 것을 넘어, 멀리 떨어진 애플리케이션들이 마치 하나의 거대한 공유 데이터베이스에 접속하듯 상호작용하는 ‘데이터 중심(Data-Centric)’이라는 철학이 있습니다. 이 보고서의 첫 번째 파트에서는 RTI Connext DDS의 구체적인 기술을 파고들기 전에, 우리를 이 새로운 시대로 이끄는 DDS(Data Distribution Service) 표준의 근본적인 패러다임 전환을 깊이 있게 들여다볼 것입니다. 통신을 ‘메시지 배달’이라는 낡은 관점에서 벗어나, 시스템 전체의 ‘상태를 실시간으로 공유’하는 새로운 개념으로 이해하는 것. 이것이야말로 DDS의 진정한 힘을 깨닫는 가장 중요한 첫걸음입니다.
오늘날 우리가 만드는 분산 시스템은 점점 더 복잡해지고, 예측 불가능하게 변하며, 수많은 부품이 눈 깜짝할 사이에 서로 정보를 주고받아야 하는 엄청난 과제에 직면해 있습니다. 이런 환경에서 데이터의 흐름을 얼마나 효과적으로 관리하느냐가 시스템의 성능, 안정성, 그리고 미래의 확장성까지 결정짓는 핵심 열쇠가 됩니다. 데이터 분산 서비스(DDS)는 바로 이 문제를 풀기 위해 태어난 표준 기술로, 기존 통신 방식들의 답답한 한계를 뛰어넘는 새로운 세상을 제안합니다.
지금까지 분산 시스템을 만드는 데 사용되어 온 전통적인 통신 모델들은 저마다 쓸모가 있었지만, 복잡하고 역동적인 현대 시스템의 까다로운 요구를 만족시키기에는 명백한 한계를 보입니다.
원격 프로시저 호출(RPC)에 기반한 클라이언트-서버 모델은 특정 서비스를 요청하고 응답을 받는 상호작용에 아주 효과적입니다. REST나 gRPC 같은 최신 기술들은 웹 서비스와 마이크로서비스 환경에서 지금도 널리 쓰이고 있죠.1 하지만 이 모델은 본질적으로 ‘일대일 통화’에 최적화되어 있습니다. 시스템이 복잡해져서 수많은 구성 요소가 서로에게 끊임없이 데이터를 쏟아부어야 하는 ‘다자간 화상회의’ 같은 상황이 되면 어떨까요? 모든 연결을 일일이 관리해야 하므로 시스템 전체가 거미줄처럼 얽히는 ‘강한 결합(tight coupling)’이 발생합니다. 이는 시스템의 유연성을 떨어뜨리고, 한 곳의 작은 문제가 시스템 전체를 마비시키는 도미노 현상을 일으킬 수 있는 취약한 구조를 만듭니다.3
사물 인터넷(IoT) 분야의 스타인 MQTT 같은 메시지 중심 미들웨어는 ‘발행-구독’ 모델을 사용해 클라이언트 간의 직접적인 연결을 끊어냅니다. 모든 통신은 중앙의 ‘우체국(브로커)’을 거칩니다. 발행자는 우체국에 편지를 보내고, 구독자는 우체국에서 편지를 받아 가죠.4 이 방식은 클라이언트들을 효과적으로 분리하지만, 모든 통신이 몰리는 우체국 자체가 시스템 전체를 멈추게 할 수 있는 ‘단일 장애점(Single Point of Failure)’이자 성능의 병목이 될 수 있다는 치명적인 약점을 안고 있습니다.5
더 근본적인 한계는 이들이 ‘메시지 중심(Message-Centric)’이라는 점입니다. 우체국은 편지가 오고 갔다는 사실은 알지만, 편지 봉투 안에 무슨 내용이 들었는지는 전혀 관심이 없습니다.4 데이터의 의미를 해석하고, 필요한 정보만 걸러내고, 전체적인 상황을 파악하는 것은 모두 편지를 받은 개별 애플리케이션의 몫입니다. 이는 결국 애플리케이션을 점점 더 복잡하고 무겁게 만드는 주범이 됩니다.
DDS는 이런 문제들을 해결하기 위해 완전히 다른 길을 선택합니다. 바로 ‘데이터버스(Databus)’ 또는 ‘글로벌 데이터 공간(Global Data Space)’이라는 개념입니다.6 이것은 마치 모든 분산 애플리케이션이 자신의 컴퓨터 안에 있는 거대한 공유 데이터베이스를 함께 읽고 쓰는 것처럼 상호작용하게 해주는 가상의 공간입니다.
이 패러다임의 핵심은 중앙 우체국(브로커)이 없는, 완전한 P2P(Peer-to-Peer) 구조에 있습니다. 시스템에 참여하는 모든 애플리케이션(Peer)들은 ‘자동 검색(auto-discovery)’ 기능을 통해 서로를 알아서 찾아내고, 필요한 데이터를 직접 주고받습니다.2 이 구조는 중앙 서버에 대한 의존성을 없애 단일 장애점을 원천적으로 차단하고, 데이터가 최단 경로로 전달되게 하여 지연 시간(latency)을 획기적으로 줄입니다. 이는 최고의 신뢰성과 실시간 성능이 필요한 시스템에 결정적인 장점을 제공합니다.5
DDS 패러다임의 가장 혁신적인 부분은 바로 ‘데이터 중심(Data-Centric)’이라는 철학입니다.7 이는 미들웨어가 단순히 데이터를 전달하는 것을 넘어, 그 데이터의
구조와 의미까지 이해한다는 뜻입니다.6
메시지 중심 시스템에서는 애플리케이션이 네트워크에서 받은 정체불명의 바이트 덩어리(blob of bytes)를 해석하는 힘든 일을 도맡아야 했습니다.10 반면, DDS에서는 애플리케이션이 “나는 ‘차량 위치’ 타입의 데이터를 공유하고 싶어”라고 자신의 ‘의도’만 선언하면 됩니다. 그러면 미들웨어는 데이터의 내용에 기반해 직렬화, 라우팅, 필터링, 상태 관리 같은 복잡한 통신 문제를 알아서 처리해 줍니다.11 예를 들어, 구독자는 “온도가 30도 이상인 센서 데이터만 줘”라고 미들웨어에 요청할 수 있고, 미들웨어는 이 조건을 만족하는 데이터만 골라서 해당 구독자에게 전달합니다.
이러한 데이터 중심 상호작용은 발행-구독(Publish-Subscribe) 모델을 통해 이루어집니다. 발행자(Publisher)는 특정 주제(Topic)의 데이터를 글로벌 데이터 공간에 쓰고, 구독자(Subscriber)는 관심 있는 주제의 데이터를 읽어갑니다. 이 과정에서 둘은 서로의 존재나 위치를 전혀 알 필요 없이, 오직 데이터 자체에만 집중합니다. 이로 인해 시간과 공간에 대한 완전한 분리(decoupling)가 가능해집니다.11
이러한 패러다임의 전환은 단순한 기술의 차이를 넘어, 분산 시스템을 설계하는 철학의 근본적인 변화를 의미합니다. 기존 모델에서는 통신과 관련된 복잡한 코드(오류 처리, 데이터 변환, 상태 동기화 등)가 애플리케이션 곳곳에 흩어져 있었습니다. “일반적인 네트워킹 코드의 80%가 데이터 선택과 오류 처리에 쓰인다”는 분석이 이를 잘 보여줍니다.15 DDS는 이 모든 복잡성을 애플리케이션에서 떼어내, 고도로 최적화되고 표준화된 미들웨어 계층으로 옮겨놓습니다.
결과적으로 개발자는 골치 아픈 저수준 네트워킹이나 복잡한 오류 처리 대신, 시스템의 핵심 비즈니스 로직에만 온전히 집중할 수 있게 됩니다. 이는 개발 시간 단축, 테스트 부담 감소, 그리고 장기적인 유지보수 비용 절감으로 이어집니다. 따라서 시스템 설계자에게 DDS의 채택은 단순히 새로운 라이브러리를 하나 추가하는 것이 아니라, 복잡한 분산 시스템을 더 효율적이고 견고하게 만들기 위한 새로운 설계 패턴을 도입하는 전략적 결정이 되는 것입니다.
DDS의 데이터 중심 철학이라는 큰 그림을 이해했다면, 이제 그 철학을 현실로 만드는 기술적인 뼈대를 살펴볼 차례입니다. DDS는 ‘글로벌 데이터 공간’이라는 추상적인 개념을 구체적인 ‘엔티티(Entity)’라는 부품들의 계층 구조와 표준화된 통신 규칙(프로토콜)을 통해 구현합니다. 이 장에서는 DDS 표준의 핵심 아키텍처를 분해하여, 개발자가 시스템을 만들 때 실제로 사용하게 될 기본 구성 요소들과 그들이 어떻게 상호작용하는지 명확하게 설명합니다.
DDS 표준은 두 가지 수준의 인터페이스를 정의하는데, 이는 애플리케이션의 필요에 따라 다른 수준의 추상화를 제공하기 위함입니다.7
DCPS는 시스템을 구성하는 여러 엔티티들을 정의합니다. 이 엔티티들은 레고 블록처럼 계층적인 관계를 가지며, 각각 명확한 역할과 책임을 가집니다. 이들의 관계를 이해하는 것이 DDS 프로그래밍의 첫걸음입니다.
DomainParticipantFactory: DDS 세계로 들어가는 유일한 문(door) 역할을 하는 싱글턴(Singleton) 팩토리 객체입니다. 모든 DDS 작업은 이 팩토리를 통해 DomainParticipant를 생성하는 것에서 시작됩니다.11
DomainParticipant: 특정 ‘도메인(Domain)’ 내에서 애플리케이션의 참여를 나타내는 핵심 컨테이너입니다.11 도메인은 독립적인 통신 네트워크를 형성하는 논리적인 ‘방(room)’과 같습니다. 서로 다른 도메인 ID를 가진
DomainParticipant들은 기본적으로 서로 통신할 수 없습니다.7
DomainParticipant는 또한 Publisher, Subscriber, Topic과 같은 다른 하위 엔티티들을 만들어내는 공장(factory) 역할도 합니다.11
Topic: 발행자와 구독자를 연결하는 ‘대화 주제’입니다. Topic은 세 가지 요소로 정의됩니다:
고유한 이름: 도메인 내에서 유일한 문자열 이름 (예: "VehiclePosition", "/lidar_points").8
데이터 타입: 해당 토픽으로 오고 갈 데이터의 명확한 구조 (예: VehiclePositionType 구조체).8
QoS 정책: 해당 토픽에 적용될 통신 품질 정책.
Topic은 글로벌 데이터 공간에서 특정 데이터의 흐름을 식별하는 가장 기본적인 단위입니다.11
Publisher와 DataWriter:
Publisher: 하나 이상의 DataWriter를 관리하는 그룹 매니저입니다.11
Publisher 수준에서 QoS 정책을 설정하여 소속된 모든 DataWriter에 한 번에 적용할 수 있습니다.
DataWriter: 애플리케이션이 특정 Topic에 데이터를 실제로 발행(쓰기)하기 위해 사용하는 ‘펜’과 같은 객체입니다.11 하나의
DataWriter는 하나의 Topic에 연결됩니다.
Subscriber와 DataReader:
Subscriber: 하나 이상의 DataReader를 관리하는 그룹 매니저입니다.11
Subscriber 수준에서도 QoS 정책 설정이 가능합니다.
DataReader: 애플리케이션이 특정 Topic의 데이터를 구독(읽기)하기 위해 사용하는 ‘눈’과 같은 객체입니다.11
DataReader는 수신된 데이터를 내부 캐시에 저장하고, 애플리케이션은 이 캐시에서 데이터를 가져옵니다.
이러한 계층적 엔티티 모델은 시스템 설계에 강력한 유연성을 줍니다. 예를 들어, 시스템 설계자는 Publisher 수준에서 전반적인 신뢰성 정책(RELIABLE)을 설정하고, 그중에서도 덜 중요한 특정 데이터를 발행하는 DataWriter에 대해서만 개별적으로 정책을 BEST_EFFORT로 재정의할 수 있습니다. 21의 QoS 적용 가능 엔티티 표와 [22]의 설명에서 볼 수 있듯이, 이러한 계층적 QoS 적용 방식은 반복적인 설정을 피하고 시스템의 통신 규칙을 명확하고 효율적으로 관리할 수 있게 해주는 핵심적인 설계 패턴입니다. 이는 단일 설정 파일로 모든 것을 제어하는 방식보다 훨씬 정교하고 확장성이 뛰어납니다.
DDS 표준은 애플리케이션 프로그래밍 인터페이스(API)뿐만 아니라, 네트워크 상에서 데이터가 교환되는 방식, 즉 ‘와이어 프로토콜(wire protocol)’까지 정의합니다. 이 표준 프로토콜이 바로 DDSI-RTPS(DDS Interoperability Real-Time Publish-Subscribe Protocol)입니다.17
RTPS의 가장 중요한 역할은 서로 다른 회사가 만든 DDS 구현체 간의 상호운용성(interoperability)을 보장하는 것입니다.17 즉, RTI Connext DDS로 만든 애플리케이션이 eProsima Fast DDS나 Eclipse Cyclone DDS로 만든 애플리케이션과 별도의 번역기(게이트웨이) 없이 자연스럽게 대화할 수 있는 것은 바로 이 RTPS라는 공용어 덕분입니다.25
RTPS는 다음과 같은 설계 원칙을 기반으로 합니다 26:
결론적으로, DDS의 아키텍처는 애플리케이션 개발을 위한 풍부한 엔티티 모델(DCPS)과 이기종 시스템 간의 원활한 통신을 보장하는 표준 와이어 프로토콜(RTPS)의 환상적인 조합으로 이루어져 있습니다. 이 견고한 아키텍처는 개발자가 복잡한 분산 시스템을 만들 때 골치 아픈 저수준 네트워킹 문제에 얽매이지 않고, 데이터 중심의 설계에만 집중할 수 있도록 하는 강력한 기반을 제공합니다.
DDS 표준이라는 견고한 이론적 토대 위에서, 이제는 업계에서 가장 널리 쓰이는 상용 구현체 중 하나인 RTI Connext DDS를 깊이 있게 살펴볼 차례입니다. 이 파트에서는 RTI(Real-Time Innovations)가 제공하는 구체적인 제품군과 그 생태계를 분석하고, DDS의 가장 강력한 기능인 서비스 품질(QoS)을 실제 시스템 설계에 어떻게 적용하는지 실용적인 관점에서 탐구합니다. 이를 통해 독자는 추상적인 표준을 넘어 실제 프로젝트에서 마주하게 될 RTI Connext DDS의 구체적인 모습과 그 활용법을 이해하게 될 것입니다.
RTI는 단순히 DDS 표준 라이브러리 하나만 제공하는 회사가 아닙니다. 다양한 산업과 애플리케이션의 독특한 요구사항에 맞춰 특화된 제품군과 포괄적인 개발 도구를 포함하는 완성된 생태계를 구축했습니다. 잠재적인 사용자가 자신의 프로젝트에 가장 적합한 솔루션을 선택하기 위해서는 이 제품 생태계에 대한 이해가 필수적입니다.
Real-Time Innovations(RTI)는 미션 크리티컬 및 산업용 분산 시스템을 위한 소프트웨어 프레임워크를 제공하는 세계적인 선도 기업입니다.28 RTI의 주력 제품인 Connext DDS는 국방, 항공우주, 자율주행차, 의료, 에너지 등 최고의 신뢰성과 실시간 성능이 요구되는 까다로운 분야에서 수많은 성공 사례를 통해 그 기술력을 입증해왔습니다.30 RTI는 DDS 표준화 과정에 깊이 관여해왔으며, 시장에서 가장 성숙하고 기능이 풍부한 DDS 구현체를 제공하는 것으로 평가받고 있습니다.
RTI는 다양한 시스템의 고유한 요구사항을 충족시키기 위해 여러 버전의 Connext 제품을 제공합니다. 각 제품은 공통된 DDS 코어 아키텍처를 공유하지만, 특정 사용 사례에 맞춰 기능, 라이선스, 인증 수준이 다릅니다. 마치 같은 자동차 모델이라도 기본형, 스포츠형, 안전 강화형, 오프로드형이 있는 것과 같습니다.
아래 표는 RTI Connext 제품군을 요약하여 각 제품의 목적과 특징을 명확히 보여줍니다. 이는 시스템 설계자가 프로젝트의 요구사항(예: 보안, 안전 인증, 자원 제약)에 따라 어떤 제품을 선택해야 할지 신속하게 판단하는 데 큰 도움을 줍니다.
| 제품명 | 주요 대상 산업/애플리케이션 | 핵심 특징 | 라이선스/인증 컨텍스트 |
|---|---|---|---|
| Connext Professional | 일반 산업용 IoT, 분산 제어, 시뮬레이션 | DDS 표준의 모든 핵심 기능, 풍부한 개발 도구 제공 32 | 상용 개발 라이선스 |
| Connext Secure | 국방, 항공우주, 의료, 금융, 핵심 기반 시설 | OMG DDS Security 표준 준수, 인증, 접근 제어, 암호화 33 | 보안 기능이 포함된 상용 라이선스 |
| Connext Micro | 자원 제약이 있는 임베디드 시스템, 소형 센서/액추에이터 | 작은 메모리 풋프린트, 낮은 CPU 사용률 28 | 임베디드용 특화 라이선스 |
| Connext Cert | 항공(DO-178C), 자동차(ISO 26262), 의료(IEC 62304) | 기능 안전 표준에 대한 인증 증거 자료 제공 28 | 안전 인증 프로젝트용 특수 라이선스 |
| Connext Drive | 자율주행, 소프트웨어 정의 차량(SDV) | AUTOSAR, ROS 2와의 통합, 자동차 등급 프레임워크 35 | 자동차 산업용 특화 라이선스 |
RTI Connext의 강력함은 다양한 개발 환경과 네트워크 인프라를 지원하는 유연성에서도 나옵니다.
이처럼 RTI Connext는 특정 산업의 요구에 맞춘 전문화된 제품군과 다양한 개발 환경을 지원하는 유연성을 통해, 단순한 통신 라이브러리를 넘어 복잡한 분산 시스템을 구축하기 위한 포괄적인 솔루션 생태계를 제공합니다.
DDS를 다른 모든 통신 미들웨어와 근본적으로 구별 짓는 가장 강력한 기능은 바로 서비스 품질(Quality of Service, QoS)입니다. 여기서 QoS는 단순히 ‘더 빠르다’거나 ‘더 신뢰할 수 있다’는 막연한 의미가 아닙니다. 시스템의 동작 방식 자체를 정의하는 수십 가지의 정교한 정책들의 집합입니다. 시스템 설계자는 이 QoS 정책들을 레고 블록처럼 조합하여, 애플리케이션 코드를 단 한 줄도 바꾸지 않고도 데이터의 전달 방식, 생명 주기, 리소스 사용량 등을 아주 세밀하게 제어할 수 있습니다. 이 장에서는 DDS의 심장이라 할 수 있는 QoS의 개념을 깊이 파고들어, 주요 정책들의 역할과 그들이 시스템 아키텍처에 어떤 영향을 미치는지 분석합니다.
DDS QoS의 기본 동작 원리는 ‘계약(contract)’ 모델에 기반합니다. 통신에 참여하는 두 주체인 DataWriter와 DataReader는 각각 자신의 QoS 정책을 가지고 있습니다.
DataWriter는 자신이 제공할 수 있는 서비스의 수준을 ‘제공(offered)’합니다.DataReader는 통신 상대에게 요구하는 최소한의 서비스 수준을 ‘요청(requested)’합니다.두 엔티티 간의 통신은 오직 DataWriter가 제공하는 QoS가 DataReader가 요청하는 QoS를 만족시킬 수 있을 때, 즉 ‘호환(compatible)’될 때만 성립됩니다.18 예를 들어,
DataReader가 “나는 모든 데이터를 빠짐없이 받아야 해”(RELIABLE)라고 요청했는데, DataWriter가 “나는 최선을 다해 보내겠지만 유실될 수도 있어”(BEST_EFFORT)라고만 제공한다면, 둘 사이의 통신은 이루어지지 않습니다. 이 ‘요청 대 제공’ 매칭 메커니즘은 시스템의 통신 정책이 설계자의 의도대로 강제되도록 보장하는, DDS의 견고함을 지탱하는 초석입니다.
모든 DDS 시스템 설계의 출발점이 되는 가장 기본적이고 중요한 QoS 정책들은 다음과 같습니다.
BEST_EFFORT: 데이터를 한 번만 전송하며, 전달을 보장하지 않습니다. 일반 우편과 비슷하며, 지연 시간에 민감하고 최신 데이터가 이전 데이터를 무의미하게 만드는 센서 데이터 스트리밍 등에 적합합니다. 성능 오버헤드가 가장 적습니다.RELIABLE: 데이터가 수신자에게 반드시 전달되는 것을 보장합니다. 등기 우편과 같습니다. DataWriter는 데이터를 보낸 후 DataReader로부터 확인 응답(ACK/NACK)을 기다리며, 데이터가 유실되면 재전송합니다. 상태 변경, 이벤트, 명령어 등 반드시 전달되어야 하는 데이터에 사용되며, BEST_EFFORT에 비해 성능 오버헤드가 발생합니다.21VOLATILE: 휘발성. 구독자는 자신이 구독을 시작한 이후에 발행된 데이터만 받을 수 있습니다.TRANSIENT_LOCAL: DataWriter가 자신의 메모리에 데이터를 잠시 보관합니다. 새로운 구독자가 참여하면, 해당 DataWriter가 살아있는 동안은 보관된 최신 데이터를 받을 수 있습니다.TRANSIENT: 네트워크 상의 ‘내구성 서비스’가 데이터를 저장합니다. 따라서 원본 DataWriter가 종료된 후에도 새로운 구독자가 참여하면 과거 데이터를 받을 수 있습니다.42PERSISTENT: 내구성 서비스가 데이터를 디스크와 같은 비휘발성 저장소에 저장합니다. 시스템 전체가 재시작되어도 데이터가 보존됩니다.DataReader 또는 DataWriter의 캐시에 얼마나 많은 데이터를 저장할지를 제어합니다.8
KEEP_LAST (depth): 가장 최근의 depth개 만큼의 데이터 샘플만 유지합니다. 예를 들어 depth가 1이면, 항상 최신 값만 저장됩니다.KEEP_ALL: 리소스 한도 내에서 모든 이력 데이터를 저장합니다. RELIABLE 통신과 함께 사용될 때, DataWriter는 모든 DataReader가 모든 샘플을 수신할 때까지 데이터를 버리지 않습니다.41기본 QoS 정책 외에도, DDS는 고가용성, 내결함성, 실시간 제어 등 미션 크리티컬 시스템의 복잡한 요구사항을 만족시키기 위한 강력한 고급 QoS 정책들을 제공합니다.
OWNERSHIP 정책은 하나의 데이터 인스턴스(예: 특정 항공기의 위치 정보)를 여러 DataWriter가 동시에 업데이트할 수 있는지 여부를 결정합니다. SHARED는 다중 쓰기를 허용하고, EXCLUSIVE는 오직 하나의 DataWriter만이 해당 인스턴스를 ‘소유’하고 업데이트할 수 있도록 제한합니다.41OWNERSHIP_STRENGTH는 EXCLUSIVE 소유권 환경에서 여러 DataWriter가 동일 인스턴스에 대한 소유권을 주장할 때, 누구에게 우선권을 줄지 결정하는 정수 값입니다. 더 높은 strength 값을 가진 DataWriter가 소유권을 획득합니다. 이를 통해 주(active)/대기(passive) 장애 극복(failover) 메커니즘을 아주 간단하게 구현할 수 있습니다.43DataWriter가 여전히 ‘살아있는지’를 판단하는 방법을 정의합니다. AUTOMATIC, MANUAL_BY_PARTICIPANT, MANUAL_BY_TOPIC과 같은 종류와 lease_duration(임대 기간) 매개변수를 통해, 특정 시간 동안 아무런 활동이 없는 DataWriter를 ‘사망’한 것으로 간주하고 이에 대한 대응(예: 소유권 이전)을 할 수 있습니다. 이는 ‘조용한 실패(silent failure)’를 감지하는 데 필수적입니다.46DataWriter가 특정 period 내에 새로운 데이터를 생성하고, DataReader가 이를 수신할 것을 보장하는 계약입니다. 만약 마감 시간이 지켜지지 않으면, 양측의 리스너(listener) 콜백 함수가 호출되어 애플리케이션이 데이터의 ‘신선도(freshness)’ 문제를 인지하고 대응할 수 있게 합니다. 예를 들어, 제어 루프에 사용되는 센서 데이터가 제때 도착하지 않는 위험한 상황을 감지할 수 있습니다.43Topic이라도 서로 다른 파티션에 속한 DataWriter와 DataReader는 통신할 수 없습니다. 이를 이용해 시스템을 격리하거나(예: “미국 지역” vs “유럽 지역”), 시스템의 동작 모드를 구분하거나(예: “테스트 모드” vs “운용 모드”), 혹은 멀티테넌시를 구현하는 등 유연한 데이터 흐름 관리가 가능합니다.21이러한 고급 QoS 정책들은 독립적으로 동작하는 것이 아니라, 서로 유기적으로 결합하여 강력한 아키텍처 패턴을 형성합니다. 예를 들어, Ownership, Liveliness, Deadline 정책의 조합은 복잡한 고가용성 및 내결함성 시스템을 구축하는 선언적인 프레임워크를 제공합니다. 주 DataWriter는 높은 Ownership_Strength를 가집니다. 만약 이 DataWriter가 Liveliness를 잃거나(예: 프로세스 다운) Deadline을 위반하면(예: 프로세스 멈춤), 미들웨어는 이를 자동으로 감지하고, 다음으로 높은 strength를 가진 대기 DataWriter에게 데이터 인스턴스의 소유권을 즉시, 그리고 원활하게 이전합니다.44 이러한 정교한 장애 극복 로직은 일반적으로 수천 줄의 복잡한 애플리케이션 코드(하트비트, 상태 감시, 인계 로직 등)를 필요로 하지만, DDS에서는 몇 줄의 QoS 설정만으로 구현됩니다. 이는 미션 크리티컬 시스템에서 DDS가 갖는 독보적인 가치를 보여주는 대표적인 사례입니다.
DDS의 강력한 장점 중 하나는 이러한 복잡한 QoS 정책을 애플리케이션 코드와 분리하여 관리할 수 있다는 점입니다. QoS 정책은 일반적으로 XML 프로파일(profile)을 사용하여 정의됩니다.18 애플리케이션은 시작 시 이 XML 파일을 로드하여
DomainParticipant, DataWriter, DataReader 등을 생성할 때 특정 프로파일 이름을 참조하기만 하면 됩니다.
XML
<dds>
<qos_library name="MyLibrary">
<qos_profile name="ReliableTransientProfile">
<datawriter_qos>
<reliability>
<kind>RELIABLE_RELIABILITY_QOS</kind>
</reliability>
<durability>
<kind>TRANSIENT_LOCAL_DURABILITY_QOS</kind>
</durability>
<history>
<kind>KEEP_LAST_HISTORY_QOS</kind>
<depth>10</depth>
</history>
</datawriter_qos>
<datareader_qos>
</datareader_qos>
</qos_profile>
</qos_library>
</dds>
XML QoS 프로파일 예시 42
이러한 접근 방식은 시스템의 통신 동작을 애플리케이션 재컴파일 없이 변경할 수 있게 해주므로, 시스템 통합, 테스트, 현장 튜닝 과정에서 엄청난 유연성과 효율성을 제공합니다.
아래 표는 주요 QoS 정책과 그 아키텍처적 목적을 요약한 것입니다. 시스템 설계자는 이 표를 통해 “이 센서 데이터는 장애가 나도 괜찮도록 만들어야 해”와 같은 시스템 요구사항을 “Ownership을 EXCLUSIVE로 설정하고 Ownership_Strength 값을 다르게 부여하자”는 구체적인 DDS 구성으로 변환할 수 있습니다.
| QoS 정책 | 아키텍처적 목적 | 주요 매개변수 | 일반적인 사용 사례 |
|---|---|---|---|
| Reliability | 데이터 전달 보장 수준 제어 | kind (BEST_EFFORT, RELIABLE) |
RELIABLE: 상태 변경, 명령어 전송BEST_EFFORT: 고주파 센서 데이터 |
| Durability | 데이터 영속성 및 상태 관리 | kind (VOLATILE, TRANSIENT_LOCAL, 등) |
TRANSIENT_LOCAL: 늦게 참여하는 애플리케이션이 최신 상태를 받도록 보장 |
| History | 데이터 이력 관리 | kind (KEEP_LAST, KEEP_ALL), depth |
KEEP_LAST, depth=1: 최신 값만 중요한 경우KEEP_ALL: 모든 데이터 분석이 필요한 경우 |
| Ownership / Strength | 고가용성, 장애 극복, 리더 선출 | kind (SHARED, EXCLUSIVE), value (strength) |
주/대기(Active/Standby) 센서 또는 제어기 구성 |
| Liveliness | 참여자 활성 상태 감지(장애 감지) | kind (AUTOMATIC, 등), lease_duration |
‘조용한 실패(Silent Failure)’를 감지하여 장애 극복 트리거 |
| Deadline | 데이터 신선도(Freshness) 보장 | period |
제어 루프에서 데이터가 주기적으로 업데이트되는지 감시 |
| Partition | 데이터 흐름 격리 및 시스템 분할 | name (문자열 시퀀스) |
다중 테넌트 시스템, 테스트/운용 모드 분리, 지역별 데이터 분리 |
| Presentation | 데이터 업데이트의 원자성 보장 | access_scope, coherent_access, ordered_access |
여러 토픽의 데이터 업데이트를 하나의 트랜잭션처럼 처리 |
데이터 중심 아키텍처의 성공은 전적으로 잘 설계된 데이터 모델에 달려있습니다. 데이터 모델은 분산 시스템 내 모든 참여자가 소통하는 공통의 ‘언어’이며, 시스템의 확장성, 유지보수성, 성능에 지대한 영향을 미칩니다. 이 장에서는 DDS 시스템의 근간이 되는 데이터 모델을 어떻게 정의하고, 시간이 지남에 따라 변화하는 요구사항에 맞춰 어떻게 진화시켜 나갈 수 있는지에 대한 핵심 원칙과 패턴을 다룹니다.
DDS 시스템 설계의 가장 중요한 첫 단계는 ‘데이터 우선 사고(data-first thinking)’입니다.10 이는 애플리케이션의 구체적인 로직이나 통신 메커니즘을 고민하기 전에, 시스템 내에서 교환되어야 할 정보, 즉 공유 데이터 모델을 먼저 정의하는 것을 의미합니다. 이 접근 방식이 효과적인 이유는 데이터 모델이 시스템의 본질적인 “물리적 특성(physics of the system)”에 기반하여, 일시적인 애플리케이션의 사용 사례보다 훨씬 안정적이고 변하지 않는 경향이 있기 때문입니다.12 예를 들어, 항공 관제 시스템에서 ‘비행 계획’이라는 데이터 모델은 특정 애플리케이션의 기능보다는 항공기 비행의 본질에 더 가깝습니다.
이렇게 잘 정의된 데이터 모델은 다음과 같은 역할을 합니다.
DDS에서는 특정 프로그래밍 언어에 종속되지 않는 방식으로 데이터 타입을 정의하기 위해 IDL(Interface Definition Language)을 사용합니다.52 IDL은 OMG(Object Management Group)에 의해 표준화된 언어로, 이를 통해
struct(구조체), sequence(동적 배열), 그리고 long, double, string과 같은 기본 타입을 조합하여 복잡한 데이터 구조를 정의할 수 있습니다.54
Code snippet
// 예시: 항공기 위치 정보를 위한 IDL 정의
module Aviation {
struct Position {
double latitude;
double longitude;
float altitude;
};
struct FlightPlan {
string flight_id; //@key
string origin;
string destination;
sequence<Position> waypoints;
};
};
개발자는 이렇게 IDL로 데이터 타입을 정의한 후, RTI Connext DDS가 제공하는 코드 생성기(rtiddsgen)를 실행합니다. 이 도구는 IDL 파일을 파싱하여 C++, Java, C# 등 선택한 프로그래밍 언어에 맞는 타입 클래스와 직렬화/역직렬화, 메모리 관리 등을 위한 보조 코드를 자동으로 생성해줍니다. 이를 통해 개발자는 플랫폼 간 데이터 표현 방식의 차이를 신경 쓸 필요 없이 타입-안전(type-safe)한 방식으로 데이터를 다룰 수 있습니다.
DDS 데이터 모델링에서 가장 중요한 아키텍처 결정 중 하나는 키(key)의 사용 여부와 어떤 필드를 키로 지정할 것인가입니다.10 키는 데이터 스트림 내에서 고유한 ‘실세계 객체(real-world object)’를 식별하는 역할을 합니다.
@key 어노테이션으로 지정된 필드의 값에 의해 유일하게 식별됩니다. 예를 들어, 위 FlightPlan IDL에서 flight_id가 키이므로, “KAL007”과 “AAL123”은 동일한 FlightPlan 토픽 내의 서로 다른 두 인스턴스가 됩니다.키를 사용하는 것은 미들웨어가 데이터를 인식하고 관리하는 방식을 근본적으로 바꾸며, 다음과 같은 막대한 이점을 제공합니다 7:
History, Deadline, Ownership과 같은 주요 QoS 정책을 토픽 전체가 아닌 개별 인스턴스 단위로 적용할 수 있습니다. 예를 들어, 각 항공편(flight_id)마다 마지막 10개의 위치 업데이트(History)를 유지하거나, 특정 항공편의 업데이트가 30초 이상 지연될 경우 경고(Deadline)를 발생시킬 수 있습니다.이러한 키의 개념은 관계형 데이터베이스의 기본 키(Primary Key)와 매우 유사합니다. [55]에서 지적하듯이, sequence를 사용하여 일대다 관계를 모델링하는 것(예: carpool 구조체 안에 sequence<car>를 포함)은 일반적인 안티패턴입니다. 이는 하나의 car 정보만 변경되어도 전체 carpool 객체를 네트워크로 재전송해야 하므로 매우 비효율적입니다. 올바른 접근 방식은 car를 별도의 키(carId)를 가진 토픽으로 만들고, 여기에 ‘외래 키(foreign key)’처럼 carpoolId 필드를 추가하여 관계를 맺는 것입니다. 이처럼 DDS 데이터 모델링은 데이터베이스 스키마 설계와 유사한 깊이 있는 분석과 설계 원칙을 요구하며, 이는 시스템의 성능과 확장성을 좌우하는 핵심적인 아키텍처 활동입니다.
장기간 운영되는 시스템에서 데이터 모델은 필연적으로 변화하고 진화합니다. DDS-XTypes(Extensible and Dynamic Topic Types)는 이러한 데이터 타입의 진화를 지원하기 위한 OMG 표준입니다.52 XTypes는 IDL에 추가적인 어노테이션을 도입하여,
DataWriter와 DataReader가 서로 약간 다른 버전의 데이터 타입을 사용하더라도 통신이 가능하도록 허용합니다.58
XTypes는 세 가지 ‘확장성 종류(extensibility kind)’를 정의하며, 각각 유연성과 성능 간의 트레이드오프를 가집니다 57:
@final: 기본값으로, 타입 변경을 허용하지 않습니다. DataWriter와 DataReader의 타입 구조가 완벽하게 일치해야만 통신이 가능합니다. 성능 오버헤드가 가장 적습니다.@appendable: 타입의 끝에 새로운 멤버를 추가하는 것을 허용합니다. 구버전의 DataReader는 자신이 모르는 새로운 필드를 무시하고, 신버전의 DataReader는 구버전의 DataWriter로부터 데이터를 받을 때 누락된 필드를 기본값으로 채웁니다. 하위 호환성을 유지하며 타입을 확장할 때 유용하며, 오버헤드가 적습니다.@mutable: 멤버의 추가, 제거, 순서 변경 등 가장 자유로운 타입 변경을 허용합니다. 가장 유연하지만, 각 필드를 식별하기 위한 메타데이터가 추가되므로 성능 오버헤드가 가장 큽니다. 장기적으로 데이터 모델의 큰 변화가 예상될 때 사용합니다.또한, @optional 어노테이션을 사용하면 특정 멤버가 데이터에 포함되지 않을 수도 있음을 명시할 수 있어, 더욱 유연한 데이터 모델링이 가능합니다.54 이러한 XTypes 기능 덕분에, 시스템 전체를 동시에 중단하고 업그레이드할 필요 없이, 개별 구성 요소들을 점진적으로 개선하고 배포하는 것이 가능해집니다.
DDS 표준의 기본 원리와 RTI Connext의 제품 생태계를 이해했다면, 이제는 Connext DDS를 가장 까다로운 시스템에 적용할 수 있게 만드는 고급 기능들을 탐구할 시간입니다. 이 파트에서는 단순한 데이터 교환을 넘어, 시스템의 신뢰성, 성능, 안전성을 보장하는 핵심 요소인 보안, 성능 엔지니어링, 그리고 기능 안전에 대해 심도 있게 다룹니다. 이러한 기능들은 Connext DDS가 단순한 통신 미들웨어가 아니라, 미션 크리티컬 시스템을 구축하기 위한 포괄적인 프레임워크임을 증명합니다.
핵심 기반 시설, 국방, 의료 시스템에서 보안은 선택이 아닌 필수입니다. 데이터 유출, 변조, 또는 서비스 거부 공격은 치명적인 결과를 초래할 수 있습니다. Connext DDS는 OMG의 DDS Security 표준을 통해 데이터버스 자체에 내장된 강력하고 세분화된 보안 모델을 제공하여, 이러한 위협으로부터 시스템을 보호합니다.
DDS Security는 데이터 중심 통신 환경의 고유한 특성을 고려하여 설계된 보안 표준입니다.33 이는 전통적인 네트워크 보안 방식(예: VPN, TLS)과는 다른 접근 방식을 취합니다. 모든 통신을 하나의 암호화된 터널에 넣는 대신, DDS Security는 데이터 흐름 자체에 보안 속성을 부여하여 훨씬 더 정교한 제어를 가능하게 합니다. RTI Connext Secure는 이 OMG DDS Security 표준을 완벽하게 준수하는 상용 구현체입니다.33
DDS Security 프레임워크는 시스템을 보호하기 위한 다섯 가지 핵심 서비스를 정의하며, 이는 ‘보안의 다섯 기둥’으로 불립니다. RTI Connext Secure는 이 모든 서비스를 플러그인 형태로 제공합니다.34
DomainParticipant)이 신뢰할 수 있는 주체인지 확인합니다. 일반적으로 공유된 인증 기관(Certificate Authority, CA)이 서명한 X.509 디지털 인증서 기반의 공개 키 기반 구조(PKI)를 사용하여 각 참여자의 신원을 검증합니다. 인증되지 않은 참여자는 데이터버스에 아예 접근할 수 없습니다.Topic을 발행(publish)하거나 구독(subscribe)할 수 있는지, 어떤 Partition에 참여할 수 있는지를 세밀하게 통제합니다. 이를 통해 최소 권한 원칙을 시스템 전반에 강제할 수 있습니다.DDS Security 모델은 전통적인 보안 방식에 비해 몇 가지 중요한 아키텍처적 이점을 제공합니다.
세분화된 제어 (Fine-grained Control): 가장 큰 장점은 보안 정책을 데이터버스 전체가 아닌, 개별 Topic이나 Partition 단위로 적용할 수 있다는 것입니다.33 이는 민감한 제어 명령어
Topic은 최고 수준으로 암호화하고 접근을 통제하는 반면, 덜 중요한 상태 정보 Topic은 무결성 검사만 수행하거나 아예 보안을 적용하지 않는 유연한 구성을 가능하게 합니다. 모든 데이터를 무차별적으로 암호화하는 TLS나 VPN 방식에 비해 성능 오버헤드를 최소화하고 시스템 자원을 효율적으로 사용할 수 있습니다.34
분산형 아키텍처 (Decentralized): DDS의 P2P 특성과 마찬가지로, DDS Security 역시 중앙 인증 서버나 키 관리 서버에 의존하지 않습니다.33 각 참여자는 자신의 보안 자격 증명(credential)을 가지고 다른 참여자와 직접 보안 핸드셰이크를 수행합니다. 이는 중앙 서버로 인한 단일 장애점이나 성능 병목을 제거하여, 시스템의 가용성과 확장성을 높입니다.
결론적으로, RTI Connext Secure는 데이터 중심 아키텍처에 최적화된 포괄적이고 강력한 보안 솔루션을 제공합니다. 이를 통해 개발자는 복잡한 보안 로직을 직접 구현하는 부담에서 벗어나, 선언적인 정책 설정을 통해 시스템의 보안 요구사항을 만족시킬 수 있습니다.
RTI Connext DDS는 극도의 저지연과 고처리량이 요구되는 실시간 시스템을 위해 설계되었습니다. 하지만 최상의 성능을 이끌어내기 위해서는 미들웨어의 동작 방식과 네트워크의 특성을 이해하고, 그에 맞는 적절한 튜닝을 적용하는 ‘성능 엔지니어링’ 과정이 필수적입니다. 이 장에서는 특히 대용량 데이터 전송과 관련된 주요 과제를 해결하고, 시스템 성능을 최적화하기 위한 실질적인 가이드라인을 제시합니다.
분산 시스템에서 비디오 스트림, LIDAR 포인트 클라우드, 고해상도 이미지 등 대용량 데이터를 전송하는 것은 흔한 일입니다. 이때 데이터의 크기가 네트워크의 최대 전송 단위(Maximum Transmission Unit, MTU)를 초과하면 ‘단편화(fragmentation)’가 발생합니다.
DataWriter는 대용량 데이터를 전송하기 전에 작은 ‘DDS 단편(DDS fragment)’들로 분할하여 각각을 별도의 네트워크 패킷에 담아 보냅니다. 이 방식의 핵심 이점은 DDS의 신뢰성 프로토콜과 연동된다는 점입니다. RELIABLE QoS를 사용할 경우, 수신 측 DataReader는 유실된 단편만 식별하여 DataWriter에게 재전송을 요청할 수 있습니다. 전체 데이터를 다시 보내는 대신, 유실된 작은 조각만 복구하므로 네트워크 대역폭을 매우 효율적으로 사용할 수 있습니다.60DDS 단편화를 활성화하는 방법은 전송 프로토콜의 message_size_max 속성을 네트워크 MTU(일반적으로 이더넷 환경에서 약 1500 bytes)와 유사한 값으로 설정하는 것입니다. 이렇게 하면 DDS는 이 크기를 초과하는 데이터를 자동으로 단편화하여 전송합니다.
DDS에서 DataWriter의 write() 함수를 호출하면 기본적으로는 동기(synchronous) 방식으로 동작합니다. 즉, write() 함수는 데이터가 미들웨어의 내부 큐를 거쳐 네트워크 전송 버퍼로 복사될 때까지 블로킹(blocking)될 수 있습니다. 이는 애플리케이션의 실시간성을 저해하는 요인이 될 수 있습니다.
비동기 발행 (Asynchronous Publishing): PUBLISH_MODE QoS 정책을 ASYNCHRONOUS_PUBLISH_MODE_QOS로 설정하면, write() 함수는 데이터를 내부 큐에 넣고 즉시 반환됩니다.62 실제 데이터 전송은
Publisher에 의해 관리되는 별도의 백그라운드 스레드가 담당합니다.63 이 방식의 장점은 다음과 같습니다 62:
흐름 제어 (FlowControllers): 비동기 발행은 ‘흐름 제어기(FlowController)’와 함께 사용될 때 더욱 강력한 성능 제어 능력을 발휘합니다.63 흐름 제어기는 비동기 발행 스레드가 데이터를 전송하는 속도를 조절하는 역할을 합니다. 이는 매우 빠른
DataWriter가 상대적으로 느린 DataReader나 네트워크 자체를 압도하여 패킷 손실을 유발하는 ‘임피던스 불일치(impedance mismatch)’ 문제를 해결하는 데 필수적입니다.61 RTI Connext는
DDS_FIXED_RATE_FLOW_CONTROLLER_NAME과 같이 미리 정의된 흐름 제어기를 제공하며, 사용자가 직접 커스텀 흐름 제어기를 구현할 수도 있습니다.
최적의 성능을 달성하기 위해서는 시스템 전반에 걸친 체계적인 튜닝이 필요합니다. 다음은 65, 65, 65의 내용을 종합한 핵심 튜닝 절차입니다.
rtiperftest 도구는 처리량(throughput)과 지연 시간(latency)을 측정하는 표준화된 방법을 제공합니다.65 이를 통해 “현재 우리 시스템이 기대치에 미치지 못하고 있는가?”에 대한 객관적인 데이터를 확보할 수 있습니다.sysctl.conf 파일을, Windows에서는 레지스트리를 수정하여 버퍼 크기를 튜닝할 수 있습니다.67allow_interfaces 및 deny_interfaces 속성을 사용하여 DDS가 통신에 사용할 NIC를 명시적으로 지정해야 합니다.65RELIABLE QoS가 불필요한 곳에 사용되고 있지는 않은지, heartbeat_period와 같은 신뢰성 관련 파라미터가 현재 네트워크 상황에 적합한지 검토해야 합니다. 작은 샘플을 고속으로 전송할 때는 batching 기능을 활성화하여 처리량을 높일 수 있습니다.65RTI Log Parser를 사용하면, 내부 동작에 대한 상세한 정보를 얻고 오류 메시지를 쉽게 분석할 수 있습니다.68성능 튜닝은 단 한 번의 설정으로 끝나는 과정이 아니라, 벤치마킹, 튜닝, 진단을 반복하며 시스템에 가장 적합한 구성을 찾아가는 지속적인 엔지니어링 활동입니다.
자율주행차, 항공기, 의료 로봇과 같이 인간의 생명과 안전에 직결되는 시스템에서 소프트웨어의 오작동은 재앙적인 결과를 초래할 수 있습니다. 이러한 시스템을 ‘안전 필수(safety-critical)’ 시스템이라 하며, 이들을 개발할 때는 ‘기능 안전(Functional Safety)’이라는 엄격한 공학적 원칙을 따라야 합니다. 이 장에서는 RTI Connext DDS가 어떻게 이러한 엄격한 안전 요구사항을 충족시키고, 특히 자동차 산업의 핵심 표준인 ISO 26262를 지원하는지 살펴봅니다.
기능 안전은 시스템의 전기/전자 부품 오작동으로 인해 발생할 수 있는 불합리한 위험을 방지하는 것을 목표로 합니다. ISO 26262는 자동차 산업을 위해 특별히 제정된 기능 안전 국제 표준으로, 시스템, 하드웨어, 소프트웨어 개발의 전 과정에 걸쳐 따라야 할 요구사항과 프로세스를 정의합니다.69
이 표준은 위험 분석을 통해 ASIL(Automotive Safety Integrity Level, 자동차 안전 무결성 수준)이라는 위험 등급을 A(가장 낮음)부터 D(가장 높음)까지 부여합니다. 시스템의 각 안전 관련 기능은 할당된 ASIL 등급에 따라 정해진 수준의 엄격한 개발 및 검증 절차를 거쳐야 합니다.69
현대의 자동차는 수많은 전자제어장치(ECU)와 소프트웨어로 구성된 복잡한 분산 시스템입니다. 이들 간의 안정적이고 예측 가능한 통신은 기능 안전을 달성하는 데 있어 매우 중요합니다. 따라서 통신을 담당하는 미들웨어 역시 기능 안전 요구사항을 만족시켜야 합니다.
RTI는 이러한 안전 필수 시스템 시장의 요구에 부응하기 위해 Connext DDS Cert라는 특화된 제품을 제공합니다.28 이 제품은 ISO 26262 ASIL D와 같은 최고 수준의 안전 인증을 목표로 하는 시스템에 사용될 수 있도록 설계되었습니다. Connext DDS Cert는 단순히 소프트웨어 라이브러리만 제공하는 것이 아니라, 인증 기관에 제출해야 하는 방대한 양의 설계 문서, 테스트 결과, 분석 보고서 등 인증 증거 자료(certification evidence)를 함께 제공하여 고객의 인증 과정을 크게 단축하고 비용을 절감해줍니다.36
또한, 자동차 소프트웨어 플랫폼의 핵심 표준인 AUTOSAR는 DDS를 통신 미들웨어 중 하나로 채택하면서, DDS 구현체가 ISO 26262를 준수하는 종단간(End-to-End) 데이터 보호 메커니즘을 지원해야 한다고 명시하고 있습니다.72 이는 DDS가 자동차 산업의 기능 안전 생태계에서 핵심적인 역할을 수행하고 있음을 보여줍니다. eProsima의 Safe DDS와 같은 다른 벤더의 제품들도 ISO 26262 ASIL D 준수를 목표로 개발되고 있습니다.73
Connext DDS의 놀라운 점은, 별도의 안전 메커니즘을 추가하는 것이 아니라 표준 DDS QoS 정책들을 조합하는 것만으로도 강력한 안전 패턴을 구현할 수 있다는 것입니다. 이는 DDS의 아키텍처 자체가 내결함성과 예측 가능성을 염두에 두고 설계되었기 때문입니다. [44]과 [44]은 자동차 시스템에서 이러한 패턴이 어떻게 구현되는지 구체적으로 설명합니다.
DataWriter와 예비(redundant) 안전 채널의 DataWriter를 준비합니다. 주 DataWriter에 더 높은 OWNERSHIP_STRENGTH를, 예비 DataWriter에 더 낮은 strength를 부여하고, OWNERSHIP 정책은 EXCLUSIVE로 설정합니다. 또한 LIVELINESS 정책을 활성화합니다.strength를 가진 주 DataWriter가 데이터 인스턴스의 소유권을 가지고 데이터를 발행합니다. 만약 주 DataWriter가 다운되거나 네트워크 연결이 끊겨 LIVELINESS를 잃게 되면, DDS 미들웨어는 이를 즉시 감지하고 소유권을 다음으로 strength가 높은 예비 DataWriter에게 자동으로 넘겨줍니다. 차량 액추에이터는 이제 예비 채널의 데이터를 수신하여 중단 없이 안전한 상태로 차량을 제어할 수 있습니다.EXCLUSIVE OWNERSHIP과 OWNERSHIP_STRENGTH 정책을 사용합니다. 시스템에는 별도의 ‘안전 감시자(safety checker)’ 노드가 존재합니다.DataWriter가 발행하는 데이터를 모니터링합니다. 만약 데이터가 허용 범위를 벗어나거나, DEADLINE QoS를 위반하여 제때 데이터를 발행하지 못하는 등 비정상적인 동작을 감지하면, 안전 감시자는 즉시 주 DataWriter보다 더 높은 OWNERSHIP_STRENGTH를 가진 건강한(healthy) DataWriter를 활성화시킵니다. 이 새로운 DataWriter는 즉시 데이터 인스턴스의 소유권을 ‘인계(takeover)’받아 올바른 제어 값을 발행하기 시작하여, 오작동하는 컴포넌트의 영향을 차단합니다.Deadline, Liveliness, Ownership QoS 정책들을 모두 조합하면 더욱 정교한 안전 메커니즘을 구축할 수 있습니다. 안전 감시자는 Liveliness 상태를 모니터링하여 ‘조용한 실패’ 시에는 장애 극복(failover)을, Deadline 위반이나 데이터 이상 감지 시에는 인계(takeover)를 유연하게 트리거할 수 있습니다.이처럼 DDS는 단순한 통신 프로토콜을 넘어, 견고하고 고장 방지 기능이 내장된 시스템 아키텍처를 구축하기 위한 강력한 프레임워크입니다. QoS 정책을 통해 복잡한 안전 로직을 선언적으로 구현할 수 있는 능력은, DDS가 왜 자동차, 항공, 국방과 같은 안전 필수 산업에서 신뢰받는 기술로 자리 잡았는지를 명확히 보여줍니다. 아키텍트의 관점에서 이는 직접 안전 로직을 개발하고 인증받는 데 드는 막대한 비용과 위험을 줄여주는 결정적인 이점입니다.
RTI Connext DDS의 기술적 깊이를 이해했다면, 이제는 시야를 넓혀 이 기술이 실제 산업 현장에서 어떻게 사용되고, 다른 기술들과 비교하여 어떤 위치에 있으며, 주요 개발 프레임워크와 어떻게 통합되는지 살펴볼 차례입니다. 이 파트는 아키텍트와 의사결정자가 Connext DDS를 전략적인 관점에서 평가하고, 자신의 프로젝트에 적합한지 판단하는 데 필요한 거시적인 시각을 제공합니다.
Connext DDS는 이론적인 기술이 아니라, 전 세계 수많은 미션 크리티컬 시스템의 심장부에서 활약하고 있는 검증된 기술입니다. 다양한 산업 분야에서의 성공적인 적용 사례는 DDS의 유연성과 강력함을 증명합니다.
현대 자동차는 ‘바퀴 달린 데이터 센터’로 진화하고 있으며, DDS는 이러한 소프트웨어 정의 차량(SDV)의 핵심 신경망 역할을 합니다.
가장 높은 수준의 신뢰성과 보안이 요구되는 항공우주 및 국방 분야는 DDS 기술이 가장 먼저, 그리고 가장 깊숙이 뿌리내린 영역입니다.
스마트 팩토리, 에너지, 로보틱스 분야에서도 DDS는 시스템의 지능화와 자동화를 이끄는 핵심 기술로 활약하고 있습니다.
의료 분야에서 DDS는 환자의 안전을 개선하고 의료 서비스의 효율성을 높이는 데 기여하고 있습니다.
이처럼 RTI Connext DDS는 다양한 산업 분야에서 가장 까다로운 기술적 과제들을 해결하며 그 가치를 입증하고 있습니다.
시스템 아키텍트는 자신이 선택한 기술뿐만 아니라, 그 대안이 될 수 있는 다른 기술들의 장단점을 명확히 이해하고 있어야 합니다. 이를 통해 기술 선택의 타당성을 입증하고, 특정 문제에 가장 적합한 도구를 선택할 수 있습니다. 이 장에서는 DDS를 널리 사용되는 다른 통신 프로토콜들과 비교 분석합니다.
IoT 시스템에서 가장 자주 비교되는 두 프로토콜입니다. 둘 다 발행-구독 모델을 사용하지만, 그 철학과 아키텍처는 근본적으로 다릅니다. 4의 분석을 기반으로 다음과 같이 비교할 수 있습니다.
이상적인 사용 사례: DDS는 자율주행차, 공장 자동화, 전투 시스템과 같이 엣지에서의 실시간 제어와 데이터 공유에 적합합니다. MQTT는 수많은 저사양 센서로부터 데이터를 수집하여 클라우드로 전송하는 원격 측정(telemetry) 시나리오에 이상적입니다.4
사용 사례: DDS는 실시간으로 변화하는 상태를 다수의 참여자에게 지속적으로 공유하는 데 사용됩니다. REST는 특정 리소스에 대한 생성, 조회, 수정, 삭제(CRUD)와 같은 트랜잭션 기반의 일대일 상호작용에 적합합니다.6
DDS는 표준이므로 여러 벤더가 구현체를 제공합니다. RTI Connext 외의 주요 벤더는 다음과 같습니다.
RTPS 와이어 프로토콜 표준 덕분에 이들 벤더 간의 기본적인 데이터 교환은 보장됩니다. 하지만 공유 메모리 전송과 같은 벤더 고유의 최적화 기능이나 고급 QoS 정책의 해석 방식, 그리고 개발 도구의 성숙도 등에서는 차이가 있을 수 있습니다.91 RTI Connext는 특히 풍부한 개발 및 분석 도구, 상세한 문서, 전문적인 기술 지원, 그리고 안전 필수 시스템을 위한 인증 지원 측면에서 강점을 가지는 것으로 평가받습니다.89
아래 표는 주요 통신 프로토콜의 특성을 한눈에 비교하여 아키텍트의 기술 선택을 돕습니다. 이 표는 “어떤 기술이 더 좋은가?”가 아니라 “어떤 문제가 주어졌을 때 어떤 기술이 가장 적합한가?”라는 질문에 답하는 데 중점을 둡니다.
| 프로토콜 | 아키텍처 | 데이터 모델 | 주요 사용 사례 | 핵심 강점 | 핵심 약점 |
|---|---|---|---|---|---|
| DDS | P2P, 브로커 없음 | 데이터 중심, 타입-안전, 풍부한 QoS | 실시간 제어, 자율 시스템, 미션 크리티컬 데이터 공유 | 저지연, 고신뢰성, 확장성, 세밀한 QoS 제어 | 개념적 복잡성, 경량 기기에는 무거울 수 있음 |
| MQTT | 허브-앤-스포크, 브로커 기반 | 메시지 중심, 경량, 단순 토픽 | IoT 원격 측정, 클라우드 데이터 수집 | 단순함, 저대역폭/불안정 네트워크에 강함 | 브로커가 단일 장애점/병목, 실시간 제어 부적합 |
| REST | 클라이언트-서버 | 리소스 기반, 무상태(Stateless) | 웹 서비스, CRUD 연산, 공개 API | 단순성, 범용성, HTTP 기반으로 접근 용이 | 오버헤드 큼, 지속적인 데이터 스트림에 비효율적 |
| gRPC | 클라이언트-서버 (RPC) | 서비스/함수 기반 | 마이크로서비스 간 통신, 고성능 API 호출 | 고성능, 언어/플랫폼 독립적 API 정의 | Pub/Sub 패턴 부재, 다대다 통신에 부적합 |
RTI Connext DDS는 독립적인 기술로도 강력하지만, 로보틱스와 제어 시스템 설계 분야의 두 거대 프레임워크인 ROS 2와 Simulink와의 긴밀한 통합을 통해 그 생태계를 더욱 확장하고 있습니다. 이러한 통합은 각 프레임워크 사용자들이 DDS의 강력한 실시간 통신 기능을 자신들의 익숙한 개발 환경에서 원활하게 활용할 수 있도록 셔틀 역할을 합니다.
ROS(Robot Operating System)는 로봇 소프트웨어 개발을 위한 사실상의 표준 프레임워크입니다. 그 차세대 버전인 ROS 2는 아키텍처의 근본적인 변화를 꾀했는데, 그중 가장 중요한 것이 바로 통신 미들웨어로 DDS를 채택한 것입니다.80
Simulink는 제어 시스템, 신호 처리, 동적 시스템 시뮬레이션을 위한 모델 기반 설계(Model-Based Design, MBD) 환경으로, 특히 자동차 및 항공우주 산업에서 널리 사용됩니다. MathWorks는 DDS와의 통합을 위해 DDS Blockset을 제공합니다.
RTI는 MathWorks 사용자를 위해 전용 라이선스 프로그램과 기술 지원을 제공하여 99, 모델 기반 설계를 통해 개발된 정교한 제어 시스템이 Connext DDS의 강력한 실시간 데이터버스와 원활하게 통합될 수 있도록 지원합니다. 이는 복잡한 시스템의 개발 생산성과 신뢰성을 크게 향상시키는 강력한 조합입니다.
지금까지 DDS의 이론적 배경, RTI Connext의 기능, 그리고 실제 산업 적용 사례까지 폭넓게 살펴보았습니다. 마지막 파트에서는 이론을 넘어, DDS를 처음 접하는 개발자가 실제로 기술을 사용해보고 일반적인 문제에 부딪혔을 때 해결할 수 있도록 돕는 실용적인 가이드를 제공합니다. 이 장들은 신규 사용자의 학습 곡선을 완만하게 만들고, DDS 개발의 초기 장벽을 낮추는 것을 목표로 합니다.
복잡한 기술을 배울 때 가장 좋은 방법은 직접 사용해보는 것입니다. 이 장에서는 코딩 없이 DDS의 핵심 개념을 시각적으로 체험하는 것부터 간단한 애플리케이션을 직접 빌드하는 과정까지, 새로운 사용자를 위한 단계별 온보딩 경로를 제시합니다.
RTI Shapes Demo는 코딩 한 줄 없이 DDS의 핵심 개념을 직관적으로 이해할 수 있도록 설계된 강력한 그래픽 도구입니다.102 사용자는 여러 개의 Shapes Demo 창을 띄워놓고, 각 창에서 도형(Square, Circle, Triangle)을 발행하거나 구독하는 것만으로 복잡한 분산 시스템의 동작을 시뮬레이션할 수 있습니다.
RELIABLE과 BEST_EFFORT로 변경하며 통신이 어떻게 달라지는지 실험해볼 수 있습니다.Shapes Demo는 DDS의 동적이고 데이터 중심적인 특성을 눈으로 직접 확인시켜 줌으로써, 추상적인 개념을 구체적인 경험으로 바꾸어주는 최고의 학습 도구입니다.
개념을 이해했다면, 이제 간단한 코드를 작성해볼 차례입니다. RTI는 GitHub를 통해 단계별 “Getting Started” 예제를 제공하여 신규 개발자가 쉽게 따라 할 수 있도록 돕습니다.104 “초콜릿 공장(Chocolate Factory)”이라는 시나리오를 바탕으로 한 이 예제들은 DDS 애플리케이션 개발의 전형적인 워크플로우를 안내합니다.
rtiddsgen)를 실행하여 IDL 파일로부터 특정 프로그래밍 언어(C++, Java 등)의 소스 코드를 생성합니다.DomainParticipant, Publisher, Subscriber, DataWriter, DataReader 등의 DDS 엔티티를 생성하고, 데이터를 write()하거나 read()/take()하는 애플리케이션 로직을 구현합니다.이 과정을 통해 개발자는 DDS API의 기본적인 사용법을 익히고, 자신의 개발 환경을 설정하는 방법을 배울 수 있습니다.
모든 복잡한 기술에는 학습 곡선이 따르며, DDS도 예외는 아닙니다. 특히 분산 시스템의 특성상 문제의 원인이 다양하고 복잡할 수 있습니다. 이 장에서는 신규 사용자들이 가장 흔하게 겪는 문제들을 식별하고, 이를 해결하기 위한 체계적인 접근법과 유용한 도구들을 소개합니다.
DDS를 처음 사용할 때 가장 빈번하게 마주치는 문제는 “발행자는 데이터를 보내고 있는데, 왜 구독자가 아무것도 받지 못하는가?”입니다. 이는 대부분 참여자 간의 ‘검색(Discovery)’ 과정이 실패했기 때문입니다. 109와 [110]의 내용을 바탕으로 다음과 같은 체크리스트를 통해 문제의 원인을 체계적으로 점검할 수 있습니다.
initial_peers): 멀티캐스트를 사용할 수 없는 환경이라면, 유니캐스트를 사용하도록 명시적으로 설정해야 합니다. NDDS_DISCOVERY_PEERS 환경 변수나 XML QoS 파일의 <initial_peers> 태그에 상대방 참여자의 IP 주소를 직접 지정해주면, 멀티캐스트 없이도 검색이 가능합니다.111DomainParticipant가 반드시 동일한 도메인 ID를 사용하고 있는지 확인해야 합니다. ID가 다르면 완전히 다른 가상 네트워크에 있는 것과 같습니다.Partition QoS를 사용하고 있다면, 발행자와 구독자가 최소 하나 이상의 공통된 파티션 이름을 가지고 있는지 확인해야 합니다.DataWriter와 DataReader의 QoS 정책이 서로 호환되지 않으면 연결이 성립되지 않습니다. 예를 들어, DataReader가 RELIABLE을 요청하는데 DataWriter가 BEST_EFFORT를 제공하는 경우가 대표적입니다.문제의 원인을 진단할 때, RTI가 제공하는 강력한 도구들을 활용하면 시간과 노력을 크게 절약할 수 있습니다.
RTI Admin Console / Monitor: 이 그래픽 도구는 실행 중인 데이터버스의 ‘지도’와 같습니다.65 어떤 참여자들이 어떤 토픽을 발행/구독하고 있는지, 그들의 QoS 설정은 무엇인지, 그리고 성공적으로 매칭되었는지 여부를 시각적으로 보여줍니다. 특히 ‘Match Analysis’ 기능은 QoS 불일치로 인해 매칭이 실패했을 때, 어떤 정책이 문제인지 정확히 알려주어 디버깅에 결정적인 단서를 제공합니다.68
로깅 및 RTI Log Parser: 애플리케이션에서 DDS 로깅을 활성화하면 미들웨어 내부 동작에 대한 상세한 로그를 얻을 수 있습니다. 하지만 이 로그는 양이 방대하고 해석하기 어려울 수 있습니다. RTI Log Parser는 이 원시 로그를 입력받아, 시간 순서에 따라 이벤트(예: 패킷 수신, 누락, 재전송 요청 등)를 보기 쉽게 재구성하고 분석해주는 커맨드라인 도구입니다. 이를 통해 네트워크 수준의 문제를 깊이 있게 파악할 수 있습니다.68
RTI Perftest: 애플리케이션 코드에 문제가 있는지, 아니면 네트워크나 DDS 구성 자체에 문제가 있는지 분리하여 테스트하고 싶을 때 사용하는 도구입니다.66
rtiperftest를 발행자와 구독자 머신에서 각각 실행하여 기본적인 데이터 통신이 이루어지는지 먼저 확인합니다. 만약 rtiperftest는 통신이 되는데 내 애플리케이션은 안 된다면, 문제는 애플리케이션 코드나 QoS 설정에 있을 가능성이 높습니다. 만약 rtiperftest조차 통신이 안 된다면, 방화벽이나 네트워크 설정과 같은 더 근본적인 문제를 먼저 해결해야 합니다.109
이러한 체계적인 문제 해결 접근법과 강력한 디버깅 도구들은 개발자가 DDS 시스템을 구축하고 운영하면서 마주치는 불가피한 문제들을 효율적으로 해결하고, 시스템의 안정성을 확보하는 데 큰 도움이 될 것입니다.
이 보고서는 RTI Connext DDS를 처음 접하는 기술 전문가를 위해, 그 근간을 이루는 데이터 중심 철학부터 핵심 아키텍처, 고급 기능, 그리고 실제 산업 적용 사례에 이르기까지 포괄적인 분석을 제공했습니다. 분석을 통해 드러난 RTI Connext DDS의 본질은 단순히 또 하나의 메시징 라이브러리가 아니라, 확장 가능하고 신뢰성 높으며 안전한 실시간 분산 시스템을 구축하기 위한 포괄적인 소프트웨어 프레임워크라는 점입니다.
DDS가 제시하는 패러다임의 전환은 명확합니다. 통신의 복잡성을 애플리케이션 개발자의 어깨에서 덜어내어, 고도로 최적화되고 표준화된 미들웨어 계층으로 이전시키는 것입니다. 이는 다음과 같은 전략적 가치를 창출합니다.
Ownership, Liveliness, Deadline과 같은 QoS 정책을 조합하면, 미션 크리티컬 시스템이 요구하는 정교한 고가용성 및 내결함성 메커니즘을 선언적으로 구현할 수 있습니다. 이는 수많은 실제 시스템에서 검증된 강력한 아키텍처 패턴입니다.물론, RTI Connext DDS를 채택하는 것은 전략적인 아키텍처 결정입니다. 그 강력함을 온전히 활용하기 위해서는 데이터 중심 원칙과 데이터 모델링 모범 사례에 대한 초기 학습 투자가 필요합니다. 그러나 자율 시스템, 지능형 의료기기, 차세대 국방 시스템, 스마트 인프라와 같이 점점 더 복잡해지고 서로 연결되는 현대 시스템의 요구사항을 고려할 때, 이러한 투자는 단순한 비용이 아니라 미래를 위한 현명한 투자입니다.
결론적으로, RTI Connext DDS는 차세대 지능형, 자율형, 미션 크리티컬 시스템을 구축하고자 하는 조직에게, 시스템의 복잡성을 관리하고, 신뢰성을 확보하며, 장기적인 유지보수성과 진화 가능성을 보장하는 가장 성숙하고 강력한 솔루션 중 하나를 제공합니다. 이는 단순한 기술 선택을 넘어, 성공적인 시스템 아키텍처를 위한 전략적 기반을 마련하는 것입니다.
| DDS and MQTT: Basics, Challenges and Integration Benefits | EMQ - EMQX, accessed July 1, 2025, https://www.emqx.com/en/blog/navigating-dds-basics-limitations-and-integration-with-mqtt |
| How DDS simplifies multi - ECU E/E architectures | TTTech Auto, accessed July 1, 2025, https://www.tttech-auto.com/knowledge-platform/how-dds-simplifies-multi-ecu-ee-architectures |
| Architecture of DDS When we create a DCPS DDS application, the… | Download Scientific Diagram - ResearchGate, accessed July 1, 2025, https://www.researchgate.net/figure/Architecture-of-DDS-When-we-create-a-DCPS-DDS-application-the-following-DDS-entities-are_fig2_267846873 |
| Data Distribution Service for Complex Systems | DDS Standard | RTI, accessed July 1, 2025, https://www.rti.com/products/dds-standard |
| Software Framework for Physical AI Systems | RTI - Real-Time Innovations, accessed July 1, 2025, https://www.rti.com/industries |
| What do I need to send Large Data successfully? | Data Distribution Service (DDS) Community RTI Connext Users, accessed July 1, 2025, https://community.rti.com/kb/what-do-i-need-send-large-data-successfully |
| Three Simple Steps to Achieving Peak DDS Performance | RTI, accessed July 1, 2025, https://www.rti.com/blog/three-simple-steps-to-achieving-peak-dds-performance/ |
| Tune Your OS for Performance | Data Distribution Service (DDS) Community RTI Connext Users, accessed July 1, 2025, https://community.rti.com/best-practices/tune-your-os-performance |
| Useful tools to debug DDS issues | Data Distribution Service (DDS) Community RTI Connext Users, accessed July 1, 2025, https://community.rti.com/howto/useful-tools-debug-dds-issues |
| ISO 26262 – Functional Safety for Automotive | TÜV SÜD - TUV Sud, accessed July 1, 2025, https://www.tuvsud.com/en-us/services/functional-safety/iso-26262-automotive |
| Future Airborne Capability Environment® (FACE) | www.opengroup.org, accessed July 1, 2025, https://www.opengroup.org/face |
| ROS 2: What is DDS | Data Distribution Service (DDS) Community RTI Connext Users, accessed July 1, 2025, https://community.rti.com/page/ros-2-what-dds |
| Robot Operating System 2 (ROS 2) Architecture | by Huseyin Kutluca - Medium, accessed July 1, 2025, https://medium.com/software-architecture-foundations/robot-operating-system-2-ros-2-architecture-731ef1867776 |
| A Security Analysis of the Data Distribution Service (DDS) Protocol | Trend Micro, accessed July 1, 2025, https://documents.trendmicro.com/assets/white_papers/wp-a-security-analysis-of-the-data-distribution-service-dds-protocol.pdf |
| Learn About Basic DDS Concepts - Interactive Shapes Demo | RTI - Real-Time Innovations, accessed July 1, 2025, https://www.rti.com/free-trial/shapes-demo |
| RTI Shapes Demo: User’s Manual | Network Architecture | System Software - Scribd, accessed July 1, 2025, https://www.scribd.com/document/638972276/Untitled |
| Forums | Data Distribution Service (DDS) Community RTI Connext Users, accessed July 1, 2025, https://community.rti.com/forum |
Typical Reasons for Connext DDS Discovery Failing and Suggested Solutions, accessed July 1, 2025, https://community.rti.com/howto/typical-reasons-connext-dds-discovery-failing-and-suggested-solutions