콘텐츠로 이동
무료 평가 시작

PubSub

PubSub은 클라이언트-서버와 다른 통신 모델입니다. 게시자(publisher)는 값의 묶음을 네트워크 메시지로 보내고, 구독자(subscriber)는 관심 있는 메시지를 골라 받습니다. 둘 사이에 세션이 없으므로 하나의 메시지를 여러 구독자가 동시에 받을 수 있습니다. PubSub은 Part 14에서 정의합니다.

Publisher Subscriber
+--------------------------------------+ +--------------------------------+
| PubSubConnection (PublisherId) | | PubSubConnection |
| WriterGroup (WriterGroupId) | NetworkMessage | ReaderGroup |
| DataSetWriter (DataSetWriterId) ---+-----------------> | DataSetReader |
| PublishedDataSet (fields) | UDP or broker | filter: PublisherId, |
+--------------------------------------+ | WriterGroupId, WriterId |
+--------------------------------+
구성 요소 역할
PublishedDataSet 게시할 필드 목록과 값의 원천(source)
DataSetWriter DataSet을 DataSetMessage로 인코딩합니다. DataSetWriterId로 구분합니다.
WriterGroup 여러 DataSetWriter의 메시지를 NetworkMessage 하나로 묶고 게시 주기를 정합니다. WriterGroupId로 구분합니다.
PubSubConnection 전송 주소와 게시자 ID(PublisherId)를 가집니다.
DataSetReader 구독자 쪽에서 PublisherId, WriterGroupId, DataSetWriterId로 메시지를 고르고 필드를 해석합니다.
DataSetMetaData 필드 이름과 타입, 구성 버전(ConfigurationVersion: major·minor)

NetworkMessage는 헤더와 하나 이상의 DataSetMessage로 이루어집니다.

  • NetworkMessage 헤더: PublisherId, 그룹 헤더(WriterGroupId, GroupVersion, NetworkMessageNumber, SequenceNumber), 담긴 DataSetWriterId 목록, 보안 헤더
  • DataSetMessage: 시퀀스 번호, 상태, 구성 버전, 시각, 필드. 모든 필드를 담는 키 프레임(key frame), 바뀐 필드만 담는 델타 프레임(delta frame), 이벤트, keep-alive가 있습니다.

메시지 매핑은 두 가지입니다.

매핑 형식 특징
UADP 이진 작고 빠릅니다. 헤더 필드를 비트 플래그로 켜고 끕니다.
JSON 텍스트 사람이 읽기 쉽고 IT 시스템과 연동하기 좋습니다.
전송 주소 특징
UDP opc.udp://호스트:포트, 기본 포트 4840 브로커가 없습니다. 유니캐스트 또는 멀티캐스트로 보냅니다.
MQTT 브로커 주소와 토픽(topic) 브로커가 메시지를 구독자에게 전달합니다. QoS로 전달 보장 수준을 정합니다.
AMQP 브로커 주소와 큐 브로커 기반 전송입니다.

PubSub 메시지는 대칭 키로 서명하거나 서명하고 암호화합니다. 게시자와 구독자는 같은 보안 그룹(security group)의 키를 공유해야 합니다. 키는 보안 키 서비스(Security Key Service, SKS)가 배포합니다. 게시자와 구독자는 SKS 서버의 GetSecurityKeys 메서드를 호출해 현재 키와 다음 키를 받고, 키 수명이 끝나면 새 키로 바꿉니다. 메시지의 보안 헤더에는 보안 토큰 ID와 논스(nonce)가 들어갑니다.

브로커 전송에서는 브로커 연결 자체를 TLS로 보호할 수도 있습니다. 이 보호는 메시지 보안과 별개입니다.

PDComm 시뮬레이터의 PubSub 작업 공간은 다음 설정으로 동작합니다.

항목 값
메시지 매핑 UADP
전송 UDP 유니캐스트, MQTT 5(QoS 1)
역할 게시자와 구독자(같은 프로세스에서 되돌려 받기), 게시자, 구독자
DataSetMessage 키 프레임. 필드는 Variant 값입니다.
식별자 PublisherId(UInt16, 기본 77), WriterGroupId(기본 1), DataSetWriterId(기본 17)
받은 메시지 보관 최대 256개. pubsub_received로 꺼냅니다.

시뮬레이터는 서명과 암호화가 없는(보안 모드 None) UADP 메시지를 주고받습니다.

UDP PubSub 튜토리얼과 MQTT PubSub 튜토리얼에서 실행합니다.

배경 지식을 모두 읽었습니다. 빠른 시작으로 첫 연결을 만듭니다.