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 같은 백엔드 버전"입니다.
PaaS의 부활: Heroku 몰락과 Railway·Fly.io 부상
Heroku 시대의 종말 (2022)
Heroku(2007)는 PaaS(Platform as a Service)의 선구자였습니다. git push heroku main 한 줄로 배포가 끝나는 경험은 혁명적이었습니다. 하지만 2022년 8월, Salesforce는 무료 플랜 종료를 발표했습니다.
무료 플랜 종료의 충격:
- 수백만 개의 취미·교육 프로젝트가 shutdown
- 유료 전환 ($7/월~)은 개인 개발자에게 부담
- AWS Elastic Beanstalk·Google App Engine은 복잡함
이 공백을 Railway(2020)와 Fly.io(2017)가 메웠습니다.
Railway vs Fly.io vs Heroku: 철학 비교
| 측면 | Railway | Fly.io | Heroku |
|---|---|---|---|
| 철학 | ”Heroku 단순함 계승" | "Edge 네이티브 PaaS" | "원조 PaaS” |
| 배포 | GitHub 자동 배포 | fly deploy CLI | Git push |
| 실행 환경 | Docker | Firecracker microVM | Dyno (Container) |
| 네트워크 | 단일 리전 | Global Anycast | 리전 선택 |
| DB 복제 | ❌ (단일 인스턴스) | ✅ (멀티 리전) | ✅ (Postgres 유료) |
| 무료 티어 | $5 크레딧/월 | 3 VM + 3GB DB | ❌ (종료) |
| 가격 | $0.000463/GB-sec | $0.0000008/초 + $0.02/GB | $7/dyno |
Railway의 강점: “설정 제로, Heroku의 재림”
Railway는 Heroku의 단순함을 현대적으로 재현했습니다:
- Nixpacks (Heroku Buildpack 오픈소스 대체): Node.js·Python·Go 자동 인식
- GitHub 연동: Push하면 자동 배포
- 환경변수 GUI: 클릭으로 설정
- DB 템플릿: Postgres·Redis·MongoDB 원클릭 추가
Fly.io의 강점: “Edge 네이티브, 글로벌 배포”
Fly.io는 Firecracker microVM + Anycast 네트워크로 차별화:
- Firecracker: AWS Lambda가 쓰는 경량 VM (5ms 시작)
- Global Anycast: 사용자가 가장 가까운 리전으로 자동 라우팅
- 멀티 리전 DB: Postgres primary + read replica를 여러 리전에 자동 배포
- WireGuard VPN: 리전 간 private 네트워크
Fly.io 네트워크 아키텍처:
사용자(서울) → Fly Anycast IP → 서울 리전 VM → DB Primary(도쿄)
사용자(뉴욕) → Fly Anycast IP → 뉴욕 리전 VM → DB Replica(뉴욕)
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 배포 가이드
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. Railway·Fly.io PaaS 완벽 가이드. Dockerfile 배포·자동 SSL·멀티 리전·DB 원클릭·Heroku Buildpack 호환. Vercel/Netlify와 다른 진짜 백엔드 PaaS. 가격·배포… 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.
Q. 선행으로 읽으면 좋은 글은?
A. 각 글 하단의 이전 글 또는 관련 글 링크를 따라가면 순서대로 배울 수 있습니다. C++ 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.
Q. 더 깊이 공부하려면?
A. cppreference와 해당 라이브러리 공식 문서를 참고하세요. 글 말미의 참고 자료 링크도 활용하면 좋습니다.
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- Railway 완벽 가이드 | 간편한 배포·PostgreSQL·Redis·환경 변수·실전 활용
- Cloudflare Pages 완벽 가이드 | 무료 배포·Edge 렌더링·Wrangler CLI
- Render 완벽 가이드 | 무료 배포·PostgreSQL·Static Site·Cron Jobs·실전 활용
이 글에서 다루는 키워드 (관련 검색어)
Railway, Fly.io, PaaS, Heroku, Deployment, Docker, DevOps, Cloud 등으로 검색하시면 이 글이 도움이 됩니다.