# Data Distribution Service (DDS) 개요

#### 개요

Data Distribution Service(DDS)는 객체 관리 그룹(Object Management Group, OMG)에서 정의한 데이터 중심의 퍼블리시-서브스크라이브(pub-sub) 통신 패러다임을 위한 미들웨어 표준이다. 이 표준은 네트워크 상의 노드들 간에 데이터를 효율적으로 전달하기 위해 설계되었으며, 실시간 시스템을 염두에 두고 개발되었다. DDS는 메시지 중심의 통신 패러다임과 달리, 데이터 모델링과 QoS(Quality of Service) 정책을 통해 데이터 흐름을 관리하는 것을 목표로 한다.

#### DDS의 아키텍처

DDS는 퍼블리시-서브스크라이브 모델에 기반한 분산 시스템에서의 데이터 전달을 관리하기 위해 다양한 컴포넌트를 사용한다. 이 아키텍처는 크게 Domain Participant, Publisher, Subscriber, DataWriter, DataReader, 그리고 Topic 등으로 구성된다. 각각의 컴포넌트는 DDS의 핵심 기능을 수행하며, 이들 간의 상호작용을 통해 데이터를 배포하고 수신한다.

* **Domain Participant**: DDS에서 통신하는 엔티티가 소속된 도메인을 정의한다. 이는 DDS 인스턴스의 주요 엔트리 포인트이며, 도메인 안에서 퍼블리셔와 서브스크라이버를 생성하고 관리한다.
* **Publisher**: 데이터를 퍼블리싱하기 위한 인터페이스로, 하나 이상의 DataWriter를 포함할 수 있다. 이를 통해 퍼블리셔는 특정 토픽에 대한 데이터를 전송한다.
* **Subscriber**: 데이터를 구독하기 위한 인터페이스로, 하나 이상의 DataReader를 포함할 수 있다. 이를 통해 서브스크라이버는 퍼블리셔가 보낸 데이터를 수신한다.
* **DataWriter**: 특정 토픽에 데이터를 쓰는 기능을 수행하며, 데이터의 실제 전송을 담당한다.
* **DataReader**: 특정 토픽에 데이터를 읽는 기능을 수행하며, 서브스크라이버가 수신한 데이터를 처리한다.
* **Topic**: 퍼블리셔와 서브스크라이버 간의 데이터 교환이 이루어지는 논리적 채널을 의미하며, 데이터의 타입과 이름을 정의한다.

#### DDS의 데이터 모델링

DDS는 데이터 중심 아키텍처를 채택하고 있으며, 데이터 모델링을 통해 통신의 구조와 의미를 정의한다. DDS의 데이터 모델링은 IDL(Interface Definition Language)을 사용하여 데이터 타입을 정의하고, 이를 기반으로 데이터의 구조를 설계한다. DDS는 데이터 모델링을 통해 데이터의 구조적 일관성을 유지하며, 퍼블리셔와 서브스크라이버 간의 데이터 호환성을 보장한다.

IDL을 사용하면 데이터 타입은 기본 데이터 타입(int, float 등)뿐만 아니라 복합 데이터 타입(구조체, 배열 등)도 정의할 수 있다. 이는 시스템 간의 데이터 교환에서 데이터의 의미와 형식을 명확하게 규정할 수 있도록 한다. 또한, 이 모델링은 각 데이터 타입에 대해 QoS 정책을 적용할 수 있게 하여, 데이터 전송의 신뢰성, 지연, 우선순위 등을 관리할 수 있게 한다.

#### Quality of Service (QoS) 정책

DDS는 QoS 정책을 통해 퍼블리셔와 서브스크라이버 간의 데이터 흐름을 제어한다. QoS는 데이터 전달의 신뢰성, 효율성, 시기적 적합성 등을 보장하기 위한 다양한 파라미터들을 정의하며, 이를 통해 DDS는 애플리케이션의 요구 사항에 맞는 데이터 전송을 조율한다.

* **Reliability (신뢰성)**: DDS는 Best Effort와 Reliable 두 가지 신뢰성 모드를 제공한다. Best Effort 모드는 가능한 한 데이터를 전송하되, 손실이 발생할 수 있음을 허용하는 반면, Reliable 모드는 데이터가 반드시 수신될 것을 보장한다.
* **Durability (내구성)**: 퍼블리셔가 전송한 데이터의 생명 주기를 관리하는 파라미터로, 데이터가 얼마나 오랫동안 유지될지를 결정한다. DDS는 Volatile, Transient Local, Transient, Persistent 네 가지 내구성 수준을 지원한다.
* **Latency Budget (지연 예산)**: 데이터 전송의 지연 시간을 제어하는 파라미터로, DDS가 데이터를 얼마나 빨리 전송해야 하는지에 대한 시간 제약을 정의한다.
* **Liveliness (활동성)**: 퍼블리셔와 서브스크라이버의 생존 여부를 감지하기 위한 메커니즘으로, 통신 엔티티들이 여전히 활성 상태인지 확인하기 위해 주기적으로 확인 메시지를 전송한다.
* **Deadline (기한)**: 데이터가 수신되어야 하는 최대 시간을 설정하는 파라미터로, 서브스크라이버는 이 시간 내에 데이터를 수신하지 못하면 문제를 보고한다.

이 외에도 DDS는 Ownership, Time-Based Filter, History, Resource Limits 등 다양한 QoS 정책을 제공하여, 다양한 통신 요구사항을 충족시킬 수 있다.

#### 데이터 전달 메커니즘

DDS는 퍼블리시-서브스크라이브 모델에서 데이터 전달의 효율성을 높이기 위해 여러 가지 데이터 전달 메커니즘을 제공한다. 이 메커니즘들은 주로 데이터의 생명주기 관리와 전달의 최적화를 목표로 하며, 네트워크 트래픽을 최소화하면서도 데이터의 신뢰성을 유지하는 데 중점을 둔다.

* **Multicast 지원**: DDS는 네트워크 자원의 효율적인 사용을 위해 멀티캐스트 전송을 지원한다. 이를 통해 동일한 데이터를 여러 수신자에게 동시에 전달할 수 있으며, 네트워크의 대역폭 사용을 최적화할 수 있다.
* **Coherent Set**: 여러 데이터 샘플이 논리적으로 일관되게 전송되어야 할 때 사용되는 메커니즘으로, 모든 데이터 샘플이 정확한 순서로 전달되도록 보장한다.
* **Content-Filtered Topic**: 서브스크라이버가 필요한 데이터만을 필터링하여 수신할 수 있게 하는 기능으로, 네트워크 트래픽을 줄이고 데이터 처리의 효율성을 높인다.

이러한 메커니즘들은 DDS가 대규모 분산 시스템에서 효율적이고 신뢰할 수 있는 데이터 전달을 가능하게 하는 데 핵심적인 역할을 한다.

***

관련 자료:

* Object Management Group (OMG), *Data Distribution Service (DDS) Specification*, <https://www.omg.org/spec/DDS/>
* Pardo-Castellote, G., *Introduction to DDS: Data Distribution Service*, Real-Time Innovations, Inc.
* M. Stanica, *Understanding Data Distribution Service (DDS) and its applications*, arXiv:1805.09219.
