32.7 Lifespan 폴리시를 적용한 유효 기한 만료 실시간 메시지 메모리 폐기 전략 구체화
ROS2 환경에서 분산 에이전트 간 비동기 데이터 통신을 수행할 때, 미들웨어 계층의 메모리 공간은 한정적인 실체이다. 대용량 점군 데이터(Point Cloud Data), 융합 센서 스트림, 혹은 고주파수의 관성 측정 장치(Inertial Measurement Unit, IMU) 피드와 같은 실시간 처리가 요구되는 토픽들은 네트워크 혼잡이나 서브스크라이버 측의 연산 지연으로 인해 미들웨어 버퍼 내에 적체될 수 있다. 이때 적시성(Timeliness)을 잃은 구형 메시지 데이터는 제어 로직에 도움이 되지 않을 뿐만 아니라 자원을 낭비하고 최신 메시지의 수신을 가로막는 원인이 된다. 이러한 현상을 통제하기 위해, DDS 규격의 QoS(Quality of Service) 프로필은 Lifespan 폴리시를 제공한다. 본 절에서는 Lifespan 폴리시의 핵심 개념과 동작 원리를 규명하고, 이를 기반으로 구현되는 유효 기한 만료 실시간 메시지에 대한 메모리 폐기 전략을 구체적으로 서술한다.
1. Lifespan 정책의 메타데이터 구조와 시간적 제약(Temporal Constraints) 모델
Lifespan 정책은 퍼블리셔 시스템이 발행하는 모든 개별 메시지(Sample)에 대해 고유한 생명 주기(Time-to-Live, TTL)를 할당하는 매커니즘이다. 데이터가 생성되어 발행되는 시점을 t_{pub}이라 하고, Lifespan 설정 기간을 \tau_{duration}이라 규정할 때, 해당 메시지의 유효 만료 시점 t_{exp}는 다음과 같이 수학적으로 정의된다.
t_{exp} = t_{pub} + \tau_{duration}
이 정책 수식은 퍼블리셔(Publisher) 인스턴스와 서브스크라이버(Subscriber) 인스턴스 모두의 데이터 쓰기/읽기 캐시(Cache) 모델에 적용된다.
퍼블리셔(Publisher) 노드 관점의 동작
퍼블리셔의 출력 큐(Output Queue) 혹은 DataWriter 계층에서 대기 중인 메시지는 서브스크라이버에게 물리적으로 아직 전송되지 않았더라도 내부 클록 스케줄러(Clock Scheduler)의 감시를 받는다. 현재 시스템 시간 t_{now}가 t_{exp}를 초과하는 순간(즉, t_{now} > t_{exp}), 미들웨어는 전송 대기열에서 해당 샘플을 “만료(Expired)” 상태로 즉시 마킹하며 네트워크 계층을 통한 전송 프로세스에서 이를 원천 배제한다. 이는 무의미한 네트워크 대역폭(Bandwidth) 낭비를 근본적으로 차단하는 설계이다.
서브스크라이버(Subscriber) 노드 관점의 동작
데이터가 만료 시간 전에 수신 측 노드의 입력 큐(Input Queue) 또는 DataReader 캐시에 도달하였을지라도, 애플리케이션 레벨의 콜백 큐에서 즉시 처리되지 못하고 버퍼에 잔류할 수 있다. 미들웨어의 수신 데몬(Daemon)은 주기적인 가비지 컬렉션(Garbage Collection) 스레드를 가동하여, 입력 버퍼 테이블 내에 존재하는 모든 메시지의 타임스탬프와 Lifespan 유효성을 대조한다. 유효 기한을 넘긴 데이터가 검출되는 즉시, DDS는 애플리케이션의 읽기 요청(예: take()) 리스트에서 해당 샘플을 은닉(Hide) 상태로 전환한 후 메모리 테이블 영역에서 영구 삭제(Purge) 조치를 취한다.
32.7.2 메시지 메모리 폐기 전략 체계(Purge Strategy System)
Lifespan 폴리시에 의한 자동 폐기 전략은 다른 QoS 설정(특히 History와 Reliability 매개변수)과의 복합적 상호작용 속에서 메모리 관리 메커니즘을 동적으로 최적화한다.
큐 점유 최적화에 대한 History 폴리시와의 교차 연산
History 폴리시가 KEEP_LAST 모드(특정 N개의 과거 메시지만 보존)로 설정된 상태에서 \tau_{duration}의 만료가 선행될 경우, 큐 공간의 N개 한계점에 도달하기 전이라도 오래된 메시지가 메모리 풀에서 제거된다. 반대로 History 정책이 KEEP_ALL로 고정되어 미들웨어가 자원 제약 한계를 벗어나려 시도하더라도, Lifespan 파라미터가 백그라운드에서 임계선을 초과한 데이터를 클리어(Clear)함으로써 Out-Of-Memory(OOM) 페이탈 크래시(Crash)를 물리적으로 예방하는 방어자 역할을 수행한다.
영속성 저장 전략에서의 한계 조건
Durability 폴리시가 TRANSIENT_LOCAL로 설정되어 후기 연결 노드(Late Joiner)를 위한 과거 메시지 보존이 보장된 인프라일지라도, Lifespan 폴리시의 시간적 소멸 권한은 Durability 정책의 공간 보존 권한보다 상위에 존재한다. 즉, 보존되기로 약속된 데이터라 할지라도 Lifespan 한계 시간인 \tau_{duration}을 경과하면 메모리 영속성 트리의 백엔드 저장소(Backend Storage)에서도 가차 없이 폐기된다. 이는 오래되고 유효성이 떨어진 과거의 “유령 데이터(Ghost 단어 Data)“가 시스템 스웜의 지연 동기화를 방해하지 않게끔 하는 필수적인 필터링 기반 스키마이다.
32.7.3 적용 설계 사례론: 드론 관성 제어 시계열 스트리밍 환경
다중 로터 드론 고속 평형(Balancing) 컨트롤러는 500Hz 이상의 고속 주기로 IMU 쿼터니언(Quaternion)의 위치 벡터를 요구한다. 만일 순간적인 인터럽트 병목 현상으로 수신 처리가 50ms (0.05초) 동안 지연되었다고 가정할 때, 제어기의 명령 버퍼에는 약 25개의 미처리 센서 측정값이 누적된다.
과거의 누적 시계열 값들을 순차적으로 연산에 반영하는 것은 제어기 출력의 적분 오차(Integral Error) 폭주를 야기하고 물리적 진동파(Oscillation)를 발생시켜 플랫폼 추락으로 직결될 수 있다. 따라서 개발자는 해당 토픽의 Lifespan \tau_{duration}을 동역학 시스템의 유효 한계치 내로 설정해야 한다(예: 10ms 한정). 이러한 설계가 부여되면, 10ms 경과된 지연 센서 데이터들은 콜백 진입 이전에 백그라운드의 미들웨어 메모리 관리자에 의해 능동적으로 폐기(Purge)되며, 제어기 서브루틴은 오직 최신의 기하학적 매트릭스만을 안정적으로 처리하게 된다.