Railway 완벽 가이드 | 간편한 배포·PostgreSQL·Redis·환경 변수·실전 활용

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 연동

  1. Railway 로그인
  2. New Project
  3. Deploy from GitHub repo
  4. 저장소 선택
  5. 자동 배포 시작

CLI 배포

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

3. 데이터베이스

PostgreSQL 추가

  1. Project → New → Database → PostgreSQL
  2. 자동으로 DATABASE_URL 환경 변수 생성

연결

// lib/db.ts
import { Pool } from 'pg';

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
});

export default pool;

Redis 추가

  1. Project → New → Database → Redis
  2. 자동으로 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

커스텀 도메인

  1. Settings → Domains
  2. 도메인 추가
  3. 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. 네, 많은 스타트업에서 안정적으로 사용하고 있습니다.

... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3