LLM 응답 스트리밍을 Ruby on Rails 애플리케이션에 구현할 때, Action Cable은 다음과 같은 주요 문제점을 드러냅니다.
1. Action Cable의 실시간 스트리밍 한계
-
메시지 순서 미보장: Action Cable은 스레드 풀 기반 브로드캐스트로 인해 메시지 순서가 뒤바뀔 수 있으며, 이는 UI에 “환각” 현상을 유발합니다. 누적 전송, 스로틀링 등 완화책이 있으나, 100% 순서 보장은 어렵습니다.
-
네트워크 신뢰성 부족: 연결 손실 시 자동 재연결은 되지만, 유실된 메시지를 복구하지 못합니다. LLM 응답 청크는 일시적이므로, 데이터가 영구 손실되어 UI 상태가 손상됩니다. Action Cable은 “최대 한 번” 전달 보장만 제공하여, 신뢰성 있는 스트리밍에 필요한 “최소 한 번” 보장을 충족하지 못합니다.
2. AnyCable을 통한 신뢰성 확보
-
해결책: AnyCable은 Action Cable 서버를 대체하여 메시지 순서 보장과 “최소 한 번” 전달 보장을 모두 제공합니다.
-
작동 방식: 서버는 발행 메시지를 로그 구조(예: Redis Streams)로 저장하고 위치 메타데이터를 첨부합니다. 클라이언트(
@anycable/web)는 스트림과 위치를 추적하며, 재연결 시 마지막 위치부터 자동으로 메시지를 가져와 데이터 유실을 방지합니다. 초기 구독 시 기록 메시지 요청 기능으로 페이지 로드나 새로고침 후에도 UI 상태를 안정적으로 유지합니다. -
이점: 기존 코드 변경 없이 AnyCable로 전환하여 LLM 스트리밍의 신뢰성을 획기적으로 향상시킬 수 있습니다.
3. Durable Streams와 미래 지향적 접근
-
표준화 및 상호 운용성: Durable Streams는 실시간 데이터 스트리밍을 위한 개방형 HTTP 프로토콜 표준화를 목표로 하며, AnyCable의 신뢰성 설계와 유사합니다. 이는 벤더 종속성 없는 상호 운용성을 제공하여, 개발자들이 개방형 표준 기반으로 유연한 아키텍처를 구축할 수 있도록 돕습니다.
-
AnyCable의 계획: AnyCable은 Durable Streams 프로토콜의 “읽기” 부분을 점진적으로 채택하여 미래 웹 생태계에 기여할 계획입니다.