[{"data":1,"prerenderedAt":533},["ShallowReactive",2],{"doc:\u002Fhistory\u002Fhistory.20260602":3},{"id":4,"title":5,"body":6,"description":497,"extension":526,"meta":527,"navigation":528,"path":529,"seo":530,"stem":531,"__hash__":532},"docs\u002Fhistory\u002Fhistory.20260602.md","작업 이력 — 2026-06-02",{"type":7,"value":8,"toc":496},"minimark",[9,13,17,21,141,146,269,273,303,307,325,328,331,339,351,357,367,374,384,390,399,405,415,421,431,437,447,455,480,486],[10,11,5],"h1",{"id":12},"작업-이력-2026-06-02",[14,15,16],"h2",{"id":16},"종합",[18,19,20],"p",{},"다음 5가지 흐름이 하루에 진행:",[22,23,24,52,62,76,123],"ol",{},[25,26,27,31,32,36,37,40,41,44,45,44,48,51],"li",{},[28,29,30],"strong",{},"WBS 페이지 다크모드 → 라이트 톤 강제"," — wbs.vue 단독 useColorMode override → nuxt.config 글로벌 colorMode → plugin으로 localStorage 덮어쓰기 → 최종적으로 ",[33,34,35],"code",{},"main.css","의 ",[33,38,39],{},"body { background-color: #ffffff }","로 일원화 (관련 colorMode 코드는 모두 제거). 다른 3개 repo(",[33,42,43],{},"admin","·",[33,46,47],{},"helper",[33,49,50],{},"pms",")도 nuxt.config 정리·일관성 적용.",[25,53,54,57,58,61],{},[28,55,56],{},"QaEvalCard 구조 개편"," — \"추천 문의 답변\"을 D축(표준화 가능성) 안에서 빼내 ",[28,59,60],{},"Q&A 본문 다음 별도 섹션","으로 배치. templates 6개 표시·복사·표준답변 저장 동작 모두 유지. QaAxisCard에서 templates 렌더링·관련 import 제거.",[25,63,64,67,68,71,72,75],{},[28,65,66],{},"안내글 평가 엔드포인트 신설"," — ",[33,69,70],{},"POST \u002Fpms\u002Fposts\u002F:id\u002Fannounce-eval\u002Fgenerate",". 작성자가 직원(staff)일 때만 동작, 3축(톤·자세 \u002F 명확성 \u002F 완전성) + 3개 변형 추천(짧은 \u002F 명료한 \u002F 자세한). 캐싱·hp_qa_eval 저장·hp_llm_log 감사 모두 동일 구조 재활용. ",[28,73,74],{},"PMS UI 통합은 보류"," (코드만 들어가 있음).",[25,77,78,81,82],{},[28,79,80],{},"AI Gateway·LLM 정비 (큰 변화)"," — Cloudflare AI Gateway 결제 정책 변경 + 한국 region IP block 정책이 겹쳐 OpenAI 호출 경로가 다수 차단됨. 6가지 경로 검증 후 최종 안정 구성으로 안착:",[83,84,85,92,99,110,113,116],"ul",{},[25,86,87,88,91],{},"새 게이트웨이 ",[33,89,90],{},"malgn-helper2"," (Authentication disabled, BYOK Provider 키 등록)",[25,93,94,95,98],{},"모델 ",[33,96,97],{},"openai\u002Fgpt-4.1-mini"," (Vision 포함)",[25,100,101,102,105,106,109],{},"헤더 원래 방식 — ",[33,103,104],{},"Authorization","(OpenAI 키) + ",[33,107,108],{},"cf-aig-authorization","(Gateway 토큰)",[25,111,112],{},"Smart Placement + AI binding 활성 (유지)",[25,114,115],{},"callOpenAiJson 경로 복귀 (callWorkersAi는 코드에 유지하되 미사용)",[25,117,118,119,122],{},"검증: post 149694 평점 ",[28,120,121],{},"4.4–4.8",", oneLiner 자연스러움, D templates 6개 정상",[25,124,125,128,129,132,133,136,137,140],{},[28,126,127],{},"5\u002F29 작업 → 문서 현행화"," — WBS.md 전면 갱신(진행률 6단계 모두 상향, 누적 자산 갱신, 다음 우선순위 M2 진입 기준 재작성), HP-SCHEMA.md ",[33,130,131],{},"overall_verdict"," VARCHAR(100) 마이그레이션 반영, history.20260601.md 작성. R2의 ",[33,134,135],{},"wbs.json","도 PUT으로 갱신해 ",[33,138,139],{},"\u002Fwbs"," 라이브 트래커 동기화.",[142,143,145],"h3",{"id":144},"시도된-openai-호출-경로-트러블슈팅-기록","시도된 OpenAI 호출 경로 (트러블슈팅 기록)",[147,148,149,165],"table",{},[150,151,152],"thead",{},[153,154,155,159,162],"tr",{},[156,157,158],"th",{},"#",[156,160,161],{},"경로",[156,163,164],{},"결과",[166,167,168,184,195,206,217,233,249],"tbody",{},[153,169,170,174,181],{},[171,172,173],"td",{},"1",[171,175,176,177,180],{},"AI Gateway compat (",[33,178,179],{},"malgn-helper",") + BYOK",[171,182,183],{},"region 차단",[153,185,186,189,192],{},[171,187,188],{},"2",[171,190,191],{},"AI Gateway compat + Cloudflare credit",[171,193,194],{},"compat에 미적용",[153,196,197,200,203],{},[171,198,199],{},"3",[171,201,202],{},"Worker → OpenAI 직접",[171,204,205],{},"region 차단 (Workers IP block)",[153,207,208,211,214],{},[171,209,210],{},"4",[171,212,213],{},"위 + Smart Placement",[171,215,216],{},"학습 안 됨, 동일 차단",[153,218,219,222,228],{},[171,220,221],{},"5",[171,223,224,225],{},"Workers AI binding ",[33,226,227],{},"@cf\u002Fopenai\u002F...",[171,229,230],{},[33,231,232],{},"5007 No such model",[153,234,235,238,243],{},[171,236,237],{},"6",[171,239,224,240,242],{},[33,241,97],{}," + Provider 키",[171,244,245,248],{},[33,246,247],{},"2021 Payment error"," (partner 결제 정책)",[153,250,251,256,263],{},[171,252,253],{},[28,254,255],{},"7",[171,257,258],{},[28,259,176,260,262],{},[33,261,90],{},") + Authorization + cf-aig-authorization",[171,264,265,268],{},[28,266,267],{},"정상 동작"," ✅",[142,270,272],{"id":271},"결정사건","결정\u002F사건",[83,274,275,283,290,293,296],{},[25,276,277,279,280,282],{},[33,278,179],{}," 게이트웨이는 결제 정책상 더 이상 사용 불가 → ",[33,281,90],{}," 신규 게이트웨이로 전환 (사용자가 직접 생성)",[25,284,285,286,289],{},"AI Gateway에 OpenAI Provider 키 ",[28,287,288],{},"재등록"," (이전에 BYOK region 차단 우려로 삭제했던 키 다시 등록)",[25,291,292],{},"AI Gateway $10 크레딧 충전 (단 partner 모델 호출에는 적용되지 않음 — Cloudflare 자체 모델 전용)",[25,294,295],{},"Llama 3.3 70B로의 fallback 가능성 검증 완료 (평점 4.0, 한국어 OK) — 비상시 옵션으로 유지",[25,297,298,299,302],{},"안내글 평가 기능은 코드 들어감, UI 통합은 별도 작업 (PMS의 ",[33,300,301],{},"pages\u002Fposts\u002F[id]\u002Findex.vue"," 작성자 staff 분기 + 모달 재활용)",[142,304,306],{"id":305},"다음-작업-후보","다음 작업 후보",[83,308,309,316,319],{},[25,310,311,312,315],{},"안내글 평가 UI 통합 (",[33,313,314],{},"작성자 staff → \"AI 안내글 분석\" 버튼 + 모달",")",[25,317,318],{},"OpenSearch 셋업 + 자료 업로드 MVP (M2 진입)",[25,320,321,324],{},[33,322,323],{},"\u002Fadmin\u002Fevals","에서 LLM 행 클릭 시 모달 즉시 열기",[326,327],"hr",{},[14,329,330],{"id":330},"배포",[142,332,334,335,338],{"id":333},"_1354-malgn-helper-pms-cloudflare-pages","13:54 — ",[33,336,337],{},"malgn-helper-pms"," → Cloudflare Pages",[83,340,341,348],{},[25,342,343,344,347],{},"커밋: ",[33,345,346],{},"c7670ba"," (신규 커밋: yes)",[25,349,350],{},"메시지: feat(wbs): 다크 모드여도 항상 라이트 톤 — useColorMode override",[142,352,354,355,338],{"id":353},"_1405-malgn-helper-pms-cloudflare-pages","14:05 — ",[33,356,337],{},[83,358,359,364],{},[25,360,343,361,347],{},[33,362,363],{},"77395c7",[25,365,366],{},"메시지: fix(ui): colorMode를 글로벌 light 고정 — nuxt.config + wbs.vue 페이지별 override 제거",[142,368,370,371,338],{"id":369},"_1412-malgn-helper-admin-cloudflare-pages","14:12 — ",[33,372,373],{},"malgn-helper-admin",[83,375,376,381],{},[25,377,343,378,347],{},[33,379,380],{},"c754924",[25,382,383],{},"메시지: chore: 다크모드 비활성 — colorMode light 글로벌 (모듈 추가 시 자동 발효)",[142,385,387,388,338],{"id":386},"_1413-malgn-helper-cloudflare-pages","14:13 — ",[33,389,179],{},[83,391,392,397],{},[25,393,343,394,347],{},[33,395,396],{},"8ed0965",[25,398,383],{},[142,400,402,403,338],{"id":401},"_1422-malgn-helper-pms-cloudflare-pages","14:22 — ",[33,404,337],{},[83,406,407,412],{},[25,408,343,409,347],{},[33,410,411],{},"acb8940",[25,413,414],{},"메시지: fix(ui): localStorage 옛 dark 값 무시 — plugin으로 light 강제",[142,416,418,419,338],{"id":417},"_1427-malgn-helper-pms-cloudflare-pages","14:27 — ",[33,420,337],{},[83,422,423,428],{},[25,424,343,425,347],{},[33,426,427],{},"2d273db",[25,429,430],{},"메시지: fix(ui): colorMode 제거 + body background-color: #ffffff 강제 (다크 모드 무관)",[142,432,434,435,338],{"id":433},"_1559-malgn-helper-pms-cloudflare-pages","15:59 — ",[33,436,337],{},[83,438,439,444],{},[25,440,343,441,347],{},[33,442,443],{},"1e1eb28",[25,445,446],{},"메시지: feat(QaEvalCard): '추천 문의 답변' 별도 섹션으로 분리 — Q&A 본문 다음에 배치",[142,448,450,451,454],{"id":449},"_1758-malgn-helper-api-cloudflare-workers","17:58 — ",[33,452,453],{},"malgn-helper-api"," → Cloudflare Workers",[83,456,457,462,465,468,471,474,477],{},[25,458,343,459,347],{},[33,460,461],{},"bab7867",[25,463,464],{},"메시지: feat(eval): announce-eval 엔드포인트 신설 + LLM 모델·게이트웨이 정비",[25,466,467],{},"\u002Fpms\u002Fposts\u002F:id\u002Fannounce-eval\u002Fgenerate (직원 작성 안내글 평가, 3축 + 3개 추천)",[25,469,470],{},"llm.ts: Workers AI binding 호출 함수(callWorkersAi) 추가",[25,472,473],{},"AI Gateway malgn-helper2로 전환 (이전 malgn-helper는 결제 정책 변경으로 차단)",[25,475,476],{},"LLM_MODEL: openai\u002Fgpt-4.1-mini (Vision 포함)",[25,478,479],{},"Smart Placement + AI binding 활성",[142,481,483,484,338],{"id":482},"_1812-malgn-helper-pms-cloudflare-pages","18:12 — ",[33,485,337],{},[83,487,488,493],{},[25,489,343,490,492],{},[33,491,443],{}," (신규 커밋: no)",[25,494,495],{},"메시지: chore: 청크 hash 갱신 — '추천 문의 답변' 섹션 분리 변경이 브라우저 캐시로 안 보이는 사례 대응",{"title":497,"searchDepth":498,"depth":498,"links":499},"",3,[500,506],{"id":16,"depth":501,"text":16,"children":502},2,[503,504,505],{"id":144,"depth":498,"text":145},{"id":271,"depth":498,"text":272},{"id":305,"depth":498,"text":306},{"id":330,"depth":501,"text":330,"children":507},[508,510,512,514,516,518,520,522,524],{"id":333,"depth":498,"text":509},"13:54 — malgn-helper-pms → Cloudflare Pages",{"id":353,"depth":498,"text":511},"14:05 — malgn-helper-pms → Cloudflare Pages",{"id":369,"depth":498,"text":513},"14:12 — malgn-helper-admin → Cloudflare Pages",{"id":386,"depth":498,"text":515},"14:13 — malgn-helper → Cloudflare Pages",{"id":401,"depth":498,"text":517},"14:22 — malgn-helper-pms → Cloudflare Pages",{"id":417,"depth":498,"text":519},"14:27 — malgn-helper-pms → Cloudflare Pages",{"id":433,"depth":498,"text":521},"15:59 — malgn-helper-pms → Cloudflare Pages",{"id":449,"depth":498,"text":523},"17:58 — malgn-helper-api → Cloudflare Workers",{"id":482,"depth":498,"text":525},"18:12 — malgn-helper-pms → Cloudflare Pages","md",{},true,"\u002Fhistory\u002Fhistory.20260602",{"title":5,"description":497},"history\u002Fhistory.20260602","j0OaZK6VVJ7SnWfBLZ-nb-2YqCaE1i25Jc5qYmTdZQc",1780986551106]