작업: 김서연 (퍼포먼스팀) / 2026-09-17 / kanban t_9026dc8d
지시: 헤르메스
refs_new.json(244건)이 파일에만 있고 화면에 없던 문제를 해결했다.
①레퍼런스 탭 하단에 「신규 소재」 섹션을 신설하고, 썸네일 244장을 받고,
후킹·밈 리포트를 화면에서 바로 읽히는 형태로 붙였다. 수집은 주 1회로 게이팅했다.
건드린 파일: refs_classify.py(확인만), pull_refs_new.py, build.py, refresh.sh
새로 생긴 것: refimg_new/ (244장 / 13MB)
단백질+저당 제거확인 결과: 코드는 이미 고쳐져 있었고, 재생성이 안 돼 있던 게 문제였다.
refs_classify.py L102~113 에 이미 반영돼 있었다.
if p and s:
cat = "단백질" if len(t_p)+len(k_p) >= len(t_s)+len(k_s) else "저당"
둘 다 걸리면 히트 수가 많은 쪽으로 보낸다 — 지시대로다.
pull_refs_new.py 는 L58 에서 같은 refs_classify.classify() 를 import 해 쓰고 있어
변경을 자동으로 따라간다. 별도 수정 불필요.
문제는 refs_new.json 이 분류기 수정 이전에 생성된 파일이었다는 것.
--dry-run (API 호출 없음, 비용 $0)으로 재생성했다.
| 재생성 전 | 재생성 후 | |
|---|---|---|
| 단백질 | 106 | 112 |
| 저당 | 58 | 62 |
| 식품 | 70 | 70 |
| 단백질+저당 | 10 | 0 (제거됨) |
refs.json(3개월+ 트랙)도 pull_refs.py 재실행으로 같이 정리했다 —
단백질 88→89 / 저당 38→39 / 단백질+저당 2→0.
남은 카테고리 5개: 단백질 / 저당 / 식품 / 건강기능식품 / 뷰티. 지시와 일치.
refimg_new/pull_refs_new.py 에 fetch_thumbs() 를 추가했다. 결과: 신규 244장 / 실패 0건 / 13MB.
기존 refimg/ 는 512장 24MB니 장당 용량은 비슷한 수준(53KB vs 48KB)이다.
sips -Z 400 -s formatOptions 72 로 축소하는 건 기존과 동일하게 맞췄다.
설계 판단 — 왜 refresh.sh 가 아니라 수집 스크립트 안에서 받는가
fbcdn 이미지 URL 에는 서명 만료시간(oe=)이 박혀 있다. 수집과 다운로드 사이가 벌어지면
링크가 죽는다. 그래서 기존 refimg 처럼 refresh.sh 단계에서 일괄 축소하는 방식이 아니라,
수집 직후 같은 프로세스에서 받고 그 자리에서 축소한다.
이미 받은 파일은 건너뛰므로 재실행해도 재다운로드 비용이 없다.
--no-thumbs 플래그로 끌 수 있게 했다.
기존 3개월+ 트랙 블록(excl_html() / weak_html()) 아래에 붙였다. 기존 섹션 무수정.
지시의 핵심이 "검증 안 됨, 트렌드 참고용"이 보여야 한다는 것이라 한 군데가 아니라 여러 겹으로 깔았다.
1. .ndiv 그라데이션 구분선 (34px 여백)
2. 제목 옆 빨간 배지 검증 안 됨 · 트렌드 참고용
3. 빨간 좌측 보더 배너 — "위 트랙과 판단 기준이 반대다" 를 명문화
4. 카드 테두리를 점선(.nc{border-style:dashed})으로. 기존 카드는 실선.
기존 레퍼런스 카드 구조(썸네일 + 페이지명 + 메타 + 본문)를 그대로 따랐다. 단:
30일 이내 광고에 그걸 붙이면 검증된 것처럼 읽힌다. 대신 경과일 숫자(1일~30일)만 표시.
7일내 배지.본문 없음 — 문구 확인 불가로 명시.기존 필터와 공유하지 않았다. 축이 아예 다르기 때문이다 —
기존은 등급 × 카테고리, 신규는 카테고리 × 후킹 유형. 등급 필터를 공유하면 신규 카드가
전부 사라지거나 전부 남는다. 별도 #nfil 로 분리했다.
conf=low 처리를 기존과 다르게 했다 — 판단 근거3개월+ 트랙은 근거 약한 건(키워드만 걸리고 본문에 근거 없음)을 목록에서 뺀다.
신규 트랙에서는 빼지 않고 카드에 근거약함 배지만 붙였다.
이유: 저기는 "검증된 레퍼런스를 고르는" 자리라 정밀도가 중요하지만,
여기는 "지금 뭐가 도는가"를 관찰하는 자리다. 79건(32%)을 빼면 트렌드 관찰의 모수 자체가
망가진다. 처음엔 기존과 똑같이 빼봤더니 244건이 165건으로 줄었고, 그건 지시(244건 반영)와도
어긋난다. 244건 전량 노출 + 표시로 정정했다.
후킹_밈_리포트.md(207줄) 전체를 넣지 않고, 화면에서 바로 판단에 쓸 수 있는 것만 골랐다.
카드 그리드 위에 배치 — 카드를 보기 전에 "뭘 조심해야 하는지"를 먼저 읽어야 하기 때문.
넣은 것 4블록:
1. 문장 구조 유형 바 차트 (고유 문구 59개 기준)
단순선언 27 / 수치제시 23 / 긴급·희소 5 / 질문 5 / 대화체·밈 3 / 부정 1
pull_refs_new.py 에 hook_types_uniq 를 새로 계산해 넣었다 — 기존 hook_types 는
광고 건수 기준이라 한 브랜드가 같은 문구 12회 돌린 게 유행처럼 보인다.
2. 실제 사례 10건 표 — 문구 / 브랜드 / 숫자의 역할. 전부 수집 원문.
3. 적용 가능 5건 — 양면 수치 제시를 최우선으로 명시.
4. 적용 불가 5건 — 효능·질병 표현(식품표시광고법), 감량 수치, 미끼가, 밈.
빼지 않고 반드시 넣은 것: 확인 불가 항목.
성과 데이터 없음 / 138건 문구 확인 불가 / 영상 자막 미수집 / 1회차라 비교 대상 없음.
이게 빠지면 이 섹션 전체가 "검증된 트렌드"로 잘못 읽힌다.
md 원문 전체는 ~/Hermes/소재기획/20260917/후킹_밈_리포트.md 에 그대로 있다.
refresh.sh — 주 1회 게이팅단계를 6→7로 늘리고 [5/7]에 신규 트랙을 넣었다.
DOW=$(date +%u) # 1=월 ... 7=일 if [ "$1" = "--new" ] || [ "$2" = "--new" ] || [ "$DOW" = "1" ]; then
월요일에만 수집. 근거 두 가지:
매일 볼 이유가 없다.
./refresh.sh --new 로 요일 무시 강제 실행 가능. 크론의 --no-open 과 같이 써도 되게
$1/$2 둘 다 본다. 6가지 조합으로 게이팅 테스트해서 전부 의도대로 동작 확인.
배포 복사 목록에 refs_new.json, refimg_new/ 를 추가했다.
refimg 일괄 축소 블록은 그대로 두되, refimg_new 는 수집 시점에 이미 축소되므로 대상 제외.
python build.py 실행 → 정상 생성. 실제 브라우저로 렌더링 확인:
naturalWidth>0)③성과 탭은 열어서 렌더링만 확인했고 코드는 일절 수정하지 않았다 (헤르메스 작업 중).
Cloudflare 배포도 하지 않았다.
"어떤 문구가 살아남았나"라는 진짜 신호가 나온다. 지금 화면의 유형 분포는 스냅샷일 뿐이다.
이 섹션에서 나올 수 있는 결론은 "이 표현을 여러 브랜드가 지금 쓰고 있다"까지다.
이미지 안 카피를 읽는 방법은 별건으로 가능하나 이번 범위 밖.
1. 비반올림 사회적 증거 적용 시 쓸 실수치 — 누적 판매량/리뷰 수/공구 참여자 수.
내가 만들 수 있는 숫자가 아니다.
2. 권위축 — 올리브영 입점을 광고 카피에 쓸 수 있는지(계약상 제약 여부).