SNS 콘텐츠 자동화 파이프라인 · 2026-09-22

TrendReport SNS
데이터가 고르고, AI가 만들고,
성과로 검증한다

유튜브·뉴스·검색·쇼핑 신호를 매일 수집·분석해 콘텐츠 주제를 고르고,
카드뉴스·밈·AI 영상 숏폼을 자동 제작해 승인·게시하고, 그 성과를 다시 분석에 반영하는
완전 자동화 마케팅 의사결정 도구
서버 비용 ~0원/월 데이터 소스 7종 Python 69모듈 · 30,228줄
발표: Soohan Ma
점선 친 용어에 마우스를 올리면(휴대폰은 누르면) 뜻이 나옵니다
02 · WHY

분석이 목표가 아니다 — 검증 루프가 목표다

🚫 문제 — SNS 콘텐츠 제작의 현실 주제를 감으로 정한다 무엇이 뜨는지, 왜 반응하는지 근거가 없다 검증 없는 제작 만들고 나서 그 선택이 유효했는지 아무도 재지 않는다 끊어진 개선 고리 트렌드 도구는 많지만 제작 → 성과 → 개선으로 이어지는 것이 없다 🎯 목표 — 문제마다 하나씩 데이터가 주제를 고르게 한다 신호 6계층 → 주제 점수식 → 콘텐츠 브리프 운영 서비스의 마케팅 의사결정 도구로 유효성을 숫자로 검증한다 채택 기록 ↔ 게시 성과 연결 예측은 자동 채점으로 성적표를 남긴다 검증이 다시 분석을 고치게 한다 분석~피드백까지가 프로젝트의 범위 비용 ~0원 · 개인이 폰에서 운영 가능하게 🔁 과정 — Phase 1~5의 순환으로 구현 P1·2 트렌드 분석 7소스 매일 수집 · 신호 6계층 P3 주제 선정 점수식 후보 · 브리프 · 급상승 알림 P3.5 제작·게시 카드뉴스·밈·AI 영상 자동 생성 → 사람 승인 P4 성과 측정 채택 기록 ↔ 조회수 · 예측 자동 채점 P5 피드백 임계값 · 예측 모델 · 점수식을 검증대로 고친다
순환의 힘 — 검증 성과는 LangGraph 에이전트의 judge 노드가 판단 근거로 소비한다. 검증이 돌수록 다음 주제 선정이 좋아진다
03 · USER FLOW

운영자의 하루 — 전 과정이 폰에서 끝난다사람은 판단만 한다, 나머지는 시스템이상세 도식 ↗

⟲ 성과가 다음 주제 선정의 근거로 — 매주 반복 (Phase 5 피드백) 🤖 시스템 — 자동 나머지 전부: 수집 → 분석 → 기획 → 검증 → 렌더 → 초안, 게시 수행 · 성과 집계 · 리포트 발송까지 06:00 · 자동 새벽 배치 수집·분석·예측·초안 생성 월요일엔 리포트·브리프까지 아침 · 폰으로 발송 텔레그램 알림·미리보기 급상승 알림 · 초안·경고 건수 월: 3부 리포트 + 브리프 PDF 매일 누적 · 자동 성과 집계·리포트 자사 스냅샷 → '채택 성과 추적' validate 접근 유형별 비교 🙋 사람 — 판단만 5칸 중 2칸뿐: 승인과 채택 기록 — 검증 루프의 유일한 수동 입력 출근길 · 폰 — 판단 ① 콘솔에서 승인 초안·검사 결과를 보고 결정 — 게시(유튜브+3사 '모두')·폐기·캡처 교체 그때그때 — 판단 ② /adopt 채택 기록 "이 신호로 만들었다" 한 줄 — 키워드·서비스·채널·URL → adoptions
아래 레인의 첫 칸(승인 → 유튜브 게시)을 슬라이드 11에서 실제로 시연합니다
04 · ARCHITECTURE

시스템 전체 구조매일 06:00 KST 자동 실행 · ①~⑦ = 하루 한 바퀴의 순서GCP 구성 ↗모듈 상세 ↗일일 시퀀스 ↗

