대규모 합성 렌더링 시스템에서의 역할과 기술적 도전
디자인 결과물을 이미지, PDF, 영상, 인쇄 출력물로 변환하는 일은 단순한 파일 생성 문제가 아닙니다.
수십만 건의 실시간 요청, 다양한 출력 포맷, 프론트엔드·백엔드·인쇄 시스템까지 연결되는 복잡한 파이프라인 속에서 성능, 정확성, 생산성을 동시에 만족시켜야 합니다.
이 글에서는 합성(Compositing) 시스템을 중심으로,
미리 캔버스가 어떤 역할을 수행하고 있고 어떤 기술적 과제를 해결하고 있는지 공유하고자 합니다.
프론트엔드 팀과 백엔드 팀 사이, 합성팀의 역할
합성팀은 전통적인 백엔드 팀과는 다르게 FullStack에 가까운 역할을 수행합니다.
프론트엔드에서만 필요한 데이터의 경우,
Java Spring 백엔드를 거치지 않고 합성 레이어에서 직접 가공·제공함으로써:
•
불필요한 API 왕복을 줄이고
•
데이터 전달 비용을 최소화하며
•
프론트엔드 개발 속도를 높입니다.
반대로, Java Spring 백엔드 전용 리소스는
자동화된 배치·처리 시스템을 통해 일괄 관리하여 전체 시스템의 결합도를 낮춥니다.
이 구조의 핵심은 명확합니다.
“모든 요청을 한 레이어로 몰지 않는다.”
역할을 분리하고, 흐름을 단순화함으로써
시스템 전체의 유지보수성과 생산성을 동시에 확보합니다.
고속 렌더링 파이프라인 구축과 성능 병목 해소
합성(Compositing)이란
사용자의 디자인 결과물을 서버에서 실제 출력물로 렌더링하는 과정을 의미합니다.
이 과정에는 다음과 같은 기술들이 사용됩니다.
•
Puppeteer: 브라우저 기반 이미지 렌더링
•
FFmpeg: 동영상 합성 및 인코딩
•
Apache POI / PDFBox: 문서 및 PDF 생성
문제는 단순한 기능 구현이 아닙니다.
매일 수십만 건의 실시간 렌더링 요청을 안정적으로 처리해야 합니다.
이를 위해 다음과 같은 구조적 최적화가 필수적입니다.
•
대용량 병렬 처리를 고려한 작업 큐 아키텍처
•
동일 결과물 재사용을 위한 결과 캐싱 전략
•
CPU·메모리·I/O 병목을 고려한 렌더링 워커 분리
•
요청 특성별 렌더링 파이프라인 분기
속도만 빠른 시스템이 아니라,
부하가 증가해도 무너지지 않는 구조를 만드는 것이 핵심 과제입니다.
그럼 우리는 “AWS(ECS, ElastiCache, SQS, DocumentDB)는 안 쓰는데, 지금 스택에서 Redis를 중심으로 큐·캐시·동시성 제어를 구성하려면 뭘 쓰는 게 좋을까?”
Redis OSS + Sentinel 또는 Cluster
내가 생각한 구조
•
Redis OSS
•
Sentinel → HA / 자동 failover
•
or Redis Cluster → 샤딩 + 확장성
이유는 ?
•
BullMQ랑 궁합 최고
•
Redis 내부 구조 이해하면서 튜닝 가능
•
장애/병목 분석에 강해짐
[ NestJS API ]
↓
[ BullMQ ]
↓
[ Redis (Sentinel/Cluster) ]
↓
[ Worker (worker_threads / child_process) ]
↓
[ Puppeteer / FFmpeg / PDFBox ]
JavaScript
복사
대체 요약을 해봅시다.
AWS 스택 | 대체 |
ECS | Docker Compose / Kubernetes |
CloudWatch | Prometheus + Grafana |
Datadog | 그대로 쓰거나 Grafana Tempo |
OpenSearch | OpenSearch self-host |
S3 | MinIO |
요약
Core: Node.js, NestJS
Queue: BullMQ
Redis: Redis OSS + Sentinel (or Valkey)
DB: MongoDB
Worker: worker_threads + child_process
Storage: MinIO
CI/CD: GitHub Actions
Deploy: Docker / K8s
Monitoring: Prometheus + Grafana + OpenSearch
JavaScript
복사
안녕하세요
•
관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.
Hello 
•
For technical and business inquiries, please contact me at “glory@keti.re.kr”






