Captain's Log
Observatory··약 3분

스스로 채점하는 배 — TrendReport SNS, 120시간 390커밋의 출항

NIPA-Google Study Jam PBL 3기 120시간. 트렌드 수집부터 AI 영상 숏폼 게시까지 도는 파이프라인을 월 0원 인프라에 올렸다. 예측에 자동 채점을 붙였더니 모델이 아니라 재는 대상이 틀렸다고 나왔다 — 영상 수에서 검색량으로 바꾸자 동전 수준을 넘어 66~78%.

UnderwayGCPLLMPipelineValidation

항해 기록

9/3 ~ 9/23 — 120시간, 390커밋. NIPA-Google Study Jam PBL 3기에서 만든 배다. 목표는 트렌드 분석 도구 하나를 더 얹는 것이 아니라, 주제를 고르고 만들어 올린 뒤 그 선택이 맞았는지 되재는 고리를 닫는 것이었다.

배의 구조. 매일 06:00 KST에 Cloud Run Job이 깨어 일곱 소스를 모은다 — 유튜브 트렌딩·검색, 뉴스, 댓글, 검색량, 쇼핑 클릭, 자사 채널. 3중 트렌드 분석(유튜브·뉴스·교차)을 돌리고, LLM이 기획과 카피를 쓰고, 카드뉴스·밈·AI 영상 숏폼을 렌더한다. 사람은 콘솔에서 승인만 한다. 게시는 유튜브와 인스타·쓰레드·페이스북. 인프라는 Cloud Run 서비스 둘에 배치 Job 하나, 데이터베이스는 파일 하나(SQLite, 정본은 GCS)다 — 서버를 띄우지 않아 월 0원에 돈다.

영상 — 측정이 이끈 자리. 첫 숏폼은 첫 2.5초 뒤로 사실상 검은 화면이었다(화면 채움 0~5%). AI 영상 클립과 내레이션을 넣었는데, 낭독을 구간마다 따로 부르니 음높이가 1.79배까지 벌어져 다른 사람 목소리처럼 들렸다. 한 번에 읽히고 긴 묵음에서 자르니 1.11배로 모였다. 클립 탈락은 한때 여덟 중 일곱이었다 — 만드는 쪽 제약만 풀고 검사는 그대로 둔 탓이었다. 둘을 같은 기준으로 맞추니 이틀 연속 16/16 채택.

고친 줄 알았던 메모리. 조립을 한 그래프에 다 넣으니 2Gi에서 SIGKILL이 났다. 조각으로 나눠 구우니 최대 1.7GB로 통과했는데, 그 측정은 홀쭉한 부모 프로세스에서 잰 것이라 운영에서는 거짓이었다. 배치 파이썬이 하루치 데이터를 들고 있어 9/19에 또 죽었고, 잡을 4Gi·2CPU로 올렸다. 지금 시험은 부모 밸러스트 500MB를 깔고 돈다.

예측 — 채점이 가리킨 곳. 7일 예측에 자동 채점을 붙였다. 방향 적중률은 40~54%, 동전 던지기였다. 처음에는 모델(Holt)의 한계로 읽었는데, 재 보니 셋이 틀려 있었다.

  • '80% 구간'이 실은 95% 구간이었다. 교과서 값 1.28을 쓰고 실제 포함률을 재지 않았다. 0.7로 고쳐 실측 79.6%.
  • 파라미터가 격자에서 가장 나쁜 칸에 있었다. 기간을 갈라 학습 구간에서 다시 고르니 최적이 추세를 아예 끄는 것(β=0)이었다. 이 데이터에는 배울 추세가 없었다.
  • 재는 대상이 틀렸다. 프로젝트 키워드 여덟 개 중 일곱 개가 인기 차트 영상 0건 — 채점 자체가 불가능한 것을 예측하고 있었다. 대상을 네이버 검색량으로 바꾸니 방향 적중률이 **66~78%**로 올라갔다.

수집이 닷새 동안 10분의 1이었다. 설정 정본을 파일에서 DB로 통일한 뒤, 수집 대상이 프로젝트 키워드에만 묶여 47개에서 8개로 떨어졌다. 오류도 나지 않았고 화면도 멀쩡했다. 단서는 **API 쿼터 사용량이 닷새 내내 정확히 같은 숫자(817 units)**였다는 것 하나였다. 24개로 복구하니 검색 수집이 하루 123건에서 501건으로 돌아왔다. 같은 통일 작업의 그림자가 하나 더 있었다 — 트렌드 범위가 여전히 옛 계정 키워드 넷을 읽고 있어, 화면에서 키워드를 늘려도 예측에 닿지 않았다. 9/23 배치 확인에서 잡았다.

루프의 마지막 칸. 유튜브만 자동 추적되고 인스타·쓰레드·페이스북은 올리고 끝이었다. 9/22에 3사 성과 스냅샷을 붙여 매일 새벽 조회·도달·좋아요를 기록한다. 채택 기록 18건, 게시 13건, 스냅샷 13건. 같은 주에 Meta 데이터 삭제 콜백도 달았다 — 심사와 무관하게, 남의 토큰을 들고 있으면서 지워 달라는 말을 받을 창구가 없으면 안 되기 때문이다.

TrendReport SNS — 발표 자료(공개본) · ←/→ 로 넘김새 탭에서 열기 ↗

공개본이라 라이브 데모 슬라이드의 콘솔 화면은 설명 판으로 대신했다. 콘솔은 로그인한 운영자에게만 열리고 세션이 같은 출처에서만 붙는다. 유튜브 탭은 그대로 동작한다 — 이 파이프라인이 실제로 만들어 올린 숏폼이다.

판단

두 번째 줄기는 사람이 남는 자리다. 하루 한 바퀴에서 사람이 손대는 칸은 다섯 중 둘 — 승인과 채택 기록뿐이다. 자동화의 목적은 사람을 빼는 것이 아니라 판단할 것만 남기는 것이었다. 그래서 검증은 생성을 막지 않고 경고로 남기고, 올릴지 버릴지는 언제나 사람이 정한다.

세 번째는 비용이 설계를 정한다는 것. 서버를 띄우지 않기로 하니 Cloud Run과 파일 하나짜리 DB가 남았고, 그 대가로 동시성을 직접 막아야 했다. 새벽에는 배치가, 낮에는 사람이 같은 파일을 고친다 — 버전 번호를 기억했다가 올릴 때 다르면 거부하고, 시작본·내 결과·원격 최신 세 벌을 비교해 합친다. 월 0원은 공짜가 아니라 그 장치를 직접 만든 값이다.

남은 항로

  • 검색량 이력이 차는 10월 초 — 키워드마다 실제로 예측되는지 가려낸다. 지금 표본은 시차별 48~66건이라 "결론"이 아니라 "방향이 보인다"까지만 말할 수 있다
  • 카테고리 차트 9종 편입(9/24) — 전체 범위의 시계열이 하루 100건에서 450건으로 두꺼워진다
  • 영상 주간 상한 리셋(9/28) — 구간마다 장면을 다르게 하는 프롬프트와 밝기·사람·소품 제약 완화가 아직 실전 검증 0건이다
  • 두 번째 검증 — 비교군 3그룹, 신호 지속성, 리드타임 측정