Railway 완벽 가이드 | 간편한 배포·PostgreSQL·Redis·환경 변수·실전 활용
이 글의 핵심
Railway로 빠른 배포를 구현하는 완벽 가이드입니다. Git 연동, PostgreSQL, Redis, 환경 변수, 도메인 설정까지 실전 예제로 정리했습니다.
실무 경험 공유: Heroku에서 Railway로 전환하면서, 비용이 70% 절감되고 배포 속도가 2배 빨라진 경험을 공유합니다.
들어가며: “Heroku가 비싸요”
실무 문제 시나리오
시나리오 1: Heroku 무료 플랜이 없어졌어요
비용이 부담됩니다. Railway는 $5 크레딧을 제공합니다.
시나리오 2: 데이터베이스 설정이 어려워요
복잡한 설정이 필요합니다. Railway는 클릭 한 번으로 추가됩니다.
시나리오 3: 배포가 느려요
빌드 시간이 깁니다. Railway는 빠른 빌드를 제공합니다.
1. Railway란?
핵심 특징
Railway는 간편한 배포 플랫폼입니다.
주요 장점:
- 간단한 배포: Git push로 자동
- 데이터베이스: PostgreSQL, MySQL, Redis
- 환경 변수: 간편한 관리
- 도메인: 커스텀 도메인 지원
- 저렴한 비용: 사용한 만큼만
2. 프로젝트 배포
Git 연동
- Railway 로그인
- New Project
- Deploy from GitHub repo
- 저장소 선택
- 자동 배포 시작
CLI 배포
npm install -g @railway/cli
railway login
railway init
railway up
3. 데이터베이스
PostgreSQL 추가
- Project → New → Database → PostgreSQL
- 자동으로
DATABASE_URL환경 변수 생성
연결
// lib/db.ts
import { Pool } from 'pg';
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
export default pool;
Redis 추가
- Project → New → Database → Redis
- 자동으로
REDIS_URL환경 변수 생성
import { createClient } from 'redis';
const redis = createClient({
url: process.env.REDIS_URL,
});
await redis.connect();
4. 환경 변수
설정
# Railway Dashboard → Variables
DATABASE_URL=postgresql://...
API_KEY=secret123
NODE_ENV=production
로컬에서 사용
railway run npm run dev
5. 도메인 설정
Railway 도메인
your-app.up.railway.app
커스텀 도메인
- Settings → Domains
- 도메인 추가
- DNS 설정
Type Name Value
CNAME www your-app.up.railway.app
6. 실전 예제
Express + PostgreSQL
// server.ts
import express from 'express';
import pool from './lib/db';
const app = express();
app.use(express.json());
app.get('/api/users', async (req, res) => {
const result = await pool.query('SELECT * FROM users');
res.json(result.rows);
});
app.post('/api/users', async (req, res) => {
const { email, name } = req.body;
const result = await pool.query(
'INSERT INTO users (email, name) VALUES ($1, $2) RETURNING *',
[email, name]
);
res.status(201).json(result.rows[0]);
});
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
package.json
{
"scripts": {
"start": "node dist/server.js",
"build": "tsc",
"dev": "tsx watch src/server.ts"
}
}
7. Monorepo 배포
설정
# railway.toml
[build]
builder = "NIXPACKS"
buildCommand = "npm run build --workspace=api"
[deploy]
startCommand = "npm run start --workspace=api"
restartPolicyType = "ON_FAILURE"
restartPolicyMaxRetries = 10
8. 로그 확인
railway logs
정리 및 체크리스트
핵심 요약
- Railway: 간편한 배포 플랫폼
- Git 연동: 자동 배포
- 데이터베이스: PostgreSQL, Redis
- 환경 변수: 간편한 관리
- 도메인: 커스텀 도메인 지원
- 저렴한 비용: 사용한 만큼만
구현 체크리스트
- Railway 계정 생성
- Git 연동
- 프로젝트 배포
- 데이터베이스 추가
- 환경 변수 설정
- 도메인 설정
- 로그 확인
같이 보면 좋은 글
- Vercel 완벽 가이드
- Docker Compose 완벽 가이드
- Heroku 대안 가이드
이 글에서 다루는 키워드
Railway, Deployment, PostgreSQL, Redis, DevOps, Hosting, Backend
자주 묻는 질문 (FAQ)
Q. Heroku와 비교하면 어떤가요?
A. Railway가 더 저렴하고 간단합니다. Heroku는 더 성숙하지만 비쌉니다.
Q. Vercel과 비교하면 어떤가요?
A. Railway는 백엔드에 적합합니다. Vercel은 프론트엔드에 최적화되어 있습니다.
Q. 무료로 사용할 수 있나요?
A. 매달 $5 크레딧이 제공됩니다. 소규모 프로젝트는 충분합니다.
Q. 프로덕션에서 사용해도 되나요?
A. 네, 많은 스타트업에서 안정적으로 사용하고 있습니다.