α Alphaware
TECH

Railway로 RAG API 서버 배포하기: Docker 없이 5분 만에

퀀트 리서치용 RAG 시스템을 Railway에 배포하는 방법입니다. GitHub 연동으로 push하면 자동 배포되고, 비용도 Heroku보다 훨씬 저렴합니다.

Railway로 RAG API 서버 배포하기: Docker 없이 5분 만에

왜 배포가 귀찮은가

RAG 시스템을 로컬에서 만들었습니다. LangChain + Qdrant + Claude API 조합으로 금융 문서 검색이 잘 됩니다. 그런데 팀원이 쓰려면 서버에 올려야 합니다.

선택지는 보통 이렇습니다:

  1. EC2에 SSH 접속해서 수동 세팅 — 번거롭고 관리가 힘듦
  2. Docker + ECS/Kubernetes — 과도한 복잡성
  3. Heroku — 비쌈 (무료 플랜도 없어짐)
  4. Railway — 이걸 쓰게 됐습니다

Railway가 편한 이유

Railway는 GitHub 리포지토리를 연결하면 main 브랜치 push 시 자동으로 빌드·배포합니다. Dockerfile이 있으면 그걸 쓰고, 없으면 언어를 감지해서 자동으로 빌드합니다.

Python FastAPI 프로젝트 기준:

  1. GitHub에 코드 올림
  2. Railway에서 “Deploy from GitHub” 선택
  3. 리포지토리 선택
  4. 완료

환경변수는 Railway 대시보드에서 설정합니다. ANTHROPIC_API_KEY, QDRANT_URL 같은 민감한 값을 코드에 넣지 않아도 됩니다.


FastAPI RAG 서버 예시

# main.py
from fastapi import FastAPI
from anthropic import Anthropic
from qdrant_client import QdrantClient
import os

app = FastAPI()
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
qdrant = QdrantClient(url=os.environ["QDRANT_URL"])

@app.post("/query")
async def query(question: str) -> dict:
    # 1. Qdrant에서 관련 문서 검색
    results = qdrant.search(
        collection_name="research_docs",
        query_vector=embed(question),
        limit=5
    )
    context = "\n\n".join([r.payload["text"] for r in results])

    # 2. Claude로 답변 생성
    response = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=1000,
        messages=[{
            "role": "user",
            "content": f"컨텍스트:\n{context}\n\n질문: {question}"
        }]
    )
    return {"answer": response.content[0].text}

Railway에 requirements.txt만 있으면 Python 환경을 자동으로 잡아줍니다.


비용 계산

Railway 가격 (2026년 4월 기준):

  • Hobby 플랜: $5/월 — 512MB RAM, 1vCPU, 1GB 디스크
  • Pro 플랜: $20/월 — 8GB RAM, 8vCPU, 100GB 디스크
  • 실제 사용량 기반으로만 과금 (켜놓는 시간 × 리소스)

가벼운 RAG API (퀀트 팀 내부용)는 Hobby $5/월로 충분합니다. FastAPI는 메모리를 많이 먹지 않고, Qdrant는 별도 인스턴스(Qdrant Cloud 무료 플랜)로 빼면 됩니다.

Heroku 대비 비교:

  • Heroku Basic: $7/월 (512MB RAM, 한 서버만)
  • Railway Hobby: $5/월 + 사용량 기반, 여러 서비스 배포 가능

실제 세팅 순서

1. 코드 구조

my-rag-api/
├── main.py
├── requirements.txt
└── (Dockerfile 선택)

requirements.txt:

fastapi==0.115.0
uvicorn==0.32.0
anthropic==0.40.0
qdrant-client==1.12.0

2. Railway 배포

  1. railway.app 접속 (GitHub으로 로그인)
  2. New Project → Deploy from GitHub repo
  3. 리포지토리 선택
  4. 환경변수 추가: ANTHROPIC_API_KEY, QDRANT_URL
  5. 자동 배포 완료

Railway가 main.py에서 FastAPI를 감지하면 자동으로 uvicorn main:app --host 0.0.0.0 --port $PORT 형태로 실행합니다.

3. 커스텀 도메인 (선택)

기본 도메인은 xxx.railway.app 형태입니다. 커스텀 도메인은 Railway 대시보드에서 CNAME 설정으로 연결됩니다.


유용한 패턴: 슬랙 웹훅 연동

퀀트 팀 내부 RAG 봇으로 쓸 때 Slack 슬래시 커맨드와 연결하면 편합니다.

@app.post("/slack/command")
async def slack_command(
    text: str = Form(...),
    response_url: str = Form(...)
) -> dict:
    # 비동기로 처리하고 Slack에 결과 전송
    asyncio.create_task(
        process_and_respond(text, response_url)
    )
    return {"text": "분석 중... (잠시 후 결과가 전송됩니다)"}

슬랙에서 /rag 오늘 BTC 온체인 요약해줘 하면 RAG가 저장된 문서를 검색해 답변합니다.


결론

Railway는 복잡한 DevOps 없이 Python 서버를 배포하기 좋은 서비스입니다. GitHub 연동으로 CI/CD가 자동화되고, 환경변수 관리도 깔끔합니다.

내부 리서치 도구나 팀 공유용 API 서버 정도의 용도라면 Hobby $5/월로 충분합니다. 트래픽이 많아지면 Pro 플랜으로 올리거나 인스턴스 수를 늘리면 됩니다.

Railway 가입 링크 — 레퍼럴로 가입하면 $20 크레딧이 제공됩니다.

#railway #deployment #rag #fastapi #python

Newsletter

주간 퀀트·마켓 인사이트 구독

시장 분석, 퀀트 전략 아이디어, AI·데이터 도구 인사이트를 이메일로 받아보세요.

구독하기 →
같은 카테고리 더 보기 TECH →