← 업무 목록

작업로그_신규소재_대시보드.md

작업로그 — 신규 소재 244건 대시보드 반영 + 후킹 리포트 화면화

작업: 김서연 (퍼포먼스팀) / 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)


1. 카테고리 변경 — 단백질+저당 제거

확인 결과: 코드는 이미 고쳐져 있었고, 재생성이 안 돼 있던 게 문제였다.

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)으로 재생성했다.

재생성 전재생성 후
단백질106112
저당5862
식품7070
단백질+저당100 (제거됨)

refs.json(3개월+ 트랙)도 pull_refs.py 재실행으로 같이 정리했다 —

단백질 88→89 / 저당 38→39 / 단백질+저당 2→0.

남은 카테고리 5개: 단백질 / 저당 / 식품 / 건강기능식품 / 뷰티. 지시와 일치.


2. 썸네일 244장 — refimg_new/

pull_refs_new.pyfetch_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. ①레퍼런스 탭 「신규 소재」 섹션

기존 3개월+ 트랙 블록(excl_html() / weak_html()) 아래에 붙였다. 기존 섹션 무수정.

시각적 구분 — 4겹

지시의 핵심이 "검증 안 됨, 트렌드 참고용"이 보여야 한다는 것이라 한 군데가 아니라 여러 겹으로 깔았다.

1. .ndiv 그라데이션 구분선 (34px 여백)

2. 제목 옆 빨간 배지 검증 안 됨 · 트렌드 참고용

3. 빨간 좌측 보더 배너 — "위 트랙과 판단 기준이 반대다" 를 명문화

4. 카드 테두리를 점선(.nc{border-style:dashed})으로. 기존 카드는 실선.

카드 형식 — 기존과 같되 등급은 뺐다

