AI-네이티브 Rails 아키텍처는 기존의 ‘AI 기반’ 앱과 명확히 구분됩니다. 많은 앱이 사용자 입력 → OpenAI 전송 → 결과 표시 방식에 머무르지만, AI-네이티브는 데이터베이스의 벡터 검색 지원, UI의 스트리밍 기대, 워크플로우의 LLM 지연 시간 고려, 로직의 확률적 답변 처리, 다단계 추론 오케스트레이션, 장기 실행 작업 조정, 그리고 단순히 폼이 아닌 컨텍스트 지식 기반 구축을 특징으로 합니다.
2025년 AI-네이티브 Rails 스택은 다음과 같습니다:
-
Rails 7/8: 핵심 프레임워크
-
Hotwire (Turbo + Stimulus): 실시간 UI 및 비동기 업데이트
-
Sidekiq 또는 Solid Queue: 백그라운드 작업 처리 및 AI 오케스트레이션
-
Postgres with PgVector: 벡터 검색을 통한 AI 메모리 및 지식 그래프 저장
-
OpenAI, Anthropic, 또는 Groq API: LLM(대규모 언어 모델) 연동
-
Langchain.rb: AI 툴링 및 구조화
-
ActionCable: 토큰별 스트리밍을 통한 실시간 사용자 경험 제공
-
종합적인 로깅 및 관측 가능성: AI 시스템의 특수성 고려
이 아키텍처에서 Rails는 제약 조건을, AI는 불확실성을 처리합니다. Rails는 유효성 검사, 데이터 검색, 벡터 검색, 체인 오케스트레이션, 규칙 적용, 도구 라우팅, 백그라운드 워크플로우, UI 스트리밍, 비용 추적 등을 담당하며, AI는 추론, 요약, 문제 해결, 계획 수립, 초안 생성, 모호한 입력 해석 등을 수행합니다. 즉, Rails는 지휘자이고 AI는 오케스트라입니다.
두 가지 실질적인 AI-네이티브 Rails 사례는 다음과 같습니다:
1. 이커머스 AI 고객 지원
기존 시스템의 환각 현상, 정책 오류, 컨텍스트 망각 문제를 해결합니다.
-
1단계: 사용자 질문 제출: Turbo Frame/Stream을 통해
POST /support_queries로 전송, Rails는 사용자, 질문, 메타데이터를 저장합니다. - 2단계: Rails가 두 개의 워커 트리거:
EmbeddingJob: OpenAI를 통해 임베딩을 생성하고 PgVector 컬럼에 저장합니다.AnswerGenerationJob: 제품 카탈로그, 주문 내역, 반품 정책, 이전 채팅, FAQ 규칙에 대한 유사성 검색을 수행하고, 검색된 컨텍스트를 LLM에 전달하여 답변을 생성하며, JSON 출력을 검증하고 (선택적으로) 추론 단계를 저장합니다.
- 3단계: 답변 스트리밍: ActionCable + Turbo Streams를 통해 토큰이 도착하는 대로 푸시하여 사용자가 사람이 타이핑하는 것처럼 답변을 실시간으로 확인합니다. 이 아키텍처는 접지(grounding)를 통해 정확도를 높이고, 벡터 검색으로 토큰 사용량을 줄여 비용을 절감하며, 구조 강화를 통해 환각 현상을 줄이고, 감사 가능한 컨텍스트를 제공하며, 스트리밍으로 UX를 극대화합니다.
2. 전략, 자료, 로드맵을 위한 창업가 도구
창업가가 피치 덱, PDF, 이메일, 스프레드시트 등 실제 회사 문서를 업로드하면 GPT가 이를 활용하여 추론하게 합니다.
-
1단계: 문서 업로드: Rails는 PDF를 텍스트 → 청크 → 임베딩으로 변환합니다.
-
2단계: 지식 그래프 저장: PgVector가 임베딩을 저장하고 메타데이터가 통찰력을 연결합니다.
-
3단계: Rails가 구조 정의: 스키마, 출력 형식, 비즈니스 규칙, 에이전트 제약 조건, 허용된 도구, 유효성 검사 필터 등을 적용합니다.
-
4단계: Langchain.rb가 추론 오케스트레이션: Rails가 경계를 설정하여 AI가 정해진 범위 내에서 작동하도록 합니다.
-
5단계: Turbo Streams로 진행 상황 표시: “통찰력 추출 중…”, “경쟁사 분석 중…” 등 진행 상황을 실시간으로 보여주어 신뢰를 구축하고 인지된 가치를 높입니다.
이러한 AI-네이티브 아키텍처를 구축하기 위한 기술 스택은 다음과 같습니다:
-
Rails + Hotwire 프론트엔드: Turbo Streams와 Turbo Frames를 활용하여 React 없이 실시간 AI 경험을 제공합니다.
-
PgVector: 임베딩 저장을 위한 AI 메모리 역할을 하며,
embedding컬럼을 통해 벡터 검색을 가능하게 합니다. -
Sidekiq 또는 Solid Queue: LLM 호출은 컨트롤러에서 직접 실행되지 않고,
EmbeddingJob,ChunkingJob,RetrievalJob,LLMQueryJob,GroundedAnswerJob,AgentWorkflowJob등 전용 워커를 통해 비동기적으로 처리됩니다. -
AI 서비스 계층:
Embeddings::Create와 같은 경량 Ruby 서비스 객체를 통해 AI API 호출을 캡슐화합니다. -
검색 계층:
Document.order(Arel.sql("embedding <-> '#{embedding}' ASC")).limit(5)와 같은 쿼리를 사용하여 임베딩 기반 유사성 검색을 수행하여 환각을 방지하고 비용을 절감합니다. -
ActionCable을 통한 스트리밍: 토큰 스트리밍 UX는 마법처럼 느껴지며 사용자 유지에 기여합니다.
-
관측 가능성 계층 (필수): 프롬프트, 모델, 비용, 컨텍스트 청크, 오류, 재시도, 지연 시간 등을 추적하여 AI 시스템의 특수한 문제 해결에 필수적입니다.