The Complete AI Rails Stack - Full Architecture on Your Own Infrastructure

개요

Rails 애플리케이션에 AI 기능을 통합하기 위한 완전한 아키텍처를 구축하는 것은 단순히 모델 API를 호출하는 것이 아니라, 실제 사용자와 권한, 백그라운드 작업, 캐싱, 검색 및 오류 처리를 포함하는 애플리케이션에 모델 호출을 통합하는 것이 핵심 과제입니다.

주요 내용

  • Rails AI 스택 구성 요소: 브라우저, Nginx, Rails 애플리케이션(컨트롤러, 모델, 뷰, API)을 중심으로 PostgreSQL(앱 데이터 및 pgvector), Redis(캐시 및 작업 조정), Active Job / Sidekiq 워커, AI 제공자(OpenAI, Anthropic, 로컬 모델 등)가 포함됩니다.
  • 모델 API 접근 제어: 컨트롤러가 모델 API에 직접 접근하는 것을 방지하고, AI 작업은 서비스 클래스와 Job 뒤에 두어 애플리케이션의 테스트 용이성을 유지합니다.
  • Rails 앱 초기 설정: rails new 명령으로 Rails 애플리케이션을 생성하고, sidekiq을 추가하며, pgvector 확장을 위한 마이그레이션을 실행하고, neighbor Gem을 사용하여 Rails 친화적인 벡터 검색 기능을 구현합니다.
  • 서비스 객체를 통한 모델 접근 래핑: Ai::ChatClient와 같은 서비스 객체를 사용하여 OpenAI API 호출을 캡슐화하고, 시간 초과, 재시도, 로깅 및 제공자 전환을 단일 지점에서 처리합니다.
  • 느린 AI 작업 Job으로 이동: 임베딩, 요약, 문서 파싱, 이미지 생성과 같은 느린 AI 작업은 요청 주기 외부에 있는 백그라운드 Job으로 처리하여 사용자 요청을 빠르게 유지합니다.
  • 검색(Retrieval) 구축: 임베딩된 문서에 대해 nearest_neighbors를 사용하여 벡터 데이터베이스에서 관련 문서를 검색하고, 이를 RAG(Retrieval-Augmented Generation) 스타일의 응답 생성에 활용합니다.
  • 웹 및 워커 프로세스 분리: VPS에서는 웹 프로세스(사용자 서빙)와 워커 프로세스(AI 작업 처리)를 최소 두 개의 프로세스로 분리하여 실행합니다.
  • 캐싱 및 관찰 가능성(Observability) 조기 도입: AI 기능의 비용 증가를 고려하여 반복되는 AI 작업 결과를 캐싱하고, 제공자별 시간, 실패율, 토큰 사용량 등을 로깅하여 비용 효율성을 관리합니다.
  • 명확한 경계 유지: 컨트롤러(입력 수락, 권한 부여, 출력 렌더링), 모델(지속성 및 도메인 규칙), 서비스(API 제공자 통신 및 AI 흐름 구성), Job(장기 실행 또는 재시도 가능한 작업) 등으로 역할을 명확히 분리하여 유지보수성을 확보합니다.

시사점

이 아키텍처는 Rails 애플리케이션에서 AI 기능을 확장 가능하고 유지보수하기 쉬운 방식으로 구축할 수 있는 실질적인 프레임워크를 제공하며, 이를 통해 소규모 VPS 환경부터 대규모 프로덕션 시스템까지 일관된 핵심 아이디어를 유지하며 확장할 수 있습니다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions