본문 바로가기
← cd ~/dongwoobaeprojects/ycc-website

LIVE — 첫 프로젝트의 고객 소개로 이어진 후속 의뢰

영천중앙교회 홈페이지

교회 공식 홈페이지 및 콘텐츠 운영 CMS. 매주 반복되는 설교·주보·갤러리 운영 부담을 줄이기 위해 YouTube 설교 자동 동기화, HWP 주보 구조화, AI 요약·썸네일 생성까지 이벤트 기반 파이프라인으로 자동화했습니다.

ROLE
기획 · 설계 · 개발 · 배포 · 운영
PERIOD
운영 중
STACK
Next.js · TypeScript · Neon · Drizzle · Better Auth · R2 · HWP Parser
LINKS
repo ↗ · live ↗
영천중앙교회 공개 홈페이지
관리자 CMS의 설교 관리 화면 — YouTube 동기화와 AI 요약 상태
↑ 공개 홈페이지 / 관리자 CMS — 설교 관리 (YouTube 동기화·AI 요약 상태)

## 설교 자동 동기화 — WebSub 푸시

폴링 없는 실시간 등록

채널 피드를 Google PubSubHubbub 허브에 구독. 업로드 발생 시 허브가 Atom 알림을 푸시 → 주기적 폴링 불필요. yt:videoId를 파싱해 QStash ingest-video 잡 발행으로 파이프라인 연결.

콜백 보안 2겹 + 구독 자동 갱신

구독 검증은 우리 채널 토픽일 때만 hub.challenge 에코, 알림은 X-Hub-Signature(HMAC-SHA1)를 timing-safe 비교로 위조 차단. WebSub 리스 만료는 QStash cron 재구독으로 방지, 누락분은 재생목록 순회 백필로 보완.

## AI 요약 파이프라인 — 서버리스 메시지 큐

QStash 단계 체이닝

Vercel 서버리스(장기 실행 불가) 환경에서 ingest-video → fetch-transcript → summarize를 독립 잡으로 분리해 QStash로 연결. 잡 엔드포인트는 HMAC 서명 검증으로 보호.

동시성 제어 + 서버리스식 백오프

Postgres CTE UPDATE...RETURNING으로 설교 1건을 원자적 선점해 중복 요약 차단. sleep이 불가능하므로 QStash 지연 발행(delay)으로 지수 백오프(5·3ⁿ분) 구현. Gemini responseSchema로 요점·타임스탬프 챕터를 JSON 스키마로 강제.

## 그 외

HWP 주보 구조화

HWP 바이너리를 직접 파싱해 웹에서 구조화 렌더링 — 매주 주보 등록을 업로드 한 번으로 축소.

AI 설교 썸네일 생성

AI가 한글을 못 그리는 문제를 피해 배경만 AI 생성, 글자는 @vercel/og로 코드 합성. 누끼는 자막 밴드 crop + preview 사이즈 처리로 유료 크레딧 0원 설계.