Railway & Fly.io 완벽 가이드 — 헤로쿠를 잇는 현대 PaaS, Dockerfile만으로 배포

Railway & Fly.io 완벽 가이드 — 헤로쿠를 잇는 현대 PaaS, Dockerfile만으로 배포

이 글의 핵심

Heroku의 유료화 이후 개발자 커뮤니티가 찾은 대안은 Railway와 Fly.io입니다. Railway는 "GitHub push → 자동 배포"의 단순함과 Heroku Buildpack 호환으로 제로 설정 배포를 제공하고, Fly.io는 Firecracker microVM + global Anycast로 edge 배포·DB 복제·멀티 리전을 네이티브 지원합니다. 둘 다 Dockerfile 배포·무료 티어·자동 SSL·환경변수·오토스케일링을 기본 제공해 "Vercel/Netlify 같은 백엔드 버전"입니다.

Railway 시작

npm install -g @railway/cli
railway login
railway init
railway up

또는 Railway Dashboard에서 GitHub repo 연결 → 자동 배포.

Railway 배포 (GitHub)

  1. railway.app → New Project → Deploy from GitHub
  2. Repo 선택 → Railway가 Buildpack 자동 인식
  3. 환경변수 설정 (Dashboard)
  4. Git push → 자동 배포

Railway 환경변수

# CLI
railway variables set DATABASE_URL="postgres://..."
railway variables

# Dashboard
Project Variables Add Variable

환경변수는 빌드 시 + 런타임 모두 주입.

Railway DB 추가

railway add --plugin postgres

Dashboard에서도 New → Database → Postgres 클릭. 즉시 프로비저닝 + DATABASE_URL 환경변수 생성.

Railway Dockerfile

FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Dockerfile이 있으면 Buildpack 우선순위보다 높아 Dockerfile로 빌드.

Railway 커스텀 도메인

Dashboard → Settings → Domains → Add Custom Domain → CNAME 설정.

Fly.io 시작

# macOS/Linux
curl -L https://fly.io/install.sh | sh

# Windows
powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"

fly auth login
fly launch    # 프로젝트 초기화 + fly.toml 생성
fly deploy

fly.toml

app = "my-app"
primary_region = "nrt"  # Tokyo

[build]

[http_service]
  internal_port = 3000
  force_https = true
  auto_stop_machines = "stop"
  auto_start_machines = true
  min_machines_running = 1

[[vm]]
  size = "shared-cpu-1x"
  memory = "256mb"
  • primary_region: 주 리전 (nrt=도쿄, icn=서울, sjc=실리콘밸리 등)
  • auto_stop_machines: 트래픽 없으면 자동 중단 → 비용 절약

Fly.io 환경변수

fly secrets set DATABASE_URL="postgres://..."
fly secrets list

fly deploy 시 자동 주입.

Fly Postgres

fly postgres create --name my-db --region nrt
fly postgres attach my-db

DATABASE_URL 자동 생성. 추가 replica:

fly machine clone --region sjc --app my-db

Read replica를 여러 리전에 자동 배치.

Fly 멀티 리전 배포

fly scale count 3 --region nrt,sjc,ams

3개 리전에 VM 분산 배치. Anycast IP로 유저가 가장 가까운 리전에 자동 라우팅.

Fly Dockerfile

FROM node:20-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/server.js"]

fly deploy가 Dockerfile 자동 인식 + buildkit으로 빌드.

Fly 커스텀 도메인

fly certs create example.com
fly certs create www.example.com

DNS에 A/AAAA 레코드 추가 → 자동 SSL 발급.

Railway vs Fly.io 요약

항목RailwayFly.io
배포 방식GitHub push 자동fly deploy
BuildpackNixpacks (Heroku 호환)fly launch가 Dockerfile 생성
DBPostgres·Redis·MySQL 원클릭fly postgres create
멀티 리전단일 리전Anycast + multi-region VM
가격 (무료)$5 크레딧3 VM + 3GB Postgres
스케일링수동 (Dashboard)auto-scale + auto-stop
네트워크표준 HTTP/HTTPS6PN private network
로그Dashboard 실시간fly logs
모니터링기본 메트릭Prometheus·Grafana 연동

