azosi · 2026.7.29 03:17 · 조회 1

Revideo 렌더링 서비스 배포

프로덕션 환경에 Revideo 렌더 엔드포인트를 배포하는 패턴을 다룬다. SaaS / 사내 자동화 / 대량 영상 생성 시스템의 백엔드를 만들 때 필요한 결정과 트레이드오프를 정리한다.


🌐 렌더 서비스를 왜 별도 배포하나

배치 렌더 (스크립트)렌더 서비스 (HTTP)
한 번에 1개씩여러 요청 동시 처리
로컬/CronHTTP 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이 기본 제공하는 것

Revideo 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 성능 & 최적화

🔗 공식 리소스

상위 문서: ← Revideo 렌더링 출처: Revideo 공식 문서 — Deploying a Rendering Service in Production 한글화 (2026-07-29) 공급사: Revideo (현 Midrender)

변경 이력

날짜변경
2026-07-29초안 작성 — 렌더 서비스 배포 패턴 3종 + Docker/스케일링 체크리스트

댓글

아직 댓글이 없습니다.

댓글을 작성하려면 로그인이 필요합니다.