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는 배포 방식에 따라 선택합니다.
| Case | App 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를 사용합니다.
| Resource | Service | Purpose |
|---|---|---|
| Postgres | RDS | users, creations, payments, credits ledger |
| Redis | ElastiCache | realtime progress, pub/sub, cache, rate limit |
| Generation queue | SQS | backend -> ai-node-agent |
| Post-processing queue | SQS | ai-node-agent -> post-processing-worker |
| Media storage | S3 | raw 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 병목은 두 단계로 대응합니다.
-
CPU/RAM이 부족하지만 단일 인스턴스 운영이 충분한 경우
prod-app-01을t3.medium에서t3.large로 vertical scale
-
단일 장애점 제거 또는 트래픽 분산이 필요한 경우
prod-app-02t3.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-agentheartbeat- 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-01t3.medium 준비 -
prod-ai-01t3.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 확인