Skip to main content

Initial Production Infrastructure

이 문서는 초기 유료 운영 기준의 prod 인프라 구성을 정의합니다. 목표는 비용을 낮게 유지하면서도 app 실행부와 AI 실행부를 분리해, 생성량 증가 시 AI server만 수평 확장할 수 있게 만드는 것입니다.

1. Baseline Decision

초기 prod는 EC2 두 대로 시작합니다.

prod-app-01: t3.medium
prod-ai-01: t3.medium

RDS, ElastiCache, SQS, S3는 prod 기준 managed service로 둡니다. Postgres와 Redis를 app EC2 내부 container로 운영하지 않습니다.

2. App Server

prod-app-01은 사용자-facing application runtime을 담당합니다.

prod-app-01 (t3.medium)
- frontend-vivid-ai
- backend-vivid-ai
- post-processing-worker
- app-side runtime and deployment scripts

App server에는 ComfyUI와 ai-node-agent를 올리지 않습니다.

Reverse proxy는 배포 방식에 따라 선택합니다.

CaseApp server reverse proxy
ALB/CloudFront가 /, /api, WebSocket, TLS를 처리불필요
단일 EC2에서 같은 도메인으로 frontend/backend를 직접 라우팅Caddy/Nginx 필요

초기 운영에서는 ALB 또는 CloudFront 같은 외부 L7 라우팅을 쓰는 경우 app 내부 reverse proxy container를 생략할 수 있습니다.

3. AI Server

prod-ai-01은 생성 실행부를 담당합니다.

prod-ai-01 (t3.medium)
- ComfyUI 1개
- ai-node-agent 1개
- optional reverse-proxy/nginx 1개

AI server의 기본 단위는 ComfyUI + ai-node-agent 한 묶음입니다. 현재 ai-node-agent는 하나의 COMFY_API_URL, COMFY_WS_URL을 기준으로 동작하므로 ComfyUI 1개를 전담하는 구조가 가장 단순하고 안전합니다.

Reverse proxy는 ComfyUI UI/API를 외부에서 직접 확인해야 할 때만 둡니다. ai-node-agent가 ComfyUI와 내부 통신만 한다면 Docker network 또는 localhost 직접 연결을 우선합니다.

4. Managed Services

Prod source of truth와 durable queue/storage는 managed service를 사용합니다.

ResourceServicePurpose
PostgresRDSusers, creations, payments, credits ledger
RedisElastiCacherealtime progress, pub/sub, cache, rate limit
Generation queueSQSbackend -> ai-node-agent
Post-processing queueSQSai-node-agent -> post-processing-worker
Media storageS3raw outputs, finalized creations, source uploads

Queue와 bucket/prefix는 local/dev/prod를 반드시 분리합니다.

5. AI Node Scaling

생성 대기 시간이 증가하면 app server를 키우기보다 AI server를 추가합니다.

prod-ai-01: t3.medium, ComfyUI 1 + ai-node-agent 1
prod-ai-02: t3.medium, ComfyUI 1 + ai-node-agent 1
prod-ai-03: t3.medium, ComfyUI 1 + ai-node-agent 1

각 AI EC2는 고유한 NODE_ID를 가져야 합니다.

prod-ai-node-01
prod-ai-node-02
prod-ai-node-03

각 노드는 독립된 local input, output, temp volume을 사용합니다. 여러 ComfyUI가 같은 디렉터리를 공유하지 않습니다.

6. App Server Scaling

App server 병목은 두 단계로 대응합니다.

  1. CPU/RAM이 부족하지만 단일 인스턴스 운영이 충분한 경우

    • prod-app-01t3.medium에서 t3.large로 vertical scale
  2. 단일 장애점 제거 또는 트래픽 분산이 필요한 경우

    • prod-app-02 t3.medium 추가
    • ALB로 frontend/backend traffic 분산
    • post-processing-worker는 별도 worker EC2 또는 ECS task로 분리 검토

초기에는 app server를 두 대로 시작하지 않습니다. 먼저 AI queue latency와 app resource usage를 관찰합니다.

7. t3.small Policy

AI server를 t3.small 여러 대로 나누는 것은 비용 실험으로는 가능하지만 초기 paid prod 기본값으로 두지 않습니다.

이유:

  • t3.small은 2GiB RAM이라 ComfyUI, PyTorch CPU runtime, custom nodes, agent를 함께 올리기에 빠듯할 수 있습니다.
  • 외부 API 노드 기반이라도 ComfyUI 프로세스 자체의 idle/peak memory를 확인해야 합니다.
  • OOM 재시작이 발생하면 유료 생성 실패율이 올라갑니다.

사용하려면 먼저 staging에서 다음 조건을 확인합니다.

idle memory
generation peak memory
container restart count
OOMKilled 여부
job duration p50/p95
failure rate

Peak memory가 충분히 낮게 유지될 때만 t3.small 다중 노드를 검토합니다.

8. What Not To Do Initially

초기 prod에서는 다음 구성을 피합니다.

  • t3.medium 한 대에 ComfyUI 묶음 3~5세트 실행
  • 단일 ai-node-agent가 여러 ComfyUI를 스케줄링하도록 즉시 리팩터링
  • prod Postgres를 EC2 container로 직접 운영
  • prod Redis를 EC2 container로 직접 운영
  • ComfyUI UI를 public internet에 인증 없이 노출

여러 ComfyUI를 단일 agent가 관리하는 구조는 가능하지만, scheduler, prompt mapping, websocket event routing, timeout/cancel handling, per-node volume isolation이 필요합니다. 초기 유료 운영에서는 ComfyUI + ai-node-agent 한 쌍을 수평 확장하는 방식이 더 안전합니다.

9. Monitoring Requirements

초기 prod부터 아래 지표를 봅니다.

App server

  • CPU usage
  • memory usage
  • disk usage
  • backend 5xx rate
  • backend latency p95
  • WebSocket connection count
  • post-processing job duration/failure rate

AI server

  • CPU usage
  • memory usage
  • disk usage
  • ComfyUI container restart count
  • ai-node-agent heartbeat
  • generation job duration p50/p95
  • generation failure rate
  • provider API error rate

Queue

  • SQS visible message count
  • SQS oldest message age
  • dead-letter queue count
  • post-processing queue backlog

10. Security Rules

  • Prod EC2는 instance profile/IAM role을 사용합니다.
  • 장기 AWS access key를 image, .env, repository에 넣지 않습니다.
  • COMFY_ORG_API_KEY 등 provider key는 AI server secret으로만 주입합니다.
  • App server와 AI server는 필요한 outbound와 backend relay/WebSocket 통신만 허용합니다.
  • ComfyUI UI가 필요하면 SSM port forwarding 또는 인증된 reverse proxy를 사용합니다.
  • Prod SQS/S3/RDS/Redis는 dev/local credential로 접근할 수 없게 분리합니다.

11. Initial Rollout Checklist

  • prod-app-01 t3.medium 준비
  • prod-ai-01 t3.medium 준비
  • RDS Postgres prod database 준비
  • ElastiCache Redis prod cluster 준비
  • prod generation SQS queue 준비
  • prod post-processing SQS queue 준비
  • prod media S3 bucket/prefix 준비
  • app server env에서 prod queue/bucket/DB/Redis 연결
  • AI server env에서 고유 NODE_ID 설정
  • AI server env에서 AI_AGENT_RELAY_HTTP_URL, AI_AGENT_RELAY_WS_URL 설정
  • CloudWatch 또는 동급 모니터링에서 CPU/RAM/disk/queue/job metrics 확인