[OpenDDS] 1.실시간 영상 스트리밍 구현::소개
맹주현 (JuHyun Maeng), 이동혁(DongHyuk Lee)
우리는 분산 환경에서 실시간 영상 스트리밍의 구현을 목표로 합니다. 이를 위해 OpenDDS로 네트워크 환경을 구축하고, 웹캠을 통하여 영상 데이터를 획득할 것입니다. 첫 번째 게시 글은 OpenDDS의 개요(Overview)에 대한 글로써, 대략적인 설명을 다룹니다. 이후 글들을 통해 분산 환경에서 실시간 영상 스트리밍을 구현하는 과정에 대한 설명을 다룰 것입니다.
OpenDDS(Open Data Distribution Service) 개요
OpenDDS는 표준화 기구인 OMG(Object Management Group)에서 표준화된 데이터 중심(Data Centric)의 Publish-Subscribe 방식의 통신 미들웨어를 말합니다. 여기서 Publish-Subscribe 모델은 Server-Client 방식보다 대규모 데이터 전송과 실시간 전송에 적합한 네트워크 토폴로지입니다. 왜냐하면 Server-Client 방식에 비해 적은 설치비용과 대규모 환경의 확장성 측면에서 장점을 가지기 때문입니다.
- OMG Website : https://www.omg.org/
OpenDDS 요소
OMG에서 만든 DDS(Data Distribution Service)를 구현한 오픈 소스가 OpenDDS이며, 아래와 같은 요소들로 구성되어 있습니다.
DCPS(Data-Centric Publish-Subscribe) Layer
DCPS Layer는 RTPS Layer와 Application 사이의 인터페이스 역할을 하며, OMG의 DDS 요소 중 Participant, Domain, Topic을 정의합니다. 또한 QoS(Quality of Service)를 설정하고, Publish-Subscribe를 수행합니다.
RTPS(Real-Time Publish-Subscribe Wire Protocol) Layer
RTPS Layer는 네트워크 내, 참여자 정보를 유지하는 역할을 합니다. 또한, 네트워크 참여자에 대한 정보를 기반으로 하여서 자동 검색을 해주며, 네트워크 참여자의 동적 추가와 이탈에 대응하는 기능을 합니다.
Publisher / Subscriber
Publisher는 DataWriter를 가지고, Subscriber는 DataReader를 가지게 됩니다. Publisher는 여러 개의 DataWriter를 가질 수 있으며, Subscriber도 동일하게 여러 개의 DataReader를 가질 수 있습니다.
DataWriter / DataReader
DataWriter는 송신자로, DataReader는 수신자의 역할을 합니다. DataWriter는 Sample(실제 데이터)을 생성하고 전송하는 역할을 하며, DataReader는 Sample을 수신하는 기능을 합니다. 또한, DataWriter와 DataReader는 단일 Topic만을 보유할 수 있습니다.
Topic
송·수신되는 데이터의 타입을 나타냅니다. 또한, 데이터 이용 가능 여부에 대한 정보를 담고 있습니다. 하나의 Topic은 2개 이상의 DataWriter와 DataReader를 가질 수 있습니다.
Domain
가상의 데이터 공간을 구분하는 논리적 네트워크 공간을 나타내며, GDS(Global Data Space)라고 명명됩니다. Publisher와 Subscriber는 동일한 Domain 내에서만 데이터를 Publish하고 Subscribe 할 수 있습니다. 또한, Publisher와 Subscriber들이 Domain을 선택하여서 네트워크에 참여할 수 있습니다.
Publish-Subscriber 모델
정의
Publisher는 같은 Domain 내 어떤 Subscriber가 존재하는지 모르는 상태에서 메시지를 Publish 하게 되고, Subscriber는 Publisher에 대한 정보 없이 Topic 또는 Content에 맞는 메시지만을 수신할 수 있는 방식을 Publish-Subscribe 모델이라고 합니다.
분류
Publish-Subscribe 모델에는 Filtering 방식에 따라 2가지로 분류되고 있습니다. Topic-based Filtering과 Content-based Filtering이 있으며, Message Filtering은 Publisher-Message Broker-Subscriber 구조를 가집니다. 그리고 중간의 Broker가 Filtering 작업을 하여서 Topic에 맞는 데이터를 송·수신하며 동작합니다.
동작 과정
위 그림의 Publish-Subscribe 동작 과정에 대한 설명입니다.
Subscriber는 자신이 필요한 데이터에 대한 Topic을 Broker에게 알립니다. (Subscribe 과정)
Publisher는 자신이 보낼 데이터에 대한 Topic을 Broker에게 알리고, 해당 Topic에 대한 데이터도 함께 Broker에게 전송합니다. (Publish 과정)
Broker는 특정 Topic을 구독한 Subscriber에게 그 Topic에 대한 데이터가 있으면 Subscriber에게 데이터를 전송합니다.
OpenDDS 동작과정
OpenDDS는 동일 Domain 내에서 Topic을 통해서 DataWrtier와 DataReader가 데이터를 주고받는 과정으로 동작합니다. 그리고 데이터의 송·수신 과정에서 QoS는 보장됩니다.
첫 단계로 DataWriter와 DataReader를 가지고 있는 네트워크 참여자들이 동일한 DDS Domain상에서 각각 Topic을 정의합니다.
DataWriter는 Topic B에게 자신의 데이터를 QoS를 보장한 상태로 전송합니다.
DataReader는 자신이 Topic B를 Subscribe 하게 된다면, DataWriter에 의해 등록된 데이터를 수신할 수 있게 됩니다.
위와 같은 과정을 거쳐서 동일 Topic을 발간하는 DataWriter와 구독하는 DataReader 사이의 송·수신이 일어납니다.
OpenDDS QoS
DDS에서의 QoS 정책은 DDS 참여자 사이의 통신 품질 및 보안, 효율성 등의 측면에서 최대 효과를 주기 위해서 사용되는 정책입니다.
QoS 세부내용
DURABILITY : Publish 된 데이터 인스턴스에 대한 지속 기간
HISTORY : 전송되는 데이터의 유지와 관련된 QoS 정책
RELIABILITY QoS : 서비스에서 요청·제공되는 Reliability에 대한 등급
OWNERSHIP QoS : 동일한 데이터 인스턴스에 대한 다수 DataWriter의 쓰기 권한 부여와 관련된 설정
DEADLINE QoS : 데이터 인스턴스에 대한 최대 내부 전송 시간
RESOURCE_LIMITS QoS : Publisher와 Subscriber 사이의 통신 데이터 처리를 위한 자원 사용량 설정
Edit by
맹주현
한양대학교 컴퓨터·소프트웨어학과 박사과정
maengjuhyun@gmail.com
관심분야 : Blockchain, Network, DDS
이동혁
한양대학교 컴퓨터·소프트웨어학과 석사과정
shine5601@naver.com
관심분야 : DDS, Network, Blockchain
그림 출처
OMG DDS 구조
http://www.itfind.or.kr/WZIN/jugidong/1456/file3719-145601.pdf
DDS 구성요소
https://blog.zhaw.ch/icclab/rti-connext-dds-setup-and-helloworld-example-windowseclipsejava/
Pub/Sub 모델 Topology
https://mevade.wordpress.com/2015/07/27/mqtt-the-language-of-iot/
OpenDDS 동작 과정
https://www.dds-foundation.org/what-is-dds-3/