📡 소스 7종 유튜브 트렌딩·검색트렌딩 100건 + 추적 키워드 24개쿼터 ~2,440/10,000 units·일 유튜브 댓글상위 키워드 영상 + 인기 급상승 표본영상당 인기 댓글 50 · ≤130 units 네이버·구글 뉴스검색 API + RSS 헤드라인·8섹션~1,500건/일 데이터랩 검색량상위 + 도메인 + 상품 후보 키워드관심 신호 (조기 지표) 쇼핑인사이트 클릭카테고리 4종 · 성별·연령 분포구매 의도 신호 자사 채널 2개연동 계정 영상 성과 스냅샷키워드 미추출 = 트렌드 집계 격리 ⚙️ ② 수집 Job — 내부 흐름 ⏰ Cloud Scheduler 기동 매일 06:00 KST · 하루 1회 소스 6종 순차 수집 유튜브→뉴스→댓글→검색→쇼핑→자사 일별 스냅샷으로 저장 중복 제거 · 쿼터 관리 ⑤ prune + VACUUM 14·21일 보존 · 검증 데이터 영구 실패 시 → 정리 전 DB로 롤백 🗄 SQLite — 정본은 GCS ① 시작 시 복원(pull) · 세대 기억 파일 하나를 읽고 쓴다 → 10장 ⑥ 업로드 — 경합 시 3방향 병합 🔬 ③ 분석 3중 트렌드 (유튜브·뉴스·교차)급상승 점수 산정 → 6장 토픽 · 감성주제 묶기 · 반응 판정 → 6장 유행어 발굴댓글에서 뜨는 말을 찾는다 → 6장 교차 · 수요 성장률공동 급상승 · 선행 관계 → 5·6장 Holt 7일 예측 + 자동 채점영상 수 · 검색량 두 지표 → 12장 🤖 LLM 층 (Gemini) 브리프 에이전트(LangGraph) · RAG · 요약 📦 산출물 ③ 대시보드 (매일 갱신)11개 카드 · 어드민 콘솔이 GCS를 프록시 ④ 텔레그램 알림 (급증 시)수요 +30% & 평균≥1 · 같은 신호 3일 중복 억제 주간 리포트 3부 + 브리프 PDFweasyprint 조판 · 월요일 — 밀리면 일일 배치가 대신 발송 콘텐츠 초안 → 승인 → 게시카드뉴스·밈·AI 영상 숏폼 · 유튜브+3사 다중 게시 ⑦ 대시보드·리포트만 git 커밋 — DB는 커밋하지 않는다 리포트 장기 보관 — 조회는 콘솔 하나로 ⟲ /adopt 채택 기록 · 자사 성과 스냅샷 — 검증 루프로 피드백
💰 인프라: Cloud Run 무료 티어 + GCS + Secret Manager + Telegram = 월 ~0원
05 · SIGNALS

신호 6계층 — 여섯 신호가 두 판정으로 모인다"이 트렌드로 콘텐츠를 만들까?"에 답하는 구조

📺 공급 — 영상 활동량 "무엇이 만들어지나" — 제작자들의 반응 유튜브 트렌딩·검색 · 일별 스냅샷 🔍 관심 — 검색량 "무엇을 궁금해하나" — 공급보다 앞서는 조기 신호 데이터랩 · 카드뉴스 14일 차트의 재료 🛒 구매 의도 — 쇼핑 클릭 "무엇을 사려 하나" — 관심이 지갑으로 가는가 쇼핑인사이트 카테고리 4종 📰 여론 — 기사량 "무엇이 보도되나" — ~1,500건/일 유튜브와 lead-lag(±3일)로 선후를 가른다 💬 반응 결 — 댓글 감성 "왜, 어떻게 반응하나" — KNU 사전 + LLM 요약 심층 키워드 · 유행어 발굴의 원천 👥 타겟 — 성별·연령 "누가 반응하나" — 누구에게 말하는가의 근거 쇼핑인사이트 타겟 분포 판정 ① — 무엇을 만들까 넷이 공동 급상승 = 강한 신호 한쪽만 오르면 = 플랫폼 고유 현상 → 주제 선정 점수식의 입력 판정 ② — 어떻게 말할까 앵글 · 톤 · 타겟을 결정 긍정 → 참여형 / 부정 → 편승 주의 → 카피·연출·채널의 근거 📋 콘텐츠 브리프 서비스별 제작 후보 두 판정 + 지식 베이스(RAG) + 검증 성과(judge 노드) → 월요일 PDF · 자동 제작의 입력
06 · ANALYSIS

