RAG on Rails: Ruby on Rails를 활용한 검색 증강 생성 시스템 구축 가이드

RAG on Ruby on Rails

작성자
HackerNews
발행일
2026년 01월 30일

핵심 요약

  • 1 Rails 8.1.1과 PostgreSQL의 pgvector를 활용하여 별도의 Redis나 복잡한 ML 인프라 없이도 강력한 RAG 시스템을 구축할 수 있음을 입증합니다.
  • 2 문서 업로드부터 텍스트 추출, 시맨틱 청킹, 벡터 임베딩 및 저장으로 이어지는 효율적인 데이터 파이프라인과 neighbor Gem을 이용한 검색 로직을 상세히 설명합니다.
  • 3 Solid Cable과 Turbo Streams를 활용한 실시간 스트리밍 응답과 인용구 기반의 점진적 정보 공개 패턴인 '줌 패턴'을 통해 사용자 신뢰도와 편의성을 극대화합니다.

도입

이 글은 150년 전통의 하이킹 클럽이 직면한 정보 파편화 문제를 해결하기 위해 Ruby on Rails를 기반으로 구축된 검색 증강 생성(RAG) 시스템의 설계와 구현 사례를 다룹니다. 수십 년간 축적된 방대한 정책 문서를 자원봉사자들이 쉽게 검색하고 신뢰할 수 있는 답변을 얻을 수 있도록 돕는 것이 핵심 목표입니다. 저자는 최신 Rails 8 기술 스택을 활용하여 복잡한 머신러닝 전용 인프라 없이도 견고하고 효율적인 AI 애플리케이션을 구축할 수 있음을 강조하며, 실제 운영 가능한 파이프라인 구성 요소를 상세히 소개합니다.

기술 스택 및 아키텍처

본 시스템은 최신 Rails 8.1.1Ruby 3.3.5를 기반으로 하며, 인프라 복잡도를 최소화하기 위해 다음과 같은 도구들을 선택했습니다.

  • 데이터베이스: PostgreSQL과 pgvector 확장을 사용하여 벡터 유사도 검색을 수행합니다.
  • 스토리지: Cloudflare R2를 사용하여 PDF 문서를 저장하며, Active Storage를 통해 S3 호환 인터페이스를 활용합니다. R2는 데이터 송신료(Egress)가 없어 RAG 애플리케이션에 적합합니다.
  • 비동기 처리 및 실시간성: Redis 없이 Solid Queue, Solid Cache, Solid Cable을 사용하여 백그라운드 작업과 실시간 스트리밍을 처리합니다.
  • AI 및 임베딩: Voyage AIvoyage-3 모델로 임베딩을 생성하고, OpenAIgpt-4o-miniruby_llm Gem을 사용하여 대화형 응답을 생성합니다.

문서 처리 파이프라인 (Document Pipeline)

사용자가 PDF를 업로드하면 백그라운드에서 다단계 파이프라인이 실행됩니다.

  1. 텍스트 추출: pdf-reader Gem을 사용하여 PDF 페이지에서 원시 텍스트를 추출합니다.
  2. 시맨틱 청킹 (Chunking): 고정된 길이가 아닌 문단 경계를 존중하여 약 500 토큰 단위로 텍스트를 나눕니다. 이는 문맥의 일관성을 유지하여 의미가 끊기지 않도록 하기 위함입니다.
  3. 임베딩 및 저장: 각 청크는 Voyage AI를 통해 1024차원 벡터로 변환되며, neighbor Gem을 통해 pgvector 인덱스가 적용된 document_chunks 테이블에 저장됩니다.

RAG 쿼리 흐름 및 실시간 스트리밍

사용자의 질문이 입력되면 시스템은 다음과 같은 절차를 거쳐 답변을 구성합니다.

  • 유사도 검색: 질문을 동일한 Voyage AI 모델로 임베딩한 후 pgvector의 코사인 유사도 검색을 통해 가장 관련성이 높은 상위 5개의 청크를 검색합니다.
  • 프롬프트 증강: 검색된 문맥을 시스템 프롬프트에 주입하고, LLM에게 답변 시 인용 마커([1], [2] 등)를 사용하도록 지시합니다.
  • Turbo Streams 응답: ruby_llm을 통해 생성되는 토큰을 Solid Cable과 Turbo Streams를 사용하여 실시간으로 브라우저에 스트리밍합니다. 이는 사용자가 전체 답변이 완성될 때까지 기다리지 않게 합니다.

사용자 경험을 위한 설계 패턴

  • 줌 패턴 (Zoom Pattern): LLM 요약(1단계), 특정 청크 확인(2단계), 전체 소스 문서 보기(3단계)로 이어지는 점진적 정보 공개 방식을 적용하여 정보의 정확성을 검증할 수 있게 합니다.
  • 인용 시스템: Stimulus 기반 모달을 통해 사용자가 AI 답변의 근거가 된 원문과 페이지 번호를 즉시 확인할 수 있게 하여 신뢰성을 높였습니다.
  • 코퍼스(Corpus) 페이지: 관리자가 업로드한 문서 목록을 공개하여 사용자가 시스템이 알고 있는 지식의 범위를 미리 파악하고 적절한 질문을 할 수 있도록 유도합니다.

결론

저자는 Rails 8과 PostgreSQL, 그리고 풍부한 Ruby 생태계의 Gem들을 조합하면 별도의 복잡한 ML 인프라 없이도 상용 수준의 RAG 시스템을 구축할 수 있음을 강조합니다. 특히 Solid Queue/Cable/Cache를 통해 Redis 의존성을 제거하고, pgvector를 통해 기존 데이터베이스 내에서 벡터 검색을 수행함으로써 운영 복잡도를 획기적으로 낮췄습니다. 이는 Rails 개발자들에게 AI 기술을 기존 웹 애플리케이션에 통합하는 명확하고 효율적인 경로를 제시하며, 단순한 답변 생성을 넘어 출처 확인이 가능한 신뢰할 수 있는 시스템 구축의 중요성을 시사합니다.

댓글 0

댓글 작성

댓글 삭제 시 비밀번호가 필요합니다.

이미 계정이 있으신가요? 로그인 후 댓글을 작성하세요.

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!