전체한눈에 — 데이터가 흐르는 길
국민이 남긴 반응을 모아 → 기사가 뭘 다루는지 이해 → 댓글 분류 → 사안별 정리 → 상황판 → 배포.
flowchart TD
A["국민 온라인 반응
뉴스 댓글·커뮤니티·지식iN·유튜브"] -->|수집| B["원본 영구 보존
(다시 안 모음)"]
B --> C["② 기사 이해
기사 실제 사안 판정 · 무관 기사 제거"]
C --> D["③ 댓글 분류
프레임 · 약사 스탠스 · 분노 표적 · 감정"]
D --> E["기사 기준 귀속
댓글 = 그 기사의 사안으로"]
E --> F["④ 분석
볼륨 · 모멘텀 · 분노 표적 · 수집 정밀도"]
F --> G["사안별 워룸 대시보드"]
G --> H["배포 · 일자별 아카이브"]
style A fill:#eef5fb,stroke:#1d5e8a
style G fill:#e8f5ee,stroke:#2e7d52
style H fill:#e8f5ee,stroke:#2e7d52
핵심: 원본은 영구 보존돼서, 분석 기준(렌즈)을 바꿔도 재수집 없이 과거 전체를 다시 봅니다.
①실행 주기 — 매일 vs 주 1회
빠르고 싼 층은 매일, 무거운 코덱스 시뮬은 주 1회. 새 전선 감지는 매일.
flowchart LR
CRON["자동 실행"] --> DAILY["🟢 매일 (07:00)"]
CRON --> WEEK["🟡 주 1회 (월)"]
DAILY --> d1["수집 (마일스톤 cbox)"]
DAILY --> d2["댓글 분류 (Gemini)"]
DAILY --> d3["볼륨·모멘텀·표적·정밀도"]
DAILY --> d4["신규 사안 발견
discover_agendas (코덱스 1콜)"]
DAILY --> d5["대시보드 빌드·배포·아카이브"]
WEEK --> w1["페르소나 시뮬
메시지 랩 (코덱스 12콜)"]
WEEK --> w2["편향 감사"]
style DAILY fill:#e8f5ee,stroke:#2e7d52
style WEEK fill:#fdf2e4,stroke:#a07b1a
매일새 전선·통계는 그날 갱신 — 코덱스 부담 거의 없음
주1회천천히 변하는 메시지 랩만
매일 돌려도 무리 없는 이유: 분류는 증분(새 댓글만), 신규 발견은 코덱스 1콜, 무거운 시뮬 12콜은 주간으로 분리.
②댓글 재수집 — 마일스톤 스케줄
기사를 처음 본 뒤 정해진 날짜에만 댓글을 다시 긁습니다. 매일 돌려도 한 기사당 5회로 제한 → 늦댓글은 잡고 네이버 부하·밴 위험은 낮춤.
timeline
title 한 기사의 cbox 댓글 수집 (발행일 기준)
0일 : 첫 수집
3일 : 재수집
7일 : 재수집
10일 : 재수집
14일 : 마지막 수집 → 이후 보관(archived)
매일 실행돼도 0·3·7·10·14일에 딱 한 번씩만 수집. 그 사이 날은 건너뜀. 14일 지나면 더는 안 긁음.
③새 사안은 어떻게 들어오나 — 두 경로
자동(네가 못 본 것까지 발굴)과 수동(네가 콕 집은 기사). 둘 다 같은 LLM 명명 엔진으로 포괄 사안명을 제안하고, 등록은 사람이 결재.
flowchart TD
subgraph AUTO["🟢 자동 발굴 (매일)"]
a1["TOP100·스크랩 스트림 스캔"] --> a2["키워드 급증 × 갈등 × 행위자
클러스터 감지"]
end
subgraph MANUAL["🔴 수동 지목 (네가 발견)"]
m1["pharmacist-dashboard서 기사 발견"] --> m2["기사 URL + 검색어 힌트 입력
(폼 또는 CLI)"]
end
a2 --> LLM
m2 --> LLM
LLM["🧠 LLM 단계
① 기존 사안과 중복 점검
② 포괄 사안명 후보 2-3개 + 검색어·근거"]
LLM -->|"이미 포괄됨"| EXIST["기존 사안에 검색어만 보강"]
LLM -->|"새 사안"| NAME["사안명 후보 제시
예: '다이소 건기식'(좁음) →
'건강기능식품 약국 패싱'(포괄)"]
NAME --> HUMAN["👤 너: 후보 선택·수정 → 확정"]
EXIST --> REG["레지스트리 등록 (active)"]
HUMAN --> REG
REG --> COLLECT["다음 run부터 수집·모니터링"]
style MANUAL fill:#fbeae6,stroke:#c8401a
style AUTO fill:#e8f5ee,stroke:#2e7d52
style LLM fill:#eef5fb,stroke:#1d5e8a
style HUMAN fill:#fff8e8,stroke:#a07b1a
역할 분리: 인간=판단(이게 중요)+기사 지목 / LLM=추상화·명명·중복점검 / 인간=최종 확정. 한 기사로 사안명 짓는 부담은 LLM이 후보를 내서 덜어줍니다. (예: '다이소 건기식'은 나중에 편의점·마트 건기식을 못 포괄 → '건강기능식품 약국 패싱'으로.)
④인간 검수 루프 — 자동 분류를 사람이 확정
AI가 1차로 넓게 분류하고, 약사회 실무자가 기사 카테고리를 직접 고칩니다. 사람 판정이 AI 위 최우선.
flowchart LR
V["기사 분류 리뷰 대시보드
(DB 실시간 · 복수필터)"] -->|카테고리 변경| DB[("Supabase
opinion_*")]
DB -->|pull| P["사람 주사안 → 분석 권위"]
P --> RC["재분류 → 재분석 → 재빌드"]
RC --> V
V -.->|"한 기사
여러 사안 태깅"| DB
style V fill:#fbeae6,stroke:#c8401a
style DB fill:#eef5fb,stroke:#1d5e8a
사람이 고치면 그 기사 댓글도 함께 바로잡힙니다(기사 기준 귀속). 한 기사에 주사안 1 + 보조사안 N 태깅 가능.
결과매주/매일 쌓이는 것
사안별 워룸 + 일자별 스냅샷 아카이브로, "지난주 대비 전선이 어떻게 움직였나"를 비교.
flowchart LR
R1["매일 RUN"] --> SNAP["일자별 스냅샷
/archive/YYYY-MM-DD"]
SNAP --> ARCH["R2 누적 보관"]
R1 --> MAIN["메인 = 최신
+ 날짜 드롭다운"]
MAIN -.->|"과거 조회"| ARCH
style MAIN fill:#e8f5ee,stroke:#2e7d52
정적 페이지라 백엔드 부담 없이 영구 보관. 침묵층 추정·메시지 랩은 참고용(여론조사 아님).