Railway 실전 예제

# Node.js 앱
git clone https://github.com/my-org/api
cd api
railway init
railway add --plugin postgres
railway variables set NODE_ENV=production
railway up

# 도메인 연결
# Dashboard → Domains → api.example.com

Fly.io 실전 예제

# Go 앱
fly launch --name my-go-api --region nrt
fly secrets set API_KEY=xyz123
fly postgres create --name my-pg --region nrt
fly postgres attach my-pg
fly deploy
fly scale count 2 --region nrt,sjc
fly status

환경변수 비교

  • Railway: Dashboard GUI + railway variables
  • Fly: fly secrets (암호화 저장)

둘 다 .env 파일 업로드 불가 → CLI나 Dashboard로만 설정.

로그 & 모니터링

# Railway
railway logs

# Fly.io
fly logs
fly status
fly dashboard       # Grafana 링크

Fly는 Prometheus endpoint 제공 → 자체 모니터링 스택 연동 가능.

CI/CD 통합

Railway: GitHub Actions

- name: Deploy to Railway
  uses: bervProject/railway-deploy@main
  with:
    railway_token: ${{ secrets.RAILWAY_TOKEN }}
    service: api

Fly.io: GitHub Actions

- uses: superfly/flyctl-actions/setup-flyctl@master
- run: flyctl deploy --remote-only
  env:
    FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

비용 예측 (2026년 기준)

Railway

  • Compute: $0.000463/GB-hour
  • 1GB RAM 24/7 = ~$10/월
  • DB: 별도 (같은 요금)

Fly.io

  • shared-cpu-1x (256MB): $1.94/월
  • dedicated-cpu-1x (2GB): $62/월
  • Postgres 1GB: $0.02/GB-hour = ~$15/월

무료 티어로 취미 프로젝트는 충분, 프로덕션은 $20-50/월 예상.

트러블슈팅

Railway 배포 실패

  • Buildpack 로그 확인 → 누락된 빌드 스크립트
  • railway logs 실시간 확인
  • Dockerfile로 전환

Fly 멀티 리전 DB 복제 안 됨

  • fly postgres attach가 primary만 연결 → replica는 수동 DNS 설정
  • fly postgres connect + pgbouncer 활용

Railway 메모리 OOM

  • Dashboard → Settings → RAM 증설
  • 가격 재계산

Fly 6PN private 네트워크 안 보임

  • fly deployfly wireguard create + VPN 연결
  • 또는 fly proxy 터널

체크리스트

  • Railway 또는 Fly CLI 설치
  • GitHub repo 또는 Dockerfile 준비
  • 환경변수 설정 (DATABASE_URL 등)
  • DB 프로비저닝 (Postgres/Redis)
  • 커스텀 도메인 + SSL
  • 로그·메트릭 확인
  • 멀티 리전 or 오토스케일 설정 (Fly)
  • 비용 알림 설정

마무리

Railway와 Fly.io는 Heroku가 남긴 “push to deploy” 경험을 현대적으로 계승한 PaaS입니다. Railway는 단순함·Buildpack 자동 인식·GitHub 통합으로 “Heroku의 직계”, Fly.io는 Firecracker microVM·Anycast·멀티 리전 복제로 “글로벌 edge PaaS”입니다. Vercel/Netlify는 정적·서버리스에 강하지만, Railway/Fly는 진짜 백엔드 서버(DB·WebSocket·gRPC·장기 실행)를 컨테이너로 배포할 때 최선입니다. 2026년 현재 OSS·스타트업·인디 해커들이 가장 많이 쓰는 백엔드 배포 플랫폼이며, 무료 티어로 충분히 체험 가능하니 지금 바로 첫 배포를 시도해보세요.

관련 글

  • Vercel 완벽 가이드
  • Cloudflare Pages 가이드
  • Docker 완벽 가이드
  • Kamal 2 배포 가이드