[OpenDDS] 6.실시간 영상 스트리밍 구현::QoS
맹주현 (JuHyun Maeng), 이동혁(DongHyuk Lee)
지난 5부에 이어 이번 6부에서는 OpenDDS에서 지원하는 QoS 분류와 각 QoS 기능에 대한 설명을 다룹니다.
지난 5부까지 진행하였던 작업은 Topic 제어를 통하여 동시에 다수 노드 사이 간 송·수신이 가능한 상태에서 Publisher와 Subscriber 사이의 실시간 영상 스트리밍의 구현과 실험이었습니다.
네트워크에서 QoS(Quality of Service)는 응용 프로그램 사이의 통신, 데이터 흐름 등에 우선순위를 설정해주어서 데이터 전송 품질을 특정 수준 이상으로 보장해주는 기술을 말합니다. 다시 말해 QoS가 통신 서비스의 품질을 나타낸다고 할 수 있습니다.
OMG(Object Management Group)에서 표준으로 제정하고 있는 DDS(Data Distribution Service)는 위 표와 같은 22가지의 QoS를 정의하고 있습니다. 그리고 우리가 구축한 OpenDDS 기반의 테스트베드에서도 같은 명칭의 22가지 QoS를 사용하고 있습니다.
QoS 분류
QoS의 적용 대상, 적용 대상과의 관계, 변경 가능 여부를 기준으로 하여서 Concern, RxO(Requested/Offered), Changeable의 3가지 명칭에 따라서 QoS를 구분하고 있습니다.
Concern
Concern은 QoS를 적용하는 대상을 나타내는 값으로, 대상이 되는 객체는 Topic, DataWriter, DataReader, Publisher, Subscriber, DomainParticipant, DomainParticipantFactory가 있습니다.
RxO
RxO는 QoS를 적용하는 대상을 Publisher 측과 Subscriber 측으로 구분하기 위하여 사용합니다. RxO는 Yes, No, N/A의 3가지 방식으로 사용할 수 있습니다.
Yes는 Publisher 측과 Subscriber 측 모두에 QoS를 적용할 수 있으며, Publisher 측과 Subscriber 측 각각에 설정된 QoS 값이 상호간 동일하여야만 동작될 수 있음을 나타냅니다. No는 Publisher 측과 Subscriber 측 모두에 QoS를 적용할 수 있지만, QoS 값이 상호간 동일하지 않더라도 동작될 수 있음을 나타냅니다. N/A는 Publisher 측이나 Subscriber 측 중 하나의 객체에만 QoS 값을 설정하여야만 동작될 수 있음을 나타냅니다.
Changeable
Changeable은 서비스 중에 QoS의 값을 변경할 수 있는지를 나타낼 때 사용합니다. Yes일 경우에는 서비스 시작 후에도 QoS 값을 변경할 수 있으며, 반대로 No일 경우에는 서비스 시작 후 QoS 값을 변경하려면 서비스를 다시 시작해야만 변경한 값이 적용됩니다.
QoS 적용 대상(객체)
위 표는 각 QoS를 적용할 수 있는 대상(객체)을 나타냅니다.
● : 해당 객체에서 QoS를 사용할 수 있음을 의미합니다.
RxO-Yes : Publisher 측과 Subscriber 측 모두에 QoS를 적용하여야 하며, 설정한 QoS 값은 상호간 동일해야 한다는 것을 의미합니다.
RxO-No : Publisher 측과 Subscriber 측 모두에 QoS를 적용하여야 하지만, 설정한 QoS 값은 상호간 달라도 된다는 것을 의미합니다.
RxO-N/A : Publisher 측이나 Subscriber 측 중 하나의 객체에만 QoS 값을 설정하여야만 한다는 것을 의미합니다.
예를 들면, PRESENTATION은 Publisher와 Subscriber에서 사용할 수 있는 QoS이며, RxO가 Yes이기 때문에 Publisher에서 설정한 QoS 값이 Subscriber에서 설정한 QoS 값과 동일하여야만 동작됩니다. 그리고 PARTITION은 동일하게 Publisher와 Subscriber에서 사용할 수 있지만 RxO가 No이기 때문에 각각의 객체에서 설정한 QoS 값이 서로 다르거나 독립적으로 설정되어도 동작합니다.
QoS 기능
위 표는 각 QoS별 기능을 나타내며, 넓은 의미에서 설명하고 있습니다.
위 표의 넓은 의미보다 조금 더 자세한 QoS의 기능을 한 가지 예를 들어 설명하자면, HISTORY는 두 가지 속성을 설정할 수 있습니다. KEEP_LAST와 KEEP_ALL이라는 속성값을 통하여 모든 데이터를 저장할지와 설정한 특정 값만큼의 데이터를 저장할지에 대하여 정할 수 있습니다. 하지만 이번 6부에서는 넓은 범위에서 각 QoS의 기능을 설명하였습니다.
QoS 설정
OpenDDS에서는 publisher.cpp 파일과 subscriber.cpp 파일에서 DomainParticipant, Topic, Publisher, Subscriber, DataWriter, DataReader 객체를 생성하는 소스 코드에 QoS를 설정할 수 있습니다.
DomainParticipant 객체와 Topic 객체는 Publisher 측과 Subscriber 측 모두에서 공통으로 생성하여야만 하는 객체이기 때문에 각 publisher.cpp와 subscriber.cpp에서 동일한 함수명의 소스 코드로 구현되어 있습니다.
DomainParticipant 객체를 생성하는 create_participant 함수의 두 번째 값이 기본적으로 PARTICIPANT_QOS_DEFAULT로 입력되어 있으며, 이 QoS 값을 다른 값으로 입력하면, 다른 QoS를 설정할 수 있습니다. 또한 Topic 객체를 생성하는 create_topic 함수의 세 번째 값이 기본적으로 TOPIC_QOS_DEFAULT로 입력되어 있으며, 이 QoS 값을 다른 값으로 입력하면, 다른 QoS를 설정할 수 있습니다.
DomainParticipant 객체와 Topic 객체의 생성 이후에 Publisher 측 Publisher 객체와 DataWriter 객체의 생성은 publisher.cpp에서 소스 코드로 구현되어 있습니다.
create_publisher 함수를 통하여 Publisher 객체를 생성하고, 함수의 첫 번째 값이 기본적으로 PUBLISHER_QOS_DEFAULT로 입력되어 있으며, 이 QoS 값을 다른 값으로 입력하면, 다른 QoS를 설정할 수 있습니다. 또한 create_datawriter 함수를 통하여 DataWriter 객체를 생성하고, 함수의 두 번째 값이 기본적으로 DATAWRITER_QOS_DEFAULT로 입력되어 있으며, 이 QoS 값을 다른 값으로 입력하면, 다른 QoS를 설정할 수 있습니다.
Subscriber 측 Subscriber 객체와 DataReader 객체의 생성은 subscriber.cpp에서 소스 코드로 구현되어 있습니다.
create_subscriber 함수를 통하여 Subscriber 객체를 생성하고, 함수의 첫 번째 값이 기본적으로 SUBSCRIBER_QOS_DEFAULT로 입력되어 있으며, 이 QoS 값을 다른 값으로 입력하면, 다른 QoS를 설정할 수 있습니다. 또한 create_datareader 함수를 통하여 DataReader 객체를 생성하고, 함수의 두 번째 값이 기본적으로 DATAREADER_QOS_DEFAULT로 입력되어 있으며, 이 QoS 값을 다른 값으로 입력하면, 다른 QoS를 설정할 수 있습니다.
Edit by
맹주현
한양대학교 컴퓨터·소프트웨어학과 박사과정
maengjuhyun@gmail.com
관심분야 : Blockchain, Network, DDS
이동혁
한양대학교 컴퓨터·소프트웨어학과 석사과정
shine5601@naver.com
관심분야 : DDS, Network, Blockchain