DDS 시스템 설계와 운용 가이드
DDS(Data Distribution Service)는 독립 프로그램이 타입이 있는 데이터를 공유하도록 돕는 표준이다. 이 시리즈는 표준 객체부터 네트워크 발견, QoS, 장애 진단과 장비 모델까지 이어서 설명한다. DDS를 선택하면 통신 계약과 일부 전달 동작을 공통화할 수 있지만, 센서의 의미 검증·권한 있는 명령·운영 절차는 응용 설계로 남는다.
그림은 Topic 데이터 흐름을 설명하는 교육용 모식도다. 실제 캡처나 성능 측정 결과가 아니다.
센서 어댑터가 측정값을 타입 있는 샘플로 쓰면, DDS participant와 RTPS가 호환되는 구독자를 찾고 데이터를 전달한다. 구독자는 자기 history와 응용 상태 판정에 따라 표시나 제어 판단을 한다. 애니메이션에서 중앙에 보이는 controller가 항상 DDS broker인 것은 아니다. 예제의 controller는 입력을 검증해 새 상태 Topic을 쓰는 일반 응용이다.
열 편 읽기 지도
| 주제 | 이 글에서 답하는 질문 | 추천 독자 |
|---|---|---|
| DDS 기본 개념 | Topic, type, key, participant와 대안은 무엇인가? | 처음 설계하는 개발자 |
| Discovery와 주소 | 참가자는 어떻게 만나고 실제 네트워크 경로는 무엇인가? | 네트워크 디버깅 담당자 |
| QoS | 유실·이력·갱신 감시를 어떻게 나눌까? | Writer/Reader 설정자 |
| History와 Persistence | 늦은 reader와 프로세스 재시작 때 어떤 데이터를 기대할까? | 복구 설계자 |
| Security | 참가자를 인증하고 topic 접근을 제한하는 방법은? | 보안·통제 담당자 |
| 장비 어댑터 | CAN·RS-422 장비를 공통 DDS 모델에 어떻게 붙일까? | 장비 통합 개발자 |
| 실시간 Linux | OS 스케줄링과 DDS QoS의 책임 경계는? | 지연시간 분석자 |
| 장애 진단 | 값이 오지 않거나 오래됐을 때 무엇부터 볼까? | 통합·운용 담당자 |
| 관측성 | 미들웨어 통계와 업무 로그를 어떻게 연결할까? | 운영 도구 개발자 |
| GVA와 LOSA | 공통 지상·차량 데이터 모델과 DDS의 관계는? | 상호운용성 설계자 |
관계를 이해하는 순서
이 주제들은 한 계층의 옵션 목록이 아니다. 기본 글은 데이터 계약을 정하고, discovery 글은 endpoint가 서로를 찾는 범위를 설명한다. 둘이 매칭된 뒤 QoS가 전달·이력·시간 조건을 협상한다. History/Persistence는 그 전달 이력을 얼마나 오래 보존하는지 다루고, Security는 신원과 접근 권한을 별도 경계로 둔다.
장비 어댑터는 바이트와 프레임을 장치 의미가 있는 샘플로 변환하는 위치다. Linux 스케줄링은 그 변환과 발행 작업이 CPU에서 언제 실행되는가에 영향을 준다. 장애 진단은 관측 지표를 모아 어느 경계가 깨졌는지 좁히며, 관측성 글은 이를 상관관계가 있는 로그와 지표로 남기는 방법을 다룬다. GVA/LOSA는 데이터 의미와 상호운용 모델의 적용 범위를 정한다.
최소 용어
- DomainParticipant: 한 DDS Domain에 참가해 Topic과 endpoint를 만드는 응용 객체다. 프로세스나 장비 한 대와 같다는 뜻은 아니다.
- Topic: 데이터 이름과 타입 계약이다.
VehicleState같은 이름 자체가 IP 주소나 포트를 뜻하지 않는다. - DataWriter / DataReader: 각각 샘플을 쓰고 읽는 endpoint다. 매칭은 이름·타입·QoS 등 조건이 맞아야 한다.
- RTPS: OMG DDSI-RTPS 상호운용 wire protocol이다. DDS API와 네트워크 전송은 서로 다른 층이다.
- QoS: reliability, history, deadline, liveliness 같은 정책이다. 이 값만으로 응용의 모든 시간·안전 요구가 입증되지는 않는다.
OMG DDS 1.4는 data-centric publish-subscribe 모델에서 Topic과 type으로 데이터 공간을 식별하고 표준 API 및 동작을 정의한다. 실제 vendor 간 wire 호환성은 별도 DDSI-RTPS 표준이 담당한다. OMG DDS 1.4 §1.1 · OMG DDSI-RTPS
선택을 시작하는 질문
| 요구 | 우선 검토할 것 | 남는 설계 책임 |
|---|---|---|
| 여러 소비자가 최신 상태를 함께 봄 | DDS publish-subscribe와 key/instance 모델 | 최신성 기준, 값 검증, 소비자 부하 |
| 과거 이벤트를 오래 보관하고 재처리 | 영속 로그형 broker와 retention | 소비 위치, 중복 처리, 보존 비용 |
| 특정 원격 기능을 요청하고 응답을 기다림 | RPC 또는 DDS request/reply 패턴 | timeout, idempotency, 실패 응답 |
| 하나의 장비 프로토콜만 연결 | 직접 socket/serial API도 비교 | framing, 재시도, 타입 계약과 분배 |
| 중앙 발견 서버가 운영상 필요 | Discovery Server 또는 정적 peers 구성 검토 | server 가용성, network reachability |
위 표는 설계 시작점이지 성능 순위가 아니다. OMG는 DDS를 제한된 자원, 실시간·임베디드, 선택적 데이터 전파 문제에 맞춘 표준으로 설명한다. DDS는 원래 있던 proprietary publish-subscribe 제품의 인터페이스와 동작을 이식 가능하게 표준화하려는 목적도 있었다. OMG DDS 1.4 §1.1
공개 사례를 읽을 때
공개 자료는 사용 범위를 정확히 읽어야 한다. NASA Astrobee 안내서는 ROS 메시지를 지상으로 보내는 경로에서 DDS 변환을 설명한다. 그 사실만으로 우주정거장 소프트웨어 전체가 DDS 위에서 동작한다고 일반화할 수 없다. ROS 2 설계 문서는 DDS 구현체를 미들웨어 계층으로 쓰는 선택과 구현별 차이를 설명한다. 특정 회사의 비공개 생산 배치 규모나 성능은 출처가 없으면 추정하지 않는다. NASA Astrobee Guest Science Guide · ROS on DDS
프로젝트 범위
이 사이트의 실습 사례는 ROS 없는 C++ 세 프로세스(sensor_sim → controller → status_viewer), Fast DDS 2.11.2, 같은 Docker Linux VM의 UDPv4 환경이다. 2026-10-09 기록에는 179개 상태 단위 검사와 20개 DDS 통합 시나리오가 통과했다고 적혀 있다. 이 숫자는 해당 모의 환경의 실제 실행 결과이며 오늘 다시 실행한 결과, 다중 호스트 시험, 실장비 검증, DDS Security·Persistence·실시간 Linux·GVA 적합성 시험을 뜻하지 않는다.
문서 간 이동
기본 개념을 읽고 주소 문제를 진단한 뒤, 필요한 QoS를 정하고 이력·보안 요구를 별도로 설계한다. 장비가 DDS를 직접 지원하지 않으면 어댑터와 공통 데이터 모델부터 정한다. 값이 늦으면 시간 동기화·수신시각·앱 처리 지연을 분리해 진단한다. 관측성은 이 흐름에 상관관계를 붙이고, GVA/LOSA는 데이터 계약이 실제 적용 범위에 맞는지 검토한다.
조사 범위와 한계
2026-10-13 확인. 기준은 OMG DDS 1.4, OMG DDSI-RTPS와 Fast DDS 2.x 문서이며, 프로젝트 실행 기록은 2026-10-09 환경으로 한정했다. 이 안내는 시스템 선택의 출발점이다. 각 후속 글에서 설정·버전별 세부 조건을 확인해야 하며, 공개 사례에서 확인되지 않은 생산 규모나 성능은 주장하지 않는다.
관련 개념
- DDS 기본 개념: Topic, 데이터 계약과 선택 기준
- DDS Discovery와 주소: Domain부터 실제 IP 경로까지
- DDS QoS: 전달, 이력과 시간 약속을 분리해서 설계하기
- DDS 이력·Persistence와 재시작 뒤 무엇을 복구하는가
- DDS Security: 인증·접근 제어·메시지 보호의 경계
- Linux 장비 어댑터: TCP·UART·RS-422·CAN에서 DDS까지
- DDS Deadline과 Linux 실시간 스케줄링의 경계
- DDS 센서 지연과 장애 진단: 관측에서 복구 검증까지
- DDS 관측성: Fast DDS 통계와 OpenTelemetry의 역할
- LOSA·GVA·NGVA와 DDS: 아키텍처·데이터 모델·전달 계층
이 글을 참조하는 글
- DDS Security: 인증·접근 제어·메시지 보호의 경계
- DDS Deadline과 Linux 실시간 스케줄링의 경계
- DDS QoS: 전달, 이력과 시간 약속을 분리해서 설계하기
- DDS 관측성: Fast DDS 통계와 OpenTelemetry의 역할
- DDS 이력·Persistence와 재시작 뒤 무엇을 복구하는가
- LOSA·GVA·NGVA와 DDS: 아키텍처·데이터 모델·전달 계층
- DDS 센서 지연과 장애 진단: 관측에서 복구 검증까지
- DDS Discovery와 주소: Domain부터 실제 IP 경로까지
- Linux 장비 어댑터: TCP·UART·RS-422·CAN에서 DDS까지
- DDS 기본 개념: Topic, 데이터 계약과 선택 기준