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)
- railway.app → New Project → Deploy from GitHub
- Repo 선택 → Railway가 Buildpack 자동 인식
- 환경변수 설정 (Dashboard)
- 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 요약
| 항목 | Railway | Fly.io |
|---|---|---|
| 배포 방식 | GitHub push 자동 | fly deploy |
| Buildpack | Nixpacks (Heroku 호환) | fly launch가 Dockerfile 생성 |
| DB | Postgres·Redis·MySQL 원클릭 | fly postgres create |
| 멀티 리전 | 단일 리전 | Anycast + multi-region VM |
| 가격 (무료) | $5 크레딧 | 3 VM + 3GB Postgres |
| 스케일링 | 수동 (Dashboard) | auto-scale + auto-stop |
| 네트워크 | 표준 HTTP/HTTPS | 6PN 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 deploy후fly 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 배포 가이드