분석 엔진 — 세는 것이 아니라 가려내는 것모든 임계값은 실측으로 정했다

🔥 유행어 발굴 — 두 축을 따로 본다 slang.py상세 ↗

댓글 표현 집계 1·2그램 · 90일 기준선 호응 · 확산 분리 호응 = 좋아요 합 · 확산 = 댓글·영상 수 쏠림 = 최대 한 댓글 ÷ 합 쏠림 ≥60% → 태동 보류 '뭐야' — 84%가 한 댓글 다음 날 확산되면 자동 승격 평소 3배 미만 → 상시어 90일 일일 집계가 기준선 기준선 5일 이상일 때만 적용 확산 분산 → LLM 확정 '개웃기네' 댓글 25·영상 14 기각돼도 3배 급증하면 재심사
확정 유행어는 카피 생성에 주입 — 실제 쓰인 것만 승인 카드에 근거로 표시

🧹 트렌드 노이즈 — 3층에서 걸러진다 pools.py · preprocess.py상세 ↗

제목·태그 키워드 추출 층1 · 정적 필터 형식어·태그·숫자만 층2 · 비교 가능성 직전 7일도 돌던 것만 층3 · 상시어 기준선 구멍의 그림자 판정 급상승 확정 maplestory 12←4 ✗ 속보 · #태그 · 한 글자 ✗ 막 등록한 키워드의 '59←0' 오탐 ✗ '전체' 10←0 — 보존 정리가 만든 구멍이지 급증이 아니다
층3의 4단계 판정 (b7 = 평소 일평균×7일) — 기준선 5일↑ · 평소 b7≥3 · 직전 창<0.3×b7 · 이번 창<2×b7, 넷 다 '예'면 급증이 아니라 보존 정리가 만든 구멍의 그림자로 보고 급상승에서만 뺀다(인기 목록에는 남는다)

📈 Holt 7일 예측 + 자동 채점

오늘 실제값 고정(pool_actuals) 채점 ─ 실측 ┅ 예측 · ■ 80% 구간
보존 정리 후 재계산 금지 — 점수가 조용히 붕괴한다

🔀 교차 분석 — lead-lag

시차 ±3일 상관 유튜브 뉴스 함께 솟으면 공동 급상승 = 강한 신호
"이 트렌드는 어느 매체가 끌고 가나"를 가른다 (14일 창)

💬 감성 · 토픽

댓글 24,255좋아요 가중 KNU 감성사전점수 · 라벨 LLM 서사 요약왜 반응하는가 급상승 키워드개별 신호 영상 겹침 ≥0.6그리디 병합 토픽 클러스터묶인 트렌드
반응의 "결"을 읽는다 — 심층 키워드 · 베스트 댓글
07 · LLM LAYER

LLM 층 — 생성이 아니라 판단에 쓴다Gemini · LangGraph · RAG

LangGraph 브리프 에이전트 — 주간 브리프를 쓴다 (brief_agent.py) 분석 요약신호 6계층 압축 지식 검색 (RAG)지식 베이스 9문서 judge 노드Phase 4 검증 성과를 소비 브리프 작성서비스별 제작 후보 📋 브리프 PDF 월요일 텔레그램 발송 🤖 Gemini LLM 원칙 — LLM은 언어와 판단만, 수치·순위·지표는 코드가 계산한다 후보 밖 창작 금지 · 근거 자료가 유일한 사실 🔬 분석에서 부른다 댓글 서사 요약 "왜 반응하는가"를 문장으로 유행어 최종 판정 후보·예문·기준선을 주고 고르게만 검색 맞대결 짝짓기 경쟁·대체 관계인 두 키워드 선정 🎨 제작에서 부른다 기획·카피 한 벌 화면 글자와 낭독은 다른 글 장면 묘사 (영어) 주제 전체·훅·지표를 재료로 그림 지시 자기 검사 — 멀티모달 생성물을 보고 탈락·1회 재생성 판정 💰 모든 호출이 지나는 관 — 비용 투명성 (2026-09-20) 토큰 계수 콘텐츠 한 건이 쓴 토큰을 호출별로 기록 요금 환산 — 아는 단가만 모르는 단가는 환산하지 않는다 콘솔에 건별 표시 "이 카드뉴스 한 벌 = 몇 원"이 보인다
08 · CONTENT PIPELINE

