Quudos 구축하기: Amazon Aurora + Vercel 기반의 캐스팅 플랫폼
요약
Vercel과 Amazon Aurora를 활용하여 캐스팅 매니지먼트 플랫폼 'Quudos'를 구축한 기술 사례입니다. 관계형 데이터 모델링과 서버리스 아키텍처를 통해 복잡한 캐스팅 워크플로우를 관리하는 방법을 다룹니다.
핵심 포인트
- Vercel 프론트엔드와 Amazon Aurora PostgreSQL 기반의 서버리스 아키텍처 활용
- NestJS와 node-postgres를 이용한 API 및 트랜잭션 관리
- 캐스팅 프로세스 최적화를 위한 관계형 데이터 모델 설계
- 캠페인 및 지원서 라이프사이클 관리를 위한 PostgreSQL Enum 활용
저는 H0: Hack the Zero Stack with Vercel v0 and AWS Databases 해커톤에 참여하기 위해 이 포스트를 작성했습니다. #H0Hackathon
영감 — 개인적인 이야기
이 프로젝트는 제 딸로부터 시작되었습니다. 13살인 딸은 배우 지망생입니다. 이미 전국 단위 광고부터 어린이 TV 프로그램까지 다양한 캠페인과 쇼에 출연했고, 뉴욕과 브루클린의 패션쇼 무대에도 섰습니다. 오디션을 보러 가거나 셀프 테이프 (self-tape)를 녹화할 때마다, 저는 전체 과정이 얼마나 단절되어 있는지 목격했습니다. 이메일로 접수하고, 문자 메시지 속에 파묻힌 일정, 폴더 여기저기에 흩어진 파일들, 그리고 상황이 실제로 어떻게 진행되고 있는지 보여주는 명확한 뷰가 없었습니다. 뉴욕과 LA의 매니지먼트사(talent agencies)들과 이야기를 나누어 보았는데, 그들은 모두 똑같은 말을 했습니다. 여전히 수동으로 아티스트를 관리하고 있으며, 이는 확장성(scale)이 없다는 것이었습니다. 그것이 제가 Quudos를 만든 이유입니다.
문제점
매니지먼트사들은 스프레드시트, 이메일 스레드, 공유 폴더, 그리고 서로 연결되지 않은 캐스팅 데이터베이스를 짜깁기하여 캐스팅을 운영합니다. 지원서(submissions)는 유실되고, 콜백(callbacks)은 놓치기 일쑤이며, 캠페인이 브레이크다운(breakdown) 단계부터 예약(booking) 단계까지 어떻게 진행되는지 확인할 수 있는 단일한 장소가 없습니다. Quudos는 매니지먼트사를 위한 올인원 운영체제(operating system)입니다. 아티스트 명단(roster)을 관리하고, 캐스팅 캠페인을 시작하며, 콜백과 예약에 이르는 모든 지원 과정을 추적합니다. 이번 해커톤을 위해 저는 이를 zero stack으로 구축했습니다. 프론트엔드는 Vercel을 사용하고, 기본 데이터베이스로는 Amazon Aurora PostgreSQL을 사용합니다.
아키텍처
- Frontend: Vercel 상에서 동작하는 Angular 싱글 페이지 앱(single-page app)이며, 그 앞단에는 v0로 구축한 마케팅 랜딩 페이지가 있습니다.
- API: 풀링(pooling), 트랜잭션(transactions), 그리고 어드바이저리 락(advisory locks)을 사용하는
node-postgres기반의 NestJS (Node) 서비스입니다. - Primary database:
us-east-1리전의 Amazon Aurora PostgreSQL (Serverless v2) — 모든 매니지먼트사, 아티스트 프로필, 캠페인, 역할(role), 지원서 및 라이프사이클 이벤트에 대한 기록 시스템(system of record) 역할을 합니다. - Auth: 관리형 인증 제공업체(managed auth provider)가 JWT를 발행하면 API가 이를 검증합니다. 모든 애플리케이션 데이터는 Aurora에 저장됩니다.
왜 Aurora인가 — 그리고 의도적인 데이터 모델
캐스팅은 본질적으로 관계형(relational)이므로, 다음과 같이 모델링했습니다:
organizations(에이전시) →users(관리자 + 인재) →actor_profiles,actor_media,actor_documentsworkflow_items(캠페인) →campaign_roles→assignments(제출물) →campaign_events(라이프사이클)
상태(Status)는 PostgreSQL의 열거형(enums)으로 강제됩니다. 캠페인 라이프사이클(DRAFT → COLLECTING_SUBMISSIONS → SUBMITTED_TO_CASTING → CALLBACK → BOOKED → CLOSED)과 제출물 라이프사이클(AWAITING_ACCEPT → ACCEPTED → UPLOADED → SUBMITTED → REVIEWED)이 이에 해당합니다. API는 트랜잭션(transactions)과 pg_advisory_lock을 사용하여 여러 에이전트에 의한 동시 업데이트가 일관성을 유지하도록 합니다. Aurora Serverless v2는 단일 에이전트부터 수천 건의 제출물까지 동일한 아키텍처를 확장(scale)합니다.
해커톤 기간 동안 구축한 것
Quudos는 이전에 호스팅된 Postgres 환경에 존재했습니다. 제출 기간 동안 저는 Aurora Serverless v2를 프로비저닝하고, Aurora에 스키마(schema)를 재생성하고, 데이터를 마이그레이션(migrate)한 뒤, API의 DATABASE_URL을 Aurora 클러스터로 다시 지정하고, v0 랜딩 페이지와 함께 Vercel에 프론트엔드를 배포했습니다.
배운 점
- node-postgres + Aurora는 매끄럽게 작동합니다 — Aurora는 표준 Postgres 프로토콜을 사용하므로, 데이터 레이어(data layer)를 다시 작성할 필요 없이 연결 문자열(connection-string) 변경만으로 이전할 수 있었습니다.
- 진정한 관계형 모델은 오버헤드가 아니라 기능입니다 — 열거형(enums), 트랜잭션(transactions), 그리고 어드바이저리 락(advisory locks)은 캐스팅 워크플로우를 신뢰할 수 있게 만들며, 이는 에이전시가 정확히 필요로 하는 것입니다.
- "제로 스택(zero stack)"은 실재합니다 — 프론트엔드를 위한 Vercel과 백엔드를 위한 Aurora를 통해 빠르게 프로덕션 수준의 앱을 구축할 수 있었습니다.
향후 계획
인재를 여러 에이전시 및 캐스팅 디렉터와 연결하는 배우 대상 무료 액세스, 캐스팅 디렉터 포털, 통합 결제/계약 메모(deal-memo) 모듈, AI(브리프 생성 + 예약 확률 점수 산정), 그리고 멀티 리전 확장을 위한 Aurora DSQL을 통해 Quudos를 브레이크다운(breakdown) 단계부터 결제 단계까지 확장할 예정입니다. 이미 뉴욕과 LA의 두 에이전시가 사용을 대기하고 있습니다.
구축 기술: Angular · v0 · Vercel · NestJS · Node.js · Amazon Aurora PostgreSQL (Serverless v2) · node-postgres. #H0Hackathon을 위해 제작되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기