---
title: "업무계획 — AI 모델 단가 자동 감지+승인 시스템"
category: "plan"
document_type: "업무계획"
source_status: "generated"
knowledge_group: "00_current_state"
priority: "Medium"
purpose: "코치노트 AI의 모델 단가(coach_price_table)를 사람이 수시로 공식 페이지 확인·SQL 수동 입력하는 현 방식이 지속 불가능함을 해소하기 위한 업무계획. 2026-06-08 gemini-2.5-flash 단가행 누락(UNPRICED·누적원가 0) 사건이 드러낸 구조적 문제. 핵심 설계원칙은 '완전 무인 자동 덮어쓰기'가 아니라 '자동 감지 + 1클릭 사람 승인' — 단가는 과금 근거라 오파싱이 곧 오과금이기 때문. 차기 결제/가격 Phase의 설계 입력값."
read_when: ["단가관리","가격정책","원가로깅","자동화","결제","로드맵","어드민"]
updated: "2026-06-08"
work_timestamp: "20260608_164029"
context: "달록본레포CC (D:\\dallog\\dallog_git) — UNPRICED 단가행 수동 적용 후 사장님이 '수동 관리 지속 불가, 자동 서칭-적용 시스템 필요' 제기"
source_of_truth: "https://dallog-tools.hansbridge.co.kr/knowledge/"
---

# 업무계획 — AI 모델 단가 자동 감지+승인 시스템

> 즉시 구현 대상 아님. 차기 결제/가격 Phase 설계 입력값. 선결조건(실원가 베타 데이터 확보) 충족 후 착수.

## 0. 한 줄 요약
모델 단가를 사람이 수시로 공식 페이지 확인·SQL 수동 입력하는 방식은 지속 불가능하다. 단, 단가는 **과금의 근거**라 무인 자동 덮어쓰기는 위험하다. 그래서 **"자동 감지 → 어드민 알림 → 1클릭 사람 승인 → 새 price_version 행 추가"** 패턴으로 간다.

## 1. 배경 — 왜 이 계획이 생겼나
- 2026-06-08, chat-proxy 기본 모델을 `gemini-2.5-flash`로 상향했으나 단가표(`coach_price_table`)엔 `gemini-2.5-flash-lite`만 시드돼 있어, 활성 단가 조회 실패 → `estimated_cost=0` + `price_version="UNPRICED:..."` 기록 → **어드민 누적원가가 ₩0으로 박힘**. (단가행 1줄 수동 INSERT로 해소.)
- 이 사건이 드러낸 구조적 문제 — **모델 교체·공급사 단가 변동 때마다 사람이 (a)공식 페이지를 찾아 확인하고 (b)SQL을 짜서 붙여넣어야** 한다. 운영자 1인 체제에서 수시·정기 반복은 비현실적이며, 누락 시 원가·손익 집계가 조용히 틀어진다.
- 결론(사장님) — "결국 자동 서칭-적용 시스템을 만들어야 한다."

## 2. 핵심 설계원칙 — 왜 '완전 무인'이 아니라 '감지+승인'인가
단가는 과금·손익 계산의 근거다. 자동화가 한 번 잘못되면 피해가 즉각적이고 금전적이다.
- **오파싱 = 오과금** — 공급사는 깔끔한 '단가 조회 API'를 주지 않는다. 결국 가격 페이지(HTML) 스크래핑인데, 페이지 구조가 바뀌면 조용히 깨진다. $2.50을 $25.0으로 잘못 읽으면 그대로 고객 과금·손익에 박힌다.
- **LLM 추출의 환각 위험** — "페이지 읽고 단가 뽑아줘"를 LLM에 맡길 수 있으나, 숫자 환각이 그대로 과금에 반영되면 가장 피해야 할 시나리오다.
- **따라서** — 자동화의 역할은 "사람이 수시로 들여다보고 SQL 짜는 고통을 없애는 것"까지로 한정하고, **최종 숫자 확정은 1클릭 사람 승인**으로 남긴다. (이는 같은 날 정리한 가격정책 아이디어 문서의 충전·결제 안전성 철학과 정합한다.)