콘텐츠 자동 제작 — 목적 → 기획 → 검증 → 렌더 → 승인→ 키로 단계별 진행상세 도식 ↗게시 경로 ↗

배치 06:00 planner·purposes LLM (Gemini) 렌더러 운영자 (콘솔) SNS 4곳 목적 결정 — 요청 > 생성 주기 > 계정 기본 홍보 · 트렌드 인사이트 · 안내 · 이벤트 — 게시할 계정이 없으면 만들지 않는다 채널이 못 올리는 종류, 요청 없는 안내·이벤트는 건너뛴다 — 사유를 기록하고 텔레그램으로 알린다 기획 한 벌 요청 재료: 주제 점수식 후보·14일 검색 추이·지식 베이스·브랜드 자료 카피·장 구성 반환 — 화면 글자와 낭독은 다른 글 규칙 검사 AI 검사 → 탈락한 장만 1회 보정 근거 자료별 판정 · 지어낸 수치·기능 금지 · 권유 행동(사람 문구)은 안 고친다 · 생성을 막지는 않는다 렌더 — 카드뉴스·밈·숏폼(Veo 클립+내레이션) 폼 6종 · 팔레트 7종 · 로고·캡처 합성 · 검색 차트 · 겹침 방지 초안 + 검사 결과(통과·보정됨·경고) 텔레그램 미리보기 · 유행어 반영 근거 표시 사람이 승인 → 게시 유튜브: 비공개 업로드 → publishAt 시각에 유튜브가 스스로 공개 (배치가 깨어나지 않는다) · 썸네일=훅 프레임 자동 인스타·쓰레드·페북: '모두' 버튼 다중 게시 · 폐기도 status=discarded로 남긴다 — 버린 것도 다음 선정의 자료 성과 스냅샷 · 채택 기록 → 검증 루프 (Phase 4)

핵심 설계

  • 채널은 매체가 정한다 — 숏폼=영상, 카드뉴스·밈=이미지
  • 승인은 항상 사람의 몫 · 검증은 막지 않고 경고로 남긴다

기획 근거 — 목적마다 다르다

  • 홍보 = 서비스 소개 전문(≤3,500자) · 인사이트 = 순위·차트
  • 안내·이벤트 = 입력 본문 그대로 (AI는 표지·캡션 첫 문장만)

렌더 규격 · 보정

  • 카드 3~7장 · 숏폼 5장 · 밈 1장 — 폼 6종 × 캔버스 3종, 로고는 원본 합성
  • 보정은 탈락 장만 1회 · 판정은 checks로 승인 카드까지
09 · VIDEO SHORTS

AI 영상 숏폼 — 측정이 이끈 품질 개선파이프라인 각 단계를 실측으로 조였다상세 도식 ↗

