배경
백필(A=이메일 채우기, C=도메인 해석→승격)을 현재 bat 러너로 수동 운영 중 — 인코딩(cp949/LF)·재부팅 유실·세션 종속 등 함정 다수. 운영자가 웹 대시보드에서 "딸깍" 한 번으로 제어하도록 백엔드를 만든다. (Codex·Claude 독립 설계 후 종합 확정안, 2026-08-18)
사용자 관점 (딸깍 원칙 — 트랙 개념 비노출)
- 상시 잔여 패널:
GET /admin/backfill/overview — 조건(국가·제외업종·상장) 변경 시 즉시 재계산되는 깔때기(도메인해석 대기→이메일 대기→큐 pending)
- 버튼 하나:
POST /admin/backfill/start {조건} — 내부에서 C·A 자동 병행 가동. stop으로 중지
- 진행 카드 하나:
GET /admin/backfill/status — 처리/해석/승격/이메일 누적·잔여·오류·예산소진
내부 구조 확정안
- 서버는 supervisor 스레드만 — 자식 CLI 프로세스(
--max-batches N)를 세대(generation) 단위 재기동(메모리 리셋 유지, OOM 이력). Playwright 는 서버 프로세스에 안 올림
- Windows Job Object(KILL_ON_JOB_CLOSE)로 서버 종료 시 자식+Chromium 트리 자동 정리
- PG advisory lock으로 웹·bat·crawl companion 전 경로 트랙 중복 방지
backfill_job 테이블 1개(필터 스냅샷·누적 카운터·세대·취소플래그) + CLI --job-id 자기보고(로그 파싱 금지)
- 서버 재시작 시 자동 재개(취소플래그 재확인 후 — 과거 워치독 취소사고 방어), 예산 소진 시
budget_exhausted 명시 종료
review_queue.created_at 마이그레이션 — 신규 승격이 전체큐 상단에 노출(적재시각 LIFO)
PR 분해
배경
백필(A=이메일 채우기, C=도메인 해석→승격)을 현재 bat 러너로 수동 운영 중 — 인코딩(cp949/LF)·재부팅 유실·세션 종속 등 함정 다수. 운영자가 웹 대시보드에서 "딸깍" 한 번으로 제어하도록 백엔드를 만든다. (Codex·Claude 독립 설계 후 종합 확정안, 2026-08-18)
사용자 관점 (딸깍 원칙 — 트랙 개념 비노출)
GET /admin/backfill/overview— 조건(국가·제외업종·상장) 변경 시 즉시 재계산되는 깔때기(도메인해석 대기→이메일 대기→큐 pending)POST /admin/backfill/start{조건} — 내부에서 C·A 자동 병행 가동.stop으로 중지GET /admin/backfill/status— 처리/해석/승격/이메일 누적·잔여·오류·예산소진내부 구조 확정안
--max-batches N)를 세대(generation) 단위 재기동(메모리 리셋 유지, OOM 이력). Playwright 는 서버 프로세스에 안 올림backfill_job테이블 1개(필터 스냅샷·누적 카운터·세대·취소플래그) + CLI--job-id자기보고(로그 파싱 금지)budget_exhausted명시 종료review_queue.created_at마이그레이션 — 신규 승격이 전체큐 상단에 노출(적재시각 LIFO)PR 분해
--exclude-industry·--exclude-listed(worktree 구현분)backfill_job테이블 +review_queue.created_at마이그레이션--job-id(진행 자기보고·취소 폴링) + 트랙 advisory lock