기존 레퍼런스 카드 구조(썸네일 + 페이지명 + 메타 + 본문)를 그대로 따랐다. 단:

  • 등급(S/A/B/C)을 안 붙였다. 등급은 "얼마나 오래 살아남았나"를 뜻한다.
  • 30일 이내 광고에 그걸 붙이면 검증된 것처럼 읽힌다. 대신 경과일 숫자(1일~30일)만 표시.

  • 7일 이내는 주황 7일내 배지.
  • 후킹 문구를 카드 본문 자리에 직접 노출. 문구 추출 실패 건은 본문 없음 — 문구 확인 불가로 명시.
  • 후킹 유형 태그(수치제시형 등) 최대 2개.
  • 필터 — 별도로 뒀다

    기존 필터와 공유하지 않았다. 축이 아예 다르기 때문이다 —

    기존은 등급 × 카테고리, 신규는 카테고리 × 후킹 유형. 등급 필터를 공유하면 신규 카드가

    전부 사라지거나 전부 남는다. 별도 #nfil 로 분리했다.

    conf=low 처리를 기존과 다르게 했다 — 판단 근거

    3개월+ 트랙은 근거 약한 건(키워드만 걸리고 본문에 근거 없음)을 목록에서 뺀다.

    신규 트랙에서는 빼지 않고 카드에 근거약함 배지만 붙였다.

    이유: 저기는 "검증된 레퍼런스를 고르는" 자리라 정밀도가 중요하지만,

    여기는 "지금 뭐가 도는가"를 관찰하는 자리다. 79건(32%)을 빼면 트렌드 관찰의 모수 자체가

    망가진다. 처음엔 기존과 똑같이 빼봤더니 244건이 165건으로 줄었고, 그건 지시(244건 반영)와도

    어긋난다. 244건 전량 노출 + 표시로 정정했다.


    4. 후킹·밈 리포트 화면화

    후킹_밈_리포트.md(207줄) 전체를 넣지 않고, 화면에서 바로 판단에 쓸 수 있는 것만 골랐다.

    카드 그리드 에 배치 — 카드를 보기 전에 "뭘 조심해야 하는지"를 먼저 읽어야 하기 때문.

    넣은 것 4블록:

    1. 문장 구조 유형 바 차트 (고유 문구 59개 기준)

    단순선언 27 / 수치제시 23 / 긴급·희소 5 / 질문 5 / 대화체·밈 3 / 부정 1

    pull_refs_new.pyhook_types_uniq 를 새로 계산해 넣었다 — 기존 hook_types

    광고 건수 기준이라 한 브랜드가 같은 문구 12회 돌린 게 유행처럼 보인다.

    2. 실제 사례 10건 표 — 문구 / 브랜드 / 숫자의 역할. 전부 수집 원문.

    3. 적용 가능 5건 — 양면 수치 제시를 최우선으로 명시.

    4. 적용 불가 5건 — 효능·질병 표현(식품표시광고법), 감량 수치, 미끼가, 밈.

    빼지 않고 반드시 넣은 것: 확인 불가 항목.

    성과 데이터 없음 / 138건 문구 확인 불가 / 영상 자막 미수집 / 1회차라 비교 대상 없음.

    이게 빠지면 이 섹션 전체가 "검증된 트렌드"로 잘못 읽힌다.

    md 원문 전체는 ~/Hermes/소재기획/20260917/후킹_밈_리포트.md 에 그대로 있다.


    5. refresh.sh — 주 1회 게이팅

    단계를 6→7로 늘리고 [5/7]에 신규 트랙을 넣었다.

    DOW=$(date +%u)   # 1=월 ... 7=일
    if [ "$1" = "--new" ] || [ "$2" = "--new" ] || [ "$DOW" = "1" ]; then
    

    월요일에만 수집. 근거 두 가지:

  • 비용: Apify 회차당 $0.79~3.3. 매일이면 월 $24~100. 주 1회면 월 $3~13.
  • 신규 트랙의 판단 단위가 애초에 주간 생존이다(다음 회차와 비교해야 신호가 됨).
  • 매일 볼 이유가 없다.

    ./refresh.sh --new 로 요일 무시 강제 실행 가능. 크론의 --no-open 과 같이 써도 되게

    $1/$2 둘 다 본다. 6가지 조합으로 게이팅 테스트해서 전부 의도대로 동작 확인.

    배포 복사 목록에 refs_new.json, refimg_new/ 를 추가했다.

    refimg 일괄 축소 블록은 그대로 두되, refimg_new 는 수집 시점에 이미 축소되므로 대상 제외.


    6. 검증

    python build.py 실행 → 정상 생성. 실제 브라우저로 렌더링 확인:

  • 7개 섹션 전부 정상 (한눈에보기 / 레퍼런스 / 소재 / 성과 / 공구영향 / 고성과 / 플레이북)
  • JS 에러 0건
  • 기존 레퍼런스 카드 240장 유지 (건드리지 않음)
  • 신규 카드 244장, 이미지 태그 244개
  • 필터 동작 실측: 전체 244 → 저당 62 → 저당+질문형 3 → 질문형 18 → 리셋 244
  • 썸네일 실제 로딩 확인(naturalWidth>0)
  • ③성과 탭은 열어서 렌더링만 확인했고 코드는 일절 수정하지 않았다 (헤르메스 작업 중).

    Cloudflare 배포도 하지 않았다.


    확인 불가 / 남는 것

  • 이 트랙은 1회차라 비교 대상이 없다. 다음 회차(9/22 월)가 쌓여야
  • "어떤 문구가 살아남았나"라는 진짜 신호가 나온다. 지금 화면의 유형 분포는 스냅샷일 뿐이다.

  • 수집 광고의 성과(ROAS/CTR/전환)는 광고 라이브러리가 공개하지 않아 영원히 알 수 없다.
  • 이 섹션에서 나올 수 있는 결론은 "이 표현을 여러 브랜드가 지금 쓰고 있다"까지다.

  • 244건 중 138건은 본문이 도메인·템플릿 잔재뿐이라 문구를 못 뽑았다. 썸네일은 다 있으니
  • 이미지 안 카피를 읽는 방법은 별건으로 가능하나 이번 범위 밖.

    대표님 확인 필요 (제안만, 실행 안 함)

    1. 비반올림 사회적 증거 적용 시 쓸 실수치 — 누적 판매량/리뷰 수/공구 참여자 수.

    내가 만들 수 있는 숫자가 아니다.

    2. 권위축 — 올리브영 입점을 광고 카피에 쓸 수 있는지(계약상 제약 여부).