전제 · 왜 영상인가 화면 채움 0~5%AI 영상+내레이션 실측: 훅만 20~77%, 주제·CTA는 0~5% — 첫 2.5초 뒤는 사실상 검은 화면이었다 ③ · 낭독은 한 번에 읽힌다 음높이 1.79배1.11배 구간별 호출은 다른 사람처럼 들렸다 — 한 번에 읽고 긴 묵음에서 자른다 (호출도 1회) ④·⑤ · 생성과 검사를 같은 기준으로 탈락 7/80 · 이틀 16/16 채택 얼굴만 금지 — 만드는 쪽과 검사를 함께 좁혔다 한쪽만 풀면 비용은 내고 검사가 다 버린다 ① 설정·상한 확인 주 2편 · 실패한 지출도 센다 ② 문구 2벌 화면 글자 ≠ 낭독 문장 ③ 낭독 (TTS) 한 번에 읽고 묵음에서 자름 ④ Veo 클립 4×8초 9:16 · 720p · $1.60/건 ⑤ 검사 글자·얼굴 — 생성과 같은 기준 ⑥ 조립 그늘 · 소리 2겹 · 조각 굽기 ⑦ AI 영상 게시 1080×1920 · 약 37초 어느 단계든 막히면 → 카드 방식으로 조용히 강등 (영상이냐 카드냐만 갈린다) 2026-09-22 · 탈락이 0이 되자 되물었다 — 지금 무엇이 값을 못 하고 있나 장면 1개를 클립 4개가 공유 → 구간마다 장면 · 무대는 하나 (낭독은 상황→방법→결과로 나아가는데 그림은 제자리였다) 같은 무대·빛에서 동작과 앵글만 바꾼다 · 새 소품을 들이지 않는다 — 그것이 곧 탈락 위험을 낮추는 장치 · 함께 푼 것: 밝기는 팔레트가 정한다(영상만 어두웠다 99~128 vs 카드 171) · 소품은 치우지 않고 돌려 놓는다 ① · 비용이 새는 곳을 막는다 주 2편 상한 — 실패한 지출도 센다 성공만 세면 실패가 반복되는 날 상한이 없다 클립 $1.60/건 · 탈락하면 텔레그램으로 알림 ⑥ · 메모리 — 고친 줄 알았던 것 2Gi SIGKILL → 쪼개니 1.7GB 통과운영에선 거짓 한 그래프 조립이 원인이라 조각으로 나눠 구웠다. 그 1.7GB는 홀쭉한 부모로 잰 값이었다 — 배치는 하루치를 들고 있어 또 죽었다(9/19) → 4Gi·2CPU 이제 시험은 부모 밸러스트 500MB를 깔고 잰다 ⑥ · 글자 자리에만 그늘을 깐다 글자/바탕 대비 1.596.92 움직이는 배경의 글자 띠 밝기 35.6 → 122.2 — 글자층 알파로 그 자리만 어둡게 (밝은 화소 0%)
공통 원칙 — 고치기 전에 먼저 재고, 고친 뒤에도 다시 재서 숫자로 남긴다 · 산문 상세(16비트 경계·밸러스트 시험 등)는 상세 도식 ↗
10 · SAFEGUARDS

안전판 — 배치와 사람이 같은 DB를 동시에 쓴다실제로 겪은 사고들이 만든 장치

왜 필요한가 — 이 시스템은 새벽엔 배치(자동)가, 낮엔 운영자(콘솔)가 같은 DB 파일 하나를 고칩니다. 장치가 없으면 나중에 저장한 쪽이 앞의 저장을 통째로 덮어써 유실되고, 같은 릴스가 두 번 게시되고, 지운 설정이 몰래 도는 유령 수집이 생깁니다 — 뒤의 둘은 실제로 겪은 사고입니다. 아래는 그 사고를 하나씩 막는 장치입니다.
🔒 유실 방지 — 배치와 콘솔 저장이 겹친 날, 사람의 입력은 어떻게 살아남나 (❶~❺ 순서로) 배치 06:00 ❶ 내려받기(pull) 세대 12를 기억하고 시작 수집·분석·초안 생성 ❸ 올리기 거부 "받았던 12가 아니다" (13) ❹ 세 벌 비교 병합 시작본 · 내 결과 · 원격 최신 ❺ 올리기 성공 세대 14 콘솔·운영자 ❷ 콘솔에서 저장·올리기 ✓ 정본이 세대 13으로 바뀜 그 사이 원격(GCS 최신본)이 바뀌었다 ❹에서 사람 입력 테이블은 원격 우선 — 콘솔 저장이 살아남는다 🗄 GCS 정본 — 단 하나 trendreport.db 89MB · 35 테이블 · 배치·봇·콘솔 공용 세대(generation) = 바뀔 때마다 1씩 오르는 버전 번호 낙관적 잠금 — 미리 잠그지 않고, 올릴 때 번호가 다르면 거부한다 ⚡ 읽기 안전판 — 캐시 3층 1층 DB 읽기 — 60초 동안은 세대 재확인 생략 85MB 반복 전송 제거 (탭 지연의 전부였다) 2층 디자인 견본 — 512장 캐시 + 서버 시작 때 예열 요청당 21장 렌더 5초 → 36ms 3층 미디어 /tmp — 512MB 상한 임시 폴더가 실은 메모리라 — 상한으로 메모리 부족 방지 🧷 쓰기 안전판 원자 교체 — 완성본으로 통째 교체, 쓰다 만 파일 읽기 방지 게시는 재시도해도 한 번만 — 같은 릴스 중복 게시 차단 실제 사고 — 업로드 재시도 때 같은 릴스가 두 번 올라갔었다 👻 정본은 하나 — 유령 수집, 그리고 그 반대 파일+DB 이중 정본 → 지운 키워드 12개가 화면에 없는데 매일 쿼터를 소모했다 → projects 단일 정본으로 통일 (9/16) 그러자 이번엔 반대로 — 수집 키워드 47→8개, 영상 1,009→123건/일. 닷새 동안 몰랐다. 오류도 화면 이상도 없었다 — 단서는 쿼터가 매일 똑같은 817이었다는 것 하나 안전판은 코드가 아니라 데이터 구조의 문제다
11 · LIVE DEMO

