1261.20 발행-구독 패턴의 구조와 특성
1. 발행-구독 패턴의 정의
발행-구독 패턴(publish-subscribe pattern)은 데이터의 생산자인 발행자(publisher)가 특정 주제(topic)에 데이터를 발행하고, 해당 주제에 관심을 등록한 구독자(subscriber)가 데이터를 수신하는 간접적(indirect) 통신 패턴이다. Eugster 등(2003)은 The Many Faces of Publish/Subscribe에서 이 패턴을 “공간적 결합 해제(space decoupling), 시간적 결합 해제(time decoupling), 동기화 결합 해제(synchronization decoupling)의 세 가지 차원에서 통신 참여자를 분리하는 상호작용 체계“로 정의하였다.
발행-구독 패턴에서 발행자와 구독자는 서로의 존재를 직접적으로 인지하지 않는다. 양자 간의 연결은 주제(topic)라는 논리적 채널에 의해 간접적으로 매개되며, 이러한 간접성이 시스템의 모듈성과 확장성을 보장하는 핵심 메커니즘이다.
2. 구조적 구성 요소
2.1 발행자 (Publisher)
발행자는 데이터를 생산하고 특정 토픽에 발행하는 통신 종단점이다. 발행자는 구독자의 수나 존재 여부에 관계없이 데이터를 발행하며, 발행된 데이터가 어떤 구독자에 의해 수신되는지에 대한 지식을 필요로 하지 않는다. 발행자는 데이터의 생산에만 집중하며, 데이터의 소비 방식과는 완전히 독립적이다.
2.2 구독자 (Subscriber)
구독자는 관심 있는 토픽에 구독을 등록하고, 해당 토픽에 발행되는 데이터를 수신하는 통신 종단점이다. 구독자는 콜백 함수를 통해 데이터 수신 이벤트를 처리하며, 동일 토픽에 복수의 구독자가 존재할 수 있다. 각 구독자는 발행된 데이터의 독립적인 복사본(copy)을 수신한다.
2.3 토픽 (Topic)
토픽은 발행자와 구독자를 연결하는 명명된 논리적 채널(named logical channel)이다. 토픽은 문자열 형태의 이름(예: /sensor/imu, /cmd_vel)과 메시지 타입의 쌍으로 정의된다. 동일한 토픽 이름과 메시지 타입을 사용하는 발행자와 구독자 간에 데이터 교환이 자동으로 이루어진다.
3. 발행-구독 패턴의 결합 해제 특성
3.1 공간적 결합 해제 (Space Decoupling)
발행자와 구독자는 서로의 네트워크 주소, 프로세스 식별자, 또는 물리적 위치를 알 필요가 없다. 양자는 토픽 이름에 의해서만 간접적으로 연결되며, 동일 호스트 내의 통신과 네트워크를 경유하는 원격 통신이 동일한 인터페이스를 통해 이루어진다.
3.2 시간적 결합 해제 (Time Decoupling)
발행자와 구독자가 동시에 활성 상태일 필요가 없다. DDS의 Transient Local 내구성(Durability) QoS 정책을 사용하는 경우, 구독자가 접속하기 이전에 발행된 데이터도 수신할 수 있다.
3.3 동기화 결합 해제 (Synchronization Decoupling)
발행자의 데이터 발행과 구독자의 데이터 수신은 비동기적으로 이루어진다. 발행자는 데이터를 발행한 후 구독자의 수신을 기다리지 않으며, 구독자는 콜백 메커니즘에 의해 데이터 도착 시점에 비동기적으로 처리를 수행한다.
4. 통신 흐름의 특성
4.1 일대다 통신 (One-to-Many)
하나의 발행자가 발행한 데이터는 해당 토픽을 구독하는 모든 구독자에게 동시에 전달된다. 이는 센서 데이터의 분배에 특히 적합한 구조로, 하나의 센서 드라이버가 발행한 데이터를 인지 모듈, 기록 모듈, 시각화 모듈 등 복수의 소비자가 동시에 활용할 수 있다.
4.2 다대다 통신 (Many-to-Many)
동일 토픽에 복수의 발행자와 복수의 구독자가 존재할 수 있으며, 이 경우 모든 발행자의 데이터가 모든 구독자에게 전달된다. 이러한 다대다 구조는 분산 센서 네트워크나 다중 로봇 시스템에서 활용된다.
4.3 데이터 흐름의 방향성
발행-구독 패턴은 발행자에서 구독자로의 단방향(unidirectional) 데이터 흐름만을 지원한다. 구독자가 발행자에게 데이터를 반환하거나 피드백을 제공하는 메커니즘은 이 패턴 자체에 내장되어 있지 않으며, 필요한 경우 역방향 토픽을 별도로 설정하여야 한다.
5. 발행-구독 패턴의 장점
모듈성과 확장성: 발행자와 구독자의 추가 또는 제거가 기존 시스템에 영향을 미치지 않으며, 노드의 동적 추가가 용이하다.
유연한 데이터 분배: 하나의 데이터 원천(source)으로부터 복수의 소비자(consumer)에 대한 효율적인 다중 전달(multicasting)이 가능하다.
느슨한 결합: 통신 참여자 간의 결합도가 최소화되어 독립적인 개발, 테스트, 배포가 가능하다.
비동기적 동작: 발행 연산은 비차단(non-blocking)이므로, 발행자의 실행 흐름이 구독자의 처리 속도에 영향을 받지 않는다.
6. 발행-구독 패턴의 제약
응답의 부재: 발행자는 구독자가 데이터를 성공적으로 수신하였는지 확인할 수 없다. 명시적인 확인 응답(acknowledgment)이 필요한 경우 요청-응답 패턴이 적합하다.
데이터 손실의 가능성: Best Effort QoS 정책 하에서는 네트워크 혼잡이나 구독자의 처리 지연에 의해 데이터가 손실될 수 있다. Reliable QoS 정책으로 전달 보장이 가능하나, 이는 지연 시간의 증가를 수반할 수 있다.
순서 역전: 네트워크 경로의 비균일성이나 멀티캐스트 전달의 특성에 의해 메시지의 수신 순서가 발행 순서와 상이할 수 있다. 이를 방지하기 위하여 DDS의 Destination Order QoS 정책이 활용된다.
타이밍 제어의 어려움: 발행 주기와 구독자의 처리 주기가 상이한 경우, 데이터 누락(sampling loss)이나 과도한 데이터 축적이 발생할 수 있다.
7. 로봇 행동 제어에서의 적용
발행-구독 패턴은 로봇 행동 제어 시스템에서 다음의 데이터 흐름에 활용된다.
| 토픽 사례 | 발행자 | 구독자 | 데이터 내용 |
|---|---|---|---|
/sensor/imu | IMU 드라이버 | 상태 추정기, 제어기 | 가속도, 각속도 |
/odom | 주행 계측기 | 위치 추정기, 내비게이션 | 위치, 속도 |
/cmd_vel | 행동 제어기 | 모터 드라이버 | 선속도, 각속도 명령 |
/scan | LiDAR 드라이버 | 장애물 감지기, SLAM | 거리 측정 데이터 |
/behavior_status | 행동 관리기 | 임무 계획기, UI | 행동 실행 상태 |
발행-구독 패턴은 연속적인 센서 데이터 스트리밍과 제어 명령의 주기적 전달에 최적화된 구조를 제공하며, 로봇 행동 제어의 반응적 계층에서 핵심적인 통신 인프라로 기능한다. 그러나 장시간 실행 행동의 목표 전달, 진행 상황 보고, 그리고 취소 처리에는 발행-구독 패턴만으로는 구조적 한계가 존재한다.