최근 LLM(Large Language Model) API의 응답 속도는 사용자 경험(UX)에 중요한 영향을 미칩니다. 특히 긴 응답의 경우, 로딩 인디케이터만 보고 기다리는 것은 사용자에게 지루함을 유발할 수 있습니다. 본 발표는 ChatGPT와 같은 서비스에서 볼 수 있는 타이핑 애니메이션 효과를 Ruby on Rails의 Action Cable을 활용하여 구현함으로써 LLM 응답의 UX를 개선하는 방법에 대해 논합니다. LLM API는 토큰 단위로 스트리밍 응답을 제공하므로, 이를 실시간으로 사용자에게 보여주는 타이핑 애니메이션은 사용자 만족도를 크게 높일 수 있습니다. 발표에서는 Action Cable을 이용한 초기 구현의 단순함부터 실제 서비스 적용 시 마주치는 복잡한 문제와 그 해결 과정을 상세히 다룹니다.
LLM API의 스트리밍 응답을 Action Cable로 전달하여 타이핑 애니메이션을 구현하는 것은 기본적으로 간단해 보입니다. Ruby의 Open AI Gem 등을 사용하면 LLM API로부터 청크(chunk) 단위로 데이터를 받아 Action Cable 채널을 통해 바로 브로드캐스트할 수 있습니다. 하지만 실제 프로덕션 환경에 적용하기 위해서는 몇 가지 기술적 난관에 봉착하게 됩니다. 첫째, 다수의 사용자가 Action Cable에 동시에 연결될 경우 커넥션이 고갈되어 다른 서비스에 영향을 줄 수 있습니다. Rails 가이드에서는 Action Cable을 별도의 스탠드얼론 서버로 실행하여 이 문제를 해결할 것을 권장하며, 이를 통해 Action Cable 서버 확장을 통한 부하 분산도 가능해집니다. 둘째, LLM 프롬프트 처리가 무거워 API 서버가 블록될 수 있습니다. 이를 해결하기 위해 비동기 처리를 도입해야 하며, Sidekiq와 같은 워커에서 Action Cable으로 데이터를 보내야 합니다. Rails의 Redis 어댑터를 사용하면 워커에서 Action Cable로의 브로드캐스트가 가능해집니다. 셋째, Redis 큐를 사용하는 Action Cable 어댑터는 메시지 순서를 보장하지 않아 응답 텍스트가 뒤섞이는 문제가 발생했습니다. 이 문제는 LLM 응답 청크에 순서 인덱스를 추가하고, 프론트엔드에서 이 인덱스를 기반으로 데이터를 재조립하여 해결했습니다.
구현 외에 고려해야 할 중요한 부분은 개발 및 테스트 비용 절감입니다. LLM API 호출은 비용이 발생하며, 특히 대량의 데이터를 이용한 개발 및 테스트 시 비용 부담이 커질 수 있습니다. 발표자는 세 가지 방안을 제시합니다. 첫째, VCR(Video Cassette Recorder)을 활용하는 것입니다. VCR은 실제 API 요청/응답을 기록해두고, 이후 테스트에서는 기록된 응답을 사용함으로써 실제 API 호출 없이 테스트를 진행할 수 있게 합니다. 이는 개발 중 비용을 줄이고 테스트 속도를 높이는 데 유용하지만, 민감한 정보(API 키 등) 관리에 주의가 필요합니다. 둘째, LM Studio와 같은 로컬 LLM 실행 도구를 활용하는 것입니다. LM Studio는 GUI 기반으로 로컬 환경에서 다양한 LLM 모델을 쉽게 실행하고 테스트할 수 있게 해줍니다. 이를 통해 실제 API 호출 없이도 LLM 응답의 기본적인 동작을 확인하거나 디버깅할 수 있습니다. 다만, 로컬 자원을 많이 소모할 수 있습니다. 셋째, Fake 서버를 구축하는 것입니다. 이는 특정 요청에 대해 미리 정의된 가짜 응답을 반환하는 서버로, 개발/테스트 목적으로 유용할 수 있습니다. 발표자는 직접 간단한 Fake 서버를 만들어 보았으나, 현재 서비스에서는 VCR을 사용하고 있다고 언급했습니다. 이러한 비용 절감 및 테스트 전략은 실제 LLM 기능을 개발하고 운영하는 데 있어 필수적입니다.
결론적으로, Action Cable을 활용한 LLM 응답 타이핑 애니메이션 구현은 사용자 경험을 크게 향상시킬 수 있는 효과적인 방법입니다. 초기 구현은 단순하지만, 실제 서비스 적용 시에는 Action Cable의 특성, 비동기 처리, 데이터 순서 보장 등 다양한 기술적 문제를 해결해야 합니다. Rails 가이드와 같은 공식 문서를 꼼꼼히 확인하고, Redis 어댑터와 같은 유용한 기능을 적극 활용하되, 순서 보장과 같은 문제는 직접 해결해야 함을 알 수 있었습니다. 또한, LLM API 사용에 따른 비용 부담을 줄이고 효율적인 개발/테스트 환경을 구축하기 위해 VCR, 로컬 LLM, Fake 서버 등의 전략을 적절히 활용하는 것이 중요합니다. 본 발표에서 소개된 구현 및 비용 절감 방안은 LLM 기반 서비스를 개발하는 다른 엔지니어들에게도 유용한 참고 자료가 될 것입니다. 마지막으로, 본 발표의 계기가 된 '口コミコム(구치코미콤)' 서비스의 리뷰 요약 기능을 통해 Action Cable과 LLM을 활용한 실제 적용 사례를 확인할 수 있었습니다.