라이브 데모 — 콘솔에서 올리고, 유튜브에서 확인한다실제 운영 콘솔(Cloud Run) → 실제 채널. 탭으로 오간다

🖥 어드민 콘솔 — 공개본에서는 화면을 싣지 않습니다
발표에서는 이 자리에 실제 운영 콘솔이 떠서, 새벽 배치가 만든 초안을 승인하고 유튜브로 올리는 것까지 시연합니다.

콘솔은 로그인한 운영자에게만 열리고 세션 쿠키가 같은 출처에서만 붙어, 이 공개본에서는 임베드가 동작하지 않습니다. 주소도 함께 뺐습니다.

콘솔이 하는 일 — 초안 미리보기·검사 결과·LLM 요금 · 계정 설정(팔레트·폼·연출·생성 주기) · 트렌드 대시보드 · 유튜브와 인스타·쓰레드·페북 '모두' 게시

▶ 유튜브 탭은 그대로 동작합니다 — 이 파이프라인이 실제로 만들어 올린 숏폼입니다.
12 · VALIDATION

유효성 검증 — 숫자로 두 가지를 묻는다① 고른 주제가 통했나 · ② 예측이 맞았나 — 2026-09-23 운영 DB로 다시 계산한 값 (범위 '전체'만 — 없어진 범위를 섞지 않는다)

① 고른 주제가 통했나 — 첫 번째 검증 8/24 · 영상 17건

트렌드를 직접 다룬 영상 113 캐릭터로 간접 표현한 영상 7 평균 조회수 — 직접 다룬 쪽이 16배
"트렌드를 직접 다루면 강하다"는 가설의 첫 실증. 표본이 작아 "관찰" 수준 — 그래서 두 번째 검증을 쌓는다(아래).

② 예측이 맞았나 — 채점이 모델이 아니라 대상을 가리켰다

무엇을 예측했나표본오를지 내릴지 맞힘
영상 수 — 전체 급상승 키워드1471일 59% · 3일 55% 동전
영상 수 — 프로젝트 키워드0채점 불가 영상 0건
검색량 — 프로젝트 키워드48~6666~78%
"모델이 약해서"가 아니었다. 프로젝트 키워드 8개 중 7개가 인기 차트 영상 0건 — 채점 자체가 불가능한 대상을 예측하고 있었다. 대상을 검색량으로 바꾸자 동전 수준을 넘었다.
재 보니 둘이 더 틀려 있었다"80% 구간"이 실은 95% 구간이었고(교과서 값을 쓰고 재지 않았다 · 0.7로 고쳐 실측 79.6%), 파라미터는 하필 가장 나쁜 칸에 있었다(다시 고르니 최적이 추세를 아예 끄는 것). 둘 다 화면엔 안 드러나던 것들이다.

지금 — 두 번째 검증을 쌓는 중 2026-09-22 · 3사 성과 추적이 열렸다

18
채택 기록
자동으로 쌓이는 중
13
게시 완료
유튜브 + 3사
13
성과 스냅샷
매일 새벽 자동
173
첫 조회수
릴스·쓰레드 합계
9/22에 마지막 구멍이 막혔다 — 유튜브만 자동 추적되고 3사는 게시하고 끝이었다. 이제 인스타·쓰레드·페이스북 게시물도 매일 새벽 조회·도달·좋아요를 스냅샷한다(post_stats). 루프의 '성과 측정' 칸이 처음으로 다 찼다 — 지금의 병목은 기록이 아니라 게시된 콘텐츠 수다.
13 · ROADMAP

로드맵 — 순환은 이미 돌고 있다2026-09-23 기준

