azosi · 2026.7.29 03:17 · 조회 1
Revideo 렌더링 서비스 배포
프로덕션 환경에 Revideo 렌더 엔드포인트를 배포하는 패턴을 다룬다. SaaS / 사내 자동화 / 대량 영상 생성 시스템의 백엔드를 만들 때 필요한 결정과 트레이드오프를 정리한다.
🌐 렌더 서비스를 왜 별도 배포하나
| 배치 렌더 (스크립트) | 렌더 서비스 (HTTP) |
|---|---|
| 한 번에 1개씩 | 여러 요청 동시 처리 |
| 로컬/Cron | HTTP API로 호출 |
| 결과는 파일 | 응답은 mp4 바이너리/URL |
| 운영 부하 낮음 | 스케일링/큐 필요 |
SaaS / B2B: 사용자가 폼을 제출하면 몇 초~수 분 안에 개인화된 영상을 돌려줘야 함 → 렌더 서비스 필수. 내부 자동화 / 대량 생성: 큐 + 워커로 비동기 처리.
🏗️ 아키텍처 패턴
패턴 A: 동기 HTTP 엔드포인트 (단순)
Client ──POST /render──▶ Express 서버 ──renderVideo()──▶ mp4 응답
│
└─FFmpeg + Chromium
- 장점: 단순, 디버깅 쉬움
- 단점: 30초+ 영상은 HTTP 타임아웃 위험
- 적합: 짧은 클립(10초 이하), 데모
패턴 B: 비동기 큐 (권장)
Client ──POST /render──▶ API 서버 ──enqueue()──▶ Redis/SQS ──▶ Worker ×N ──▶ S3
◀── {jobId} │
mp4 저장
Client ──GET /jobs/:id──▶ API 서버 ──status: completed──▶ {url: ...} ◀┘
- 장점: 스케일 자유도, 장편 가능, 재시도 가능
- 단점: 큐/스토리지 운영 필요
- 적합: SaaS, 대량 생성, 장편
패턴 C: SaaS Template 활용 (가장 빠름)
Revideo SaaS Template이 패턴 B를 Next.js + Fly Machines로 미리 구현해 둠. 수정해서 쓰기 가장 빠름.
🐳 Docker 이미지
프로덕션에서는 Chromium + FFmpeg가 포함된 이미지를 빌드:
FROM node:20-slim
# Chromium + FFmpeg
RUN apt-get update && apt-get install -y \
chromium ffmpeg \
fonts-noto-cjk fonts-noto-color-emoji \
&& rm -rf /var/lib/apt/lists/*
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Revideo 공식 Docker 패턴: GitHub
redotvideo/examples저장소에docker-compose.yml예제 있음.
🔌 최소 HTTP 엔드포인트
// server.ts
import express from 'express';
import {renderVideo} from '@revideo/core/render';
import {tmpdir} from 'os';
import path from 'path';
const app = express();
app.use(express.json({limit: '1mb'}));
app.post('/render', async (req, res) => {
const {variables} = req.body;
const outFile = path.join(tmpdir(), `video-${Date.now()}.mp4`);
try {
await renderVideo({
projectFile: './src/project.ts',
settings: {outFile, size: [1080, 1920]},
variables,
});
res.sendFile(outFile);
} catch (err) {
res.status(500).json({error: String(err)});
}
});
app.listen(3000);
📈 스케일링 전략
| 전략 | 트레이드오프 |
|---|---|
| 수평 확장 (워커 N대) | 가장 단순. 큐 + 동일 이미지 × N |
| 청크 분할 렌더 | 한 영상을 N개가 나눠 렌더 후 concat. 빠르지만 복잡 |
| GPU 인스턴스 | Chromium 비디오 인코딩 가속. 비쌈 |
| 콜드 스타트 캐싱 | Chromium/FFmpeg를 워밍 상태로 유지. 응답 시간 ↓ |
청크 분할은 Revideo가 아직 공식 1급 지원은 아님 (2026-07 기준). GitHub Discussions에서 사례 공유 중.
🛡️ 운영 체크리스트
| 항목 | 권장 |
|---|---|
| 타임아웃 | 동기 API는 30초 상한, 그 이상은 큐 |
| 속도 제한 (rate limit) | IP당 분당 5회 등 — 워커 폭주 방지 |
| 스토리지 정리 | 임시 mp4 TTL (예: 1시간 후 S3 lifecycle) |
| 로깅 | jobId, userId, durationMs, variables 구조화 |
| 에러 재시도 | 일시적 Chromium 크래시는 1회 재시도 |
| 콜드 스타트 | 워커 idle 0 유지 or Fly Machines auto_stop_machines = off |
🔑 SaaS Template이 기본 제공하는 것
- Next.js 14 + TypeScript
- Fly Machines 기반 워커 풀
- Postgres (사용자/영상 메타)
- Stripe 결제 연동 (사용량 기반 청구)
- 인증 (NextAuth)
- S3 호환 스토리지
운영 부담 없이 SaaS 시작하려면 템플릿 그대로 fork → env 설정 → deploy. 자체 인프라 원하면 패턴 B를 처음부터 조립.
🚀 다음 단계
| 작업 | 가이드 |
|---|---|
| SaaS 템플릿 살펴보기 | Revideo SaaS Template |
| 공식 Render Endpoint 사용 | Revideo 플랫폼 Render Endpoint |
| 렌더 성능 최적화 | Revideo 성능 & 최적화 |
🔗 공식 리소스
- 공식 문서: https://midrender.com/revideo/docs/guide/building-webapps/deploy-rendering-service
- GitHub: https://github.com/midrender/revideo
- SaaS Template: https://github.com/midrender/revideo/tree/main/packages/saas-template
- Midrender Platform: https://midrender.com
상위 문서: ← Revideo 렌더링 출처: Revideo 공식 문서 — Deploying a Rendering Service in Production 한글화 (2026-07-29) 공급사: Revideo (현 Midrender)
변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-07-29 | 초안 작성 — 렌더 서비스 배포 패턴 3종 + Docker/스케일링 체크리스트 |
댓글
아직 댓글이 없습니다.
댓글을 작성하려면 로그인이 필요합니다.