## 3. 목표 아키텍처

```
[자동] 주기 Cron 워커(예: 주 1회) — provider 가격 페이지/소스 확인
   ↓
[자동] 현재 DB 활성 단가와 비교 → 차이 감지 시 "단가 변경 의심" 플래그
   ↓
[자동] 어드민에 알림(배지/메일) — "gemini-2.5-flash 단가가 바뀐 것 같다. 확인 요망"
   ↓
[사람] 운영자가 어드민에서 새 값 눈으로 확인 → [적용] 버튼 1번
   ↓
[자동] 새 price_version 행 INSERT + 기존 행 is_active=false 전환
        (기존 행 수정 금지 — 과거 로그를 당시 단가로 해석 가능하게 보존)
```

- **기존 자산 재사용** — `coach_price_table`은 이미 "기존 row 수정 금지·새 price_version row 추가" + `(provider,model) WHERE is_active=true` 부분 유니크 인덱스로 설계돼 있어, 이 워크플로와 정확히 맞물린다. 추가 스키마는 "감지 결과/알림" 저장용 보조 테이블 정도.

## 4. 단계(Phase) 제안
- **Phase 1 (MVP·감지+알림)** — Cron 워커가 단가 소스를 읽어 현재 DB 활성 단가와 다르면 어드민에 알림만. 자동 쓰기 없음. 사람이 기존 수동 SQL로 갱신. ⇒ "놓침"을 0으로 만드는 것이 1차 가치.
- **Phase 2 (1클릭 승인 UI)** — 어드민에 "단가 변경 감지 → 새 값 미리보기 → [적용]" 버튼. 클릭 시 새 price_version 행 INSERT + 기존 비활성화를 service_role로 수행. 수동 SQL 졸업.
- **Phase 3 (교차검증·sanity 가드)** — 복수 소스 교차확인 + 변동폭 가드(예: 단가가 갑자기 10배면 자동 반려·경고). 무인 자동에 가장 근접하되 안전망 위에서.

## 5. 선결조건·의존관계
- **선결** — 현재 막 UNPRICED를 해소했으므로, 먼저 **베타 실데이터로 실원가를 며칠 누적**해 손익 구조를 재검증한다(가격정책 아이디어 문서 §0과 동일 선결). 단가 자동화는 그 위에서.
- **묶임** — 충전식·구독관리 결제 인프라(가격정책 아이디어 A1~A4·B1)와 같은 Phase에 묶는 것이 자연스럽다. 단가 정확성은 결제·정산의 전제다.

## 6. 미해결·검토 포인트
- provider별 가격 소스 파싱 난이도 — Google(Gemini)·OpenAI 가격 페이지 구조·변경 빈도 조사 필요. 공식 문서/요금 API 존재 여부 재확인.
- 통화·환율 — 단가는 USD 저장인데 어드민 라벨은 "₩". 단가 자동화와 별개로 통화 표기 불일치(환율 변환 또는 라벨 정정)를 함께 정리.
- 비활성화 트랜잭션 — 새 행 INSERT와 기존 행 `is_active=false`를 한 트랜잭션으로(부분 유니크 인덱스 충돌 방지).
- 알림 채널 — 어드민 배지 vs 메일 vs 둘 다. 운영자 1인 체제에 맞는 최소 채널.

## 7. 연관 문서
- `20260608_153802_의사결정_가격정책보완아이디어(충전식·구독관리)+원가로깅UNPRICED` — §1-A가 본 계획의 발단.
- `20260608_154500_핸드오프_코치브리프어드민복구·기록로딩보강·다음작업` — §4 다음작업 #1(단가행 SQL)의 후속 구조화.
