항해 기록
9/7 ~ 9/16 — 열흘, 270커밋. NIPA-Google Study Jam PBL 3기 첫날에는 다른 교육생들의 팀에 합류해 RAG를 활용한 업무용 챗봇을 만들 계획이었다. 고민 끝에 방향을 바꿨다. 개인적으로 운영하는 두 서비스와 보면소득의 SNS를 관리하는 데 실제로 필요한 것은 전에 시작했다가 멈춰 둔 TrendReport SNS였다. 9/7부터 1인 팀으로 다시 띄웠다.
멈춰 있던 배. 첫 커밋은 7/13이다. 사흘 동안 32커밋으로 유튜브 트렌드 리포트, Holt 7일 예측, 급상승 알림, 뉴스 분석의 뼈대를 세웠다. 그 뒤 두 달 가까이 사람이 손댄 날은 사흘뿐이었고 나머지 날에는 매일 도는 수집 봇만 커밋을 남겼다. 8/24에 밈·카드뉴스 자동 제작과 인스타 반자동 게시를 붙였지만 매일 도는 흐름까지는 가지 못했다. 모으고 분석하는 쪽은 돌았는데 만들어 올리는 쪽이 이어지지 않았다.
첫날(9/7). 하루에 31커밋이 들어갔다. LLM 층(댓글 반응 요약, LangGraph 브리프 에이전트, 경량 RAG)을 얹었고 모델은 Gemini 무료 티어로 골랐다. 주간 호출 수가 무료 한도 안이라 서버 비용 0원 원칙이 그대로 유지된다. 일일 배치를 GCP(Cloud Run Jobs + Scheduler, DB 정본은 GCS)로 옮겼고, ffmpeg로 1080×1920 15초 안팎의 숏폼을 구웠다. 유튜브 쇼츠 반자동 게시와 상태·승인·채택 기록을 한 화면에 모은 어드민 콘솔까지 그날 섰다. RAG의 첫 문서는 보면소득의 이용약관과 개인정보 처리방침 두 건, 청크 33개였다.
주제 점수는 뜨는 키워드 대신 많이 다뤄지는 키워드를 뽑고 있었다(9/9). 점수식은 성장률(%)에 영상 수 × 2를 더했다. 단위가 다른 두 값을 그냥 더하니 수십수백인 영상 수가 점수를 지배했다. 9/7 실측에서 성장률 1위인 '부수입'(+38.7%)이 5위였고 거의 정체된 '재테크'(+0.8%)가 1위였다. 증감률을 01로 정규화해 주 축(0.8)으로 삼고, 영상 수는 log로 눌러 보조(0.2)로만 남겼다.
검색량은 서로 비교할 수 없는 숫자였다. 네이버 데이터랩은 한 요청 안에서만 정규화하는데 수집은 키워드를 5개씩 나눠 요청했다. 같은 키워드를 한 요청에 넣으면 재테크 71.08, 만보기 75.92로 비슷했지만 저장값으로는 만보기가 재테크의 128배였다. 모든 묶음에 같은 앵커('지하철')를 넣고 앵커 평균이 100이 되도록 묶음 전체를 곱해 척도를 맞췄다. 세 묶음으로 나눠 받은 값과 한 요청에 넣은 값의 비율이 20.03 대 20.03으로 일치했다. 되맞추기 전에는 '앱테크'·'짠테크'·'부수입'이 급등 기준을 넘고도 알림 하한에 막혀 있었다.
콘솔 — 사람의 일을 승인으로 줄이는 자리. 열흘 동안 사람이 쓴 커밋 258개 중 166개가 콘솔 파일을 건드렸다. 계정 연동과 계정별 지식 베이스(9/8), 좌표를 코드에서 데이터로 뺀 카드뉴스 폼과 콘솔에서 바꾸는 생성 주기(9/10), 운영자가 관리하는 팔레트·글꼴·화면비(9/11), 저장 전에 전체 장을 그려 보는 미리보기(9/15)가 차례로 들어갔다. 화면은 SEED 디자인 시스템 규격으로 다시 짰다.
계정에서 프로젝트로(9/16). 키워드·톤·주기·지식 베이스가 계정 행에 얹혀 있었다. 계정이 하나일 때는 같은 말이었는데 한 서비스에 인스타·쓰레드·페이스북을 붙이자 설정이 셋으로 갈라졌다. 설정 화면에서 고친 값과 실제 생성에 쓰이는 값이 어긋났고, 배치가 계정 단위로 돌아 같은 주기의 초안이 세 배로 나왔다. 프로젝트를 정식 개체로 세워 설정은 프로젝트에 두고 계정은 게시 대상으로만 남겼다. 한 콘텐츠를 여러 곳에 올린 결과는 content_posts 표에 곳별로 기록한다. 옛 열은 한 주기 지켜본 뒤 정리하려고 남겨 두었다.
만들기에서 올리기로. 9/15에 생성 순서를 목적부터로 바꿨다. 홍보·트렌드 인사이트·안내·이벤트 중 목적을 정하면 기획하고 검증하고, 어긋나면 한 번 보정한다. 같은 날 현황을 세어 보니 자동으로 쌓인 기록 45건에 실제 업로드는 4건이었다. 병목은 이미 올리는 쪽에 있었다. 9/16 하루에 게시 경로를 넓혔다. 인스타는 GCS 서명 주소로 넘겨 게시 전 이미지를 외부에 공개하지 않는다. 쓰레드와 페이스북을 붙이면서 연동·대화상자·라우트를 표 하나로 모았다. X는 코드까지 완성했지만 가동하지 않는다. 무료 티어가 없어져 게시마다 요금이 들기 때문이다.
판단
RAG는 버리지 않고 자리를 옮겼다. 챗봇 팀에서 하려던 RAG는 이 배 안에서 계정마다 붙는 지식 베이스가 됐다. 사람의 질문에 답하는 대신 생성 단계에 서비스 문서와 정책을 가드레일로 넣어 카피가 약관이나 운영 기준과 어긋나지 않게 잡는다. 첫 문서가 보면소득 약관이었고 9/14에 두 개인 서비스의 지식 베이스를 썼다.
커밋 대부분이 콘솔로 간 이유. 파이프라인이 매일 알아서 돌면 사람에게 남는 일은 승인과 채택 기록뿐이다. 그 칸이 불편하면 나머지가 다 돌아도 결과는 쓰이지 않고 쌓이기만 한다. 7월에 멈춘 배가 그 모양이었다. 그래서 사람이 매일 여는 화면에 열흘 중 가장 많은 손을 썼다.
설정의 단위와 게시의 단위는 다르다. 서비스 하나를 계정 하나로 보던 가정은 올릴 곳이 하나일 때만 성립했다. 설정은 무엇을 알리는가의 단위인 프로젝트에, 연동은 어디에 올리는가의 단위인 계정에 둔다. 이 구분이 생기기 전에는 올릴 곳을 하나 붙일 때마다 설정과 초안이 함께 불어났다.
남은 항로
- 올린 뒤를 재는 칸 — 유튜브 말고는 올리고 끝이다. 인스타·쓰레드·페이스북의 성과를 매일 기록해 채택 판단으로 되돌린다
- 옛 설정 열 정리 — 프로젝트 전환 뒤 한 주기를 지켜보고 계정 행에 남은 옛 열을 지운다
- 9/23 최종 심사 — 수집부터 게시까지 하루 한 바퀴가 승인 말고는 사람 손 없이 도는지 매일 아침 확인하며 한 주를 보낸다