P1 구축 ✅ 완료 7소스 수집 · 3중 분석 예측 · 알림 · 리포트 P2 축적 🔄 진행 신호 안정화 · GCP 이관 운영 결함 수정 P3 제작 연결 ✅ 완료 · 조기 착수 브리프 · 채택 기록 자사 채널 추적 P3.5 자동 제작 🔄 진행 · 3사 가동 9/20~22 LLM 층 · 카드뉴스·밈·숏폼 AI 영상 · 다중 게시 P4 검증 🔄 두 번째 검증 · 표본 축적 예측 채점 (대상을 바로잡음) 채택 성과 비교 (16배 관찰) P5 피드백 ⏳ 대기 · 근거는 확보됨 예측 대상 선별 · 임계값 재조정 리포트 구성 개편 ✅ 9/22 완료 — 인스타· 쓰레드·페북 매일 스냅샷 다음 — 비교군 3그룹 · 신호 지속성 · 리드타임 측정 다음 — 검색량 이력이 차면(10월초) 예측되는 키워드를 가려낸다 ⟲ 검증이 알려주는 대로 분석·임계값·모델을 고친다 — 직선이 아니라 순환이다
비용 0원 인프라 위에서 데이터가 주제를 고르고, AI가 만들되 사람이 승인하며, 그 성과가 다시 분석을 고치는 — 순환하는 마케팅 시스템입니다.
감사합니다 — Q&A
14 · STACK

개발 스택 — 무엇으로 만들었나Python 69모듈 · 30,249줄 · 인프라 월 ~0원 · Q&A용 참고

🐍 런타임

  • Python 3.12 (slim 이미지)
  • Flask — 콘솔·봇 웹훅, 서버 렌더
  • 의존성을 최소로 — requests · Pillow · markdown · cryptography
  • SEED 2.7.0 — 콘솔 화면(CDN 고정)

☁️ GCP 월 ~0원

  • Cloud Run 서비스 2 — 콘솔 · 텔레그램 봇
  • Cloud Run Job 1 — 일일 배치 (4Gi · 2CPU)
  • Cloud Scheduler — 매일 06:00 KST
  • Cloud Storage — DB 정본 · 미디어 · 리포트
  • Secret Manager — 토큰은 DB에 두지 않는다

🤖 AI Google GenAI

  • gemini-3.8-flash — 기획 · 카피 · 판정
  • gemini-3.1-flash-lite-image — 카드 배경
  • veo-3.1-lite — 숏폼 클립 8초 × 4
  • gemini-2.5-flash-tts — 내레이션
  • LangGraph — 주간 브리프 에이전트

🗄 데이터

  • SQLite 파일 하나 — 35 테이블 · 89MB
  • 정본은 GCS · 세대(generation) 낙관적 잠금
  • 경합 시 3방향 병합 — 사람 입력 우선

🎬 미디어

  • ffmpeg — 영상 조립 · 소리 · 그늘
  • Pillow — 카드뉴스 · 밈 렌더
  • weasyprint — 리포트 PDF 조판
  • kiwipiepy — 한국어 형태소(유행어)

🔌 외부 API

  • YouTube Data API v3 — 수집 · 업로드
  • 네이버 — 검색 · 데이터랩 · 쇼핑인사이트
  • Meta Graph 인스타 · 페북 / Threads API
  • Telegram Bot — 알림 · 승인 접점
고른 기준은 하나다 — 서버를 띄우지 않는다. 요청이 있을 때만 도는 Cloud Run과 파일 하나짜리 DB라 월 ~0원에 돌아간다. 대신 동시성을 직접 막아야 했다 → 10장
15 · APPENDIX

부록 — 상세 설계 도식 원본Q&A용 · 클릭하면 확대 · 스크립트가 생성하며 로직이 바뀌면 함께 갱신된다

GCP 상세 구성도
모듈 수준 상세 로직 플로우
일일 자동 사이클 시퀀스
주간 발송·채택·검증 시퀀스
콘텐츠 생성 → 게시
목적·문구·이미지 생성 ⓪~⑦
유행어 파악 → 콘텐츠 반영
트렌드 키워드 정제
영상 숏폼 — 클립·낭독·그늘
본편에서는 이 장을 건너뜁니다 — 원본은 draw.io 편집 가능 파일로 저장소 docs/diagrams/에 있습니다
1 / 15