← Mealplanning 페이지로

팀 프로젝트에서 작성한 당시 기록을 바탕으로 한 공개용 정제 사본입니다. 원본 문서 · AI 기능별 모델 선정 — 최종 리포트  |  작성 시점 · 2026-07-28
계정·내부 주소·팀 내부 식별정보는 공개용으로 정리했으며, 공개된 측정값과 기술적 판단의 의미는 원본과 같습니다.

왜 쟀나

크레딧이 생겨 관리형 모델로 옮길 수 있게 되면서, 어떤 기능을 어떤 모델에 맡길지 정해야 했습니다. 싼 모델로 바꿔도 되는지, 바꾸면 무엇을 잃는지를 추정이 아니라 같은 조건의 실측으로 확인하려고 이 검토를 시작했습니다.

무엇이 나왔나

후보 15종을 같은 기준으로 재서 누적 1,750건의 평가 기록을 남겼습니다. 품질만이 아니라 안전(환각)·단가·월비용·품질 손실을 한 표에 놓고 비교했습니다.

가장 싼 모델로 바꿔도 월 절감액은 크지 않았고, 그 대가는 품질 손실과 데이터 리전 이동이었습니다. 새 측정이 나올 때마다 결론이 바뀌어 권고를 다섯 번 수정했고, 매번 이전 판단을 지우지 않고 시점과 함께 남겼습니다.

무엇을 얻고 무엇을 포기했나

아래부터 당시 작성한 기록을 공개용으로 정제한 전문입니다.

AI 기능별 모델 선정 — 최종 리포트

기능의 용도·의도·니즈에서 출발해 태스크 특성을 규정하고, 실측 근거로 모델을 확정한다 · 건우(AI) · 2026-07-28

누적 실측 약 1,750건 — 모델 15종 · 리전 2곳 · 실물 영수증 15장 · 실험 A~F + 비용 타협 재검토

Bedrock 이전
3건
챗 refine · 감정분류 · 구조화(서울)
Gemini 유지
3건
OCR · 영상 · 티어7 분류(이전 불가)
미실측 보류
2건
리뷰 요약 · chat-insights 서술
실측 모델
15종
누적 ~1,750건 · 실험 A~H

기(起) — 왜 이 검토를 시작했나

팀에 AWS 크레딧 $700이 주어졌고, 현재 AI 기능은 전부 개인 Gemini API 키로 돌아간다. 두 가지 동기가 겹쳤다 — ①비용을 크레딧으로 옮긴다 ②개인 키 의존을 팀 계정으로 정리한다.

그런데 최초 이관 설계(bedrock-migration-design.md)는 "코드 구조상 이관 가능한가"만 판단했다. 두 서비스 모두 교체 가능한 백엔드 팩토리가 있어 구현은 쉽다는 결론이었고, 챗·OCR 모두 "✅ 이관"으로 적혀 있었다.

구현 가능성과 품질 보장은 다른 문제다. 그래서 "증명된 것만 이전한다"를 원칙으로 세우고 전면 실측에 들어갔다.

승(承) — 무엇을 어떻게 쟀나

모델 11종 × 50케이스
550건
실물 영수증
15장
분류·감정
200건
실험 A~E
~700건
HARD-25
125건
측정무엇을왜 그렇게
본 벤치마크11모델 × (평문 챗 25 + 무말투 구조화 25)실제 서비스 프롬프트를 코드에서 원문 추출, 운영 파라미터 그대로. 채점은 프로덕션 가드레일 check_output_grounded를 import해 사용 — 벤치 전용 잣대를 새로 만들지 않았다
OCR실물 영수증 13장 + 합성 2장합성만으로는 감열지 난이도를 못 잰다. 실물은 개인정보라 레포 밖 보관
분류·감정품목분류 25 + 리뷰감정 25 × 4모델챗·OCR이 막힌 뒤 Bedrock이 잘하는 태스크를 역으로 탐색
실험 A~E가드레일 수정·프롬프트 개선·결정성·인젝션·온도모델 교체 외에 품질을 올릴 수단이 있는지
실험 F (HARD-25)다품목·숫자밀집·치환유혹·지식경계·복합제약기존 스위트가 포화(전 모델 25/25)해 우열을 못 가려서 천장 없는 스위트를 새로 설계

전(轉) — 결론을 세 번 뒤집은 발견

발견 ① 이관 판정이 뒤집혔다 — "구조상 가능"이 아니라 "품질상 불가"

Nova는 한글 글자 자체를 재현하지 못한다. 영수증에서 삼겹살→"이색", 고리조끼→"가입에이에서"로 통짜 환각했고, 놀랍게도 이미지가 아닌 순수 텍스트에서도 같은 결함이 나왔다(nova-pro: 대파→"냠파", 목살→"리마다"). → OCR 이관 제외 확정.

발견 ② 진짜 문제는 모델이 아니라 가드레일이었다

챗 실패 109건을 분해하니 75%(82건)가 오탐이었다. check_output_grounded가 template 출력만 근거로 보고 유저 질문을 보지 않아서, 사용자가 말한 "대파"·"8천원"을 답변이 되풀이하면 환각으로 오판했다. 근거에 질문을 합산하자 60% → 90%로 올랐다(추가 LLM 호출 없음).

발견 ③ 프롬프트가 모델 교체보다 효과가 컸다

남은 실패는 지식경계 창작(근거에 조리법이 없는데 지어냄)에 집중됐다. 금지 규칙 + 좋은예/나쁜예 few-shot을 넣자 전 모델에서 완전 해소(nova-lite 0/3→3/3, claude-3-haiku 0/3→3/3). 이 시점에 nova-micro(서울)가 25/25로 Gemini와 동률이 되어 이전이 가능해 보였다.

발견 ④ 그러나 그 동률은 천장 효과였다

천장 없는 HARD-25로 재측정하니 Gemini 18/25 vs nova-micro 12/25로 갈렸다. 중요한 건 갈린 축이다 — 안전성(환각)은 전 모델 25/25 완전 동률이고, 차이는 정보 완전성에서 났다. nova-micro는 5개 요리를 요약하며 가격 5개를 전부 누락했다.

모델HARD 종합근거무결(안전)숫자보존(완전성)
gemini-flash-lite18/2525/2518/25
gemma-3-27b-tokyo18/2525/2518/25
glm-47-tokyo15/2525/2515/25
nova-lite-seoul14/2525/2514/25
nova-micro-seoul12/2525/2513/25
식비 앱에서 금액은 핵심 가치다. 43% 절감·2배 속도로도 "얼마인지 안 보이는" 손실은 상쇄되지 않는다 → 챗 Gemini 유지.

⚠️ 중간 결론 — 이후 역전됨: HARD-25 raw 판정이며 §실험 G에서 nova-micro(서울) 이전 확정으로 최종 역전됐다(숫자밀집 경로는 프로덕션이 refine하지 않아 실서비스 경로 20/20 = Gemini 동률). 최종 판정 = 상단 한눈 요약표·기능별 최종 배치. 이 문단을 챗 최종 판정으로 인용하지 말 것.

비용 타협 재검토 — 후보 15종 전수 실측

비용을 줄일 여지를 찾기 위해 웹 리서치로 2026년 요율·평판을 조사해 미검증 후보 10종을 추가 발굴하고, 동일한 HARD-25 프로세스로 재측정했다(신규 250건). 신규 후보: Nova 2 Lite(신세대) · GLM-4.7-flash(저가판) · Gemma-3-12B · Qwen3-next-80B · Kimi K2.5 · Nemotron Nano 3 · DeepSeek V3 · Mistral Large 3 · gpt-oss-120B · MiniMax M2.1.

모델리전품질(HARD)안전(환각)원/콜월비용vs Gemini품질손실
gemma-3-12b-tokyo도쿄14/2525/250.0396원594원-598원22%
nova-micro-seoul서울12/2525/250.0482원723원-470원33%
nemotron-nano3-tokyo도쿄14/2524/250.0774원1,161원-32원22%
gemini-flash-liteGoogle18/2525/250.0795원1,192원+0원0%
nova-lite-seoul서울14/2525/250.0875원1,312원+120원22%
gemma-3-27b-tokyo도쿄18/2525/250.0917원1,376원+183원0%
glm-47-flash-tokyo도쿄14/2525/250.0941원1,412원+219원22%
qwen3-next-80b-tokyo도쿄13/2525/250.1202원1,803원+610원28%
glm-47-tokyo도쿄15/2525/250.1836원2,754원+1,562원17%
gpt-oss-120b-tokyo도쿄17/2523/250.2499원3,748원+2,556원6%
nova-2-lite-seoul서울14/2523/250.2841원4,262원+3,069원22%
mistral-large3-tokyo도쿄12/2521/250.3413원5,120원+3,927원33%
minimax-m21-tokyo도쿄13/2524/250.4949원7,424원+6,231원28%
deepseek-v3-tokyo도쿄15/2524/250.5192원7,788원+6,596원17%
kimi-k25-tokyo도쿄13/2523/250.6039원9,058원+7,866원28%

월비용 = 챗 refine 15,000콜/월(DAU500×1추천), 캐시 0% 최악 가정 · 1,400원/USD · 요율은 2026 공시(웹 리서치)

결론: 비용 타협의 실익이 없다

따라서 "약간의 타협"으로 얻을 것이 없다. AI 월 비용이 1천원대라 절감 레버가 애초에 존재하지 않으며, 타협의 대상이 금액 정확도(식비 앱의 핵심 가치)데이터 레지던시라 교환비가 극히 불리하다. → 기존 결론 유지: 생성·판독은 Gemini, 분류·구조화만 Bedrock nova-micro(서울).

⚠️ 이 "기존 결론 유지"는 비용 섹션(실험 G 이전) 시점 상태다. 챗 refine은 §실험 G에서 nova-micro(서울) 이전 확정으로 바뀐다 — 이 문단을 챗 최종 판정으로 인용하지 말 것.

비용을 정말 줄이려면 모델 교체가 아니라 호출 자체를 줄이는 레버가 훨씬 크다 — 이미 구현된 Redis 캐시(30일)·recommend-only skip(가격·영양은 template)·거절 시 호출 0이 그것이며, 실제 유료 호출은 위 최악 가정보다 크게 낮다.

상용화 규모 재분석 — 크레딧 vs 개인 지출

앞선 월비용은 캡스톤 규모(DAU 500 · 챗만) 가정이었다. 상용 서비스 수준으로 확장하고, 누가 지불하는가(Bedrock=팀 AWS 크레딧 / Gemini=개인 API 키)를 분리해 다시 계산했다. 전 항목 실측 토큰 기반이며, 영상 토큰만 추정치(1분 영상 ~50K)다.

사용 프로파일(유저 1명/월): 챗 refine 6회 · OCR 8장 · 리뷰 감정 20건 · 구조화 8건 · 영상 0.5건

① 진짜 비용은 챗이 아니었다

기능월 비용(MAU 50만)비중이전 가능성
영상→레시피1,862,000원40.7%❌ Bedrock에 URL 입력 없음
영수증 OCR1,770,720원38.7%❌ Nova 환각·haiku 오독
구조화 추출436,800원9.5%✅ Bedrock 채택
리뷰 감정분류270,200원5.9%✅ Bedrock 채택
챗 추천 refine237,720원5.2%⚠️ 품질 33% 손실

영상(40.7%) + OCR(38.7%) = 79.4%가 비용의 대부분이고, 그동안 집중 비교한 챗은 5.2%에 불과하다. 그런데 이 79.4%는 둘 다 기술적으로 Bedrock 이전이 불가능하다 — 개인 지출의 큰 덩어리는 구조적으로 못 줄인다.

② 규모별 지출 — 전략 비교

규모MAUA. 전부 Gemini
(개인)
B. 실측 권고
(개인 / 크레딧)
C. 챗까지 Bedrock
(개인 / 크레딧)
C의 추가 절감
현재(캡스톤)5004,577원3,870원 / 247원3,633원 / 392원237원
소규모 상용5,00045,774원38,704원 / 2,474원36,327원 / 3,921원2,377원
중규모 상용50,000457,744원387,044원 / 24,745원363,272원 / 39,210원23,772원
대규모 상용500,0004,577,440원3,870,440원 / 247,450원3,632,720원 / 392,098원237,720원

챗을 Bedrock으로 옮겨 얻는 개인 지출 절감은 어느 규모에서든 전체의 2.4%다 — 캡스톤 93원, 대규모 상용에서도 93,072원(전체 386만원 중). 대가는 품질 33% 손실(HARD 18→12, 금액 누락).

③ 크레딧 $700의 수명

규모B 전략 소모B 수명C 전략 소모C 수명
현재(캡스톤)247원/월999+개월392원/월999+개월
소규모 상용2,474원/월396개월3,921원/월250개월
중규모 상용24,745원/월40개월39,210원/월25개월
대규모 상용247,450원/월4개월392,098원/월2개월

캡스톤 규모에서는 크레딧에 여유가 크다(999+개월 = 사실상 무한) — 즉 크레딧 소진을 걱정해 이전을 늦출 이유가 없다. 반면 상용 규모에서는 2~4개월이면 소진되므로 영구 절감이 아니라 일시적 유예로 계획해야 한다. 두 경우 모두 이전 판단의 기준은 크레딧 잔량이 아니라 품질 동등성이며, 실험 G가 그것을 확인했다.

재분석 결론

최종: OCR·영상만 Gemini(기술적 이전 불가) · 챗 refine·감정분류·구조화는 Bedrock 서울(품질 동률 확인 후 이전, 크레딧 결제).

실험 G·H — 품질 손실 최소화 재시도

"이전 가능한 것은 품질이 최대한 덜 떨어지는 쪽으로 옮긴다"는 목표에 맞춰, 실험 F에서 드러난 실패 원인(금액 누락)을 직접 겨냥한 프롬프트를 만들어 서울 후보를 재측정했다.

실험 G — 숫자 보존 프롬프트 (챗 refine)

모델HARD 종합 전→후숫자보존 전→후안전(환각)프로덕션 경로*원/콜p50
gemini-flash-lite18→24/2518→24/2525/2520/200.1111원936ms
nova-micro-seoul12→23/2513→23/2525/2520/200.0670원456ms
nova-pro-seoulNone→22/25None→23/2524/2519/201.5422원658ms
nova-2-lite-seoul14→19/2514→20/2524/2517/200.3726원723ms
nova-lite-seoul14→14/2514→16/2523/2512/200.1192원590ms

* 프로덕션 경로 = 숫자밀집(영양·가격·재료비) 제외 20케이스. 실제 서비스는 gemini_refine_recommend_only=True레시피 추천(recipe_match)만 refine하고 영양·가격은 template 출력이 그대로 나가므로 LLM을 거치지 않는다.

챗 refine 이전 가능 — nova-micro(서울)

실험 H — 도메인 규칙 프롬프트 (OCR 티어7 분류)

보관법·가공식품 경계 규칙을 프롬프트에 명시해 재측정했다: nova-lite 18 → 20/25, nova-micro 18 → 17/25. Gemini 25/25와의 격차가 남는다 — 이 태스크는 표기법이 아니라 도메인 상식 판단이라 프롬프트로 좁혀지지 않았다. → 티어7 분류는 Gemini 유지.

결(結) — 도출된 선정 원칙

서비스 단위가 아니라 태스크 유형으로 모델을 고른다. 같은 기능 안에서도 하위 태스크가 다르면 모델이 갈린다 — 리뷰 감정분석이 그 예다(분류=Nova, 요약=Gemini).

태스크 유형선택실측 근거
라벨 분류(감정 등)Bedrock nova-micro(서울)감정 24/25 ≈ Gemini 25/25 · 2.2× 빠름 · 절반 비용
텍스트→구조화 JSONBedrock nova-micro(서울)품목 100%·합계 25/25 포화 → 최저가·최속
한국어 문장 생성 — 근거 재작성(refine)Bedrock nova-micro(서울)숫자보존 프롬프트 적용 시 프로덕션 경로 20/20 = Gemini 동률(실험 G)
한국어 문장 생성 — 자유 요약/서술미실측 — 착수 시 실측refine과 성격이 달라 실험 G 결과를 전용할 수 없음
한국어 이미지 판독GeminiNova 통짜 환각 · haiku 글자 오독
도메인 상식 판단Gemini품목분류 18/25 < 25/25(보관법·가공식품 경계)
영상 이해Gemini 전용Bedrock에 URL 입력 자체가 없음
재현성이 곧 자산자체 모델NER·랭킹·이상탐지는 LLM 미적용

왜 이렇게 갈리나: Nova는 한글 글자를 생성·판독하는 데 약하지만, 입력 텍스트를 읽고 라벨·구조를 뱉는 데는 포화 품질이다. 이 한 문장이 모든 배치를 설명한다.

리전은 성능이 아니라 데이터 레지던시로 정한다 — 동일 모델의 서울/도쿄 지연차는 41ms, 품질차는 오차 범위였다. 도쿄에는 더 강한 모델(GLM-4.7·Gemma)이 있지만 한국 유저 데이터의 일본 반출이라 팀 합의 전까지 쓰지 않는다.

기능별 최종 배치 — 니즈에서 모델까지

1. 영수증 OCR (이미지→품목·금액)🟢 운영유지
왜 필요
사용자가 영수증을 찍기만 하면 냉장고 재고(F5)와 식비 기록(F17)이 동시에 채워져야 한다. 수동 입력은 이탈의 최대 원인이므로 앱 전체의 입구다.
설계 의도
탐지+인식+레이아웃을 모델이 한 번에 처리하고 구조화 JSON으로 직접 받는다(좌표 파서 불필요). 뒷단은 NER→item_master 표준코드로 이어지므로 품목명 문자열이 정확해야 파이프라인 전체가 산다.
태스크 특성
한국어 감열지 이미지 판독 · 저대비·퇴색·구겨짐 · 오독이 곧 매칭 실패
선정 모델
gemini-3.5-flash-lite 버전 핀 · Google 글로벌
근거
실물 13장에서 합계정합 12/13. Bedrock 대안은 전부 미달 — Nova는 한글 품목명을 통짜 환각(파싱 5/13·정합 1/13), claude-3-haiku는 형태는 잡지만 글자 오독(맥도날드→"매도바드", 느타리→"노타리"). 품목명이 틀리면 item_master 매칭이 실패하므로 이 오독은 치명적이다.
2. RAG 챗봇 '밥풀이' — 응답 다듬기(refine)🟢 운영Bedrock 이전
왜 필요
검색 결과를 그대로 나열하면 기계처럼 읽힌다. 사용자가 대화하듯 묻고 자연스러운 문장으로 답을 받아야 재방문한다.
설계 의도
refine-only — template이 DB 검색결과로 근거 문장을 조립하고, LLM은 재작성만 한다. 거절은 호출 0, 레시피 추천(recipe_match)만 다듬는다(가격·영양은 template 그대로 나감). 출력은 check_output_grounded로 기계 대조.
태스크 특성
한국어 문장 생성 · 근거의 금액을 빠짐없이 옮겨야 함 · 지식경계 준수
선정 모델
apac.amazon.nova-micro-v1:0 · AWS 서울
근거
HARD-25 최초 측정은 12/25로 미달이었으나, 숫자보존 프롬프트(실험 G)를 넣자 23/25로 뛰었다. 남은 실패 2건은 모두 영양·재료비(숫자밀집)인데 프로덕션은 이 경로를 refine하지 않는다(gemini_refine_recommend_only=True). 실제 서비스 경로만 보면 nova-micro 20/20 = Gemini 20/20 완전 동률이며 안전(환각) 25/25도 동일. 게다가 40% 저렴 · 2배 빠름(456ms) · 서울 리전 · 크레딧 결제.
3. 영상→레시피 추출🟠 착수Gemini 전용
왜 필요
사용자가 보던 유튜브 요리 영상을 그대로 레시피·재료·예산으로 전환한다. 링크 한 줄이 입력의 전부여야 한다.
설계 의도
URL을 모델에 직접 넘겨 멀티모달 추출. 영상 토큰이 비용의 90%+라 1차는 최저가 모델 원칙.
태스크 특성
영상 이해 · URL 네이티브 fetch 필요
선정 모델
gemini-3.5-flash-lite (하드실패 시 flash) · Google 글로벌
근거
Bedrock에는 YouTube URL 입력 자체가 없다. 대체하려면 영상 다운로드+프레임 추출 파이프라인을 자체 구축해야 하고 품질·비용이 모두 악화된다 — 기술적 제약으로 선택지가 없음.
4. 리뷰 감정분석 (긍정 비율 %)⬜ 예정Bedrock 채택
왜 필요
레시피를 고를 때 남들이 실제로 만족했는지가 결정적이다. 별점 없는 만개레시피 리뷰에서 긍정 비율을 뽑아 신뢰 신호로 쓴다.
설계 의도
리뷰 건당 1회 분류. 레시피당 수십~수백 건이라 단가·지연이 지배적이다. 말투는 필요 없고 라벨만 정확하면 된다.
태스크 특성
한국어 입력 이해 → 라벨 출력 · 대량 배치 · 생성 품질 무관
선정 모델
apac.amazon.nova-micro-v1:0 · AWS 서울
근거
감정 24/25 vs Gemini 25/25로 실질 동급인데 351ms(2.2배 빠름)·0.0095원(약 절반). 유일 오답은 "레시피 잘 봤습니다"(중립→긍정) 경계 케이스로 비율 집계에는 영향이 미미하다. 대량 처리라 속도·단가 이득이 그대로 규모 효과가 된다.
5. 리뷰 종합 요약 (2~3문장)⬜ 예정후보 확정·실측 대기
왜 필요
긍정 비율 숫자만으로는 왜 좋은지를 모른다. 리뷰 전체를 읽지 않아도 되게 요약 문장을 붙인다.
설계 의도
레시피당 1회만 호출 → 단가 영향이 작다. 대신 한국어 문장 품질이 그대로 노출된다.
태스크 특성
한국어 자유 요약(근거 재작성이 아님) · 호출 빈도 낮음
선정 모델
1순위 apac.amazon.nova-micro-v1:0 · 2순위(품질 우선) apac.anthropic.claude-3-5-sonnet-20241022-v2:0 · AWS 서울
근거
후보 근거 — ①nova-micro는 챗 refine에서 한국어 생성 동률을 입증했고(프로덕션 경로 20/20) 최저가·서울이며, 챗과 같은 모델을 쓰면 운영이 단순해진다. ②품질이 부족하면 claude-3-5-sonnet-v2(2026-07-28 액세스 재확인·호출 가능, 한국어 문서 정평)로 올린다 — 레시피당 1회라 단가($3/$15)를 감당할 수 있다. 제외: nova-lite(안전 25→23 하락), nova-pro(단가 23배 대비 이득 불명확).
⚠️ 구현 후 반드시 재확인: 챗 refine은 근거 재작성이고 이 태스크는 자유 요약이라 실험 G 결과를 그대로 전용할 수 없다. 기능 착수 시 동일 프로세스(정답 대조 + 실제 프롬프트)로 실측해 확정한다.
6. 텍스트→구조화 JSON 추출 (신규 공통)⬜ 예정Bedrock 채택
왜 필요
OCR 이후 단계·배치 파이프라인에서 한국어 텍스트를 구조화해야 하는 지점이 반복된다(품목·금액·합계 등).
설계 의도
이미지가 아니라 이미 텍스트인 입력을 스키마 JSON으로. 정오만 중요하고 말투는 무관.
태스크 특성
한국어 텍스트 입력 → 구조 출력 · 정답 대조 가능
선정 모델
apac.amazon.nova-micro-v1:0 · AWS 서울
근거
구조화 25건에서 품목 100%·합계 25/25로 상위 9모델이 포화. 포화 구간에서는 최저가·최속이 합리적 선택이며 nova-micro가 0.031원·469ms로 가장 저렴하고 빠르다. 데이터도 서울에 머문다.
7. OCR 티어7 품목 분류 (미해결 품목)⬜ 훅만 존재유지
왜 필요
규칙·사전 캐스케이드로 안 잡히는 품목이 미해결로 새면 식비 계산이 틀어진다. 마지막 단계에서 LLM이 받아준다.
설계 의도
캐스케이드 0~6단계로 대부분 처리하고, 남은 소수만 LLM 호출(비용 최소). 카테고리·보관법·식비포함을 함께 판정.
태스크 특성
한국어 라벨 분류이나 도메인 판단 포함(보관법·가공식품 경계)
선정 모델
gemini-3.5-flash-lite · Google 글로벌
근거
분류인데도 nova-micro 18/25 < Gemini 25/25로 갈렸고, 도메인 규칙을 프롬프트에 명시해도 20/25(실험 H)에 그쳤다. 실패가 보관법(햇감자 ROOM→FRIDGE)과 가공식품 경계(냉동만두·바나나킥·참치액을 식재료로)에 집중 — 단순 라벨링이 아니라 도메인 상식 판단이라서다. 호출량도 잔여분뿐이라 단가 이득이 작다.
8. 대화분석 리포트 서술 (chat-insights)🟢 운영후보 확정·실측 대기(저우선)
왜 필요
운영자가 대화 지표를 숫자표로만 보면 무슨 일이 일어났는지 해석이 어렵다. 서술 문단을 붙인다.
설계 의도
오프라인 배치(daily/threshold) — 런타임 지연과 무관. 구조화 지표는 코드가 만들고 LLM은 서술만.
태스크 특성
한국어 자유 서술(근거 재작성이 아님) · 배치 · 저빈도
선정 모델
1순위 apac.amazon.nova-micro-v1:0 · AWS 서울
근거
후보 근거 — 지표(숫자)를 입력받아 서술하는 태스크라 입력 이해 + 한국어 생성이 결합된 형태다. nova-micro가 두 축 모두에서 실측 성적이 있어(구조화 100%, 챗 refine 동률) 1순위로 둔다. 배치·저빈도라 단가 이득은 작지만 크레딧 결제로 개인 지출을 줄인다.
⚠️ 구현 후 반드시 재확인: 근거 대조 대상이 없는 자유 서술이라 가드레일로 품질을 기계 검증할 수 없다 — 실측 시 사람 확인(샘플 리뷰)이 필요하다. 우선순위는 최하위(운영 중이고 이전 이득이 작음).
9. 재료 NER (CRF) · 개인화 랭킹(LightGBM) · 가격 이상탐지(z-score)🟡/🟢/⬜LLM 미적용
왜 필요
재료 표준화·개인화 추천·가격 이상 감지는 서비스의 자체 자산(moat)이다.
설계 의도
LLM이 아니라 자체 학습 모델·통계로 푼다 — 재현성·외부 API 호출 없음·오프라인 가능.
태스크 특성
LLM 아님 (CRF / LightGBM / z-score)
선정 모델
자체 모델 (LLM 미사용) · 온프렘
근거
이 영역은 LLM 선정 대상이 아니다. 외부 API 의존 없이 동작해야 하고, 학습 데이터가 곧 경쟁력이다. 챗의 스팬 추출도 프로덕션은 rule 백엔드를 쓴다(CRF는 레시피 분포 학습이라 채팅에 적용 시 과다추출 — 스왑 금지).

한눈 요약표

기능태스크 특성모델리전실측 근거판정
영수증 OCR이미지 판독gemini-3.5-flash-liteGoogle합계정합 12/13 vs Nova 1/13·haiku 오독유지
챗 refine문장 생성apac.amazon.nova-micro-v1:0AWS 서울프로덕션 경로 20/20 = Gemini 동률(실험 G)이전
영상→레시피영상 이해gemini-3.5-flash-liteGoogleBedrock에 URL 입력 없음전용
리뷰 감정분석라벨 분류apac.amazon.nova-micro-v1:0AWS 서울24/25 ≈ 25/25 · 2.2× · 절반가채택
리뷰 요약자유 요약nova-micro → (대안) claude-3-5-sonnet-v2AWS 서울후보 확정 · 구현 후 실측 필요보류
구조화 추출텍스트→JSONapac.amazon.nova-micro-v1:0AWS 서울품목 100% 포화 → 최저가채택
OCR 티어7 분류도메인 판단gemini-3.5-flash-liteGoogle개선해도 20/25 < 25/25(실험 H)유지
chat-insights 서술자유 서술nova-microAWS 서울후보 확정 · 구현 후 실측 필요(저우선)보류
NER·랭킹·이상탐지비-LLMCRF / LightGBM / z-score온프렘자체 자산 · 외부 의존 배제미적용

실행 계획

#조치근거비용시점
1가드레일에 질문 합산 + 한글수사 정규화실험 A — 60→90%, 81건 회수0원즉시
2refine 프롬프트에 금지규칙 + few-shot실험 B — 지식경계 창작 전 모델 해소~0.01원/콜즉시
3temperature 0.3 → 0.0실험 E — 분산 −38%, 품질 동일0원즉시
4리뷰 감정분석 구현 시 nova-micro(서울)감정 24/25 · 2.2× · 절반가절감기능 착수 시
5구조화 추출 신규 지점에 nova-micro(서울)품목 100% 포화 → 최저가절감기능 착수 시
6OCR·영상 = Gemini 유지(→ Vertex 호스팅) · 챗 refine = nova-micro 이전(실험 G)HARD-25·실물 13장·실험 G현행/절감확정

1~3은 모델과 무관하게 현행 Gemini에도 즉시 이득이므로 이관 여부와 별개로 먼저 적용한다.

실측 여정 — 결론이 바뀌어 온 전 과정

이 프로젝트의 결론은 일곱 번 바뀌었다. 각 전환은 추측이 아니라 새 실측이 이전 판단을 반증하며 일어났다. 아래는 그 순서와 근거다.

#단계그때의 결론뒤집은 근거
1최초 이관 설계챗·OCR 모두 ✅ 이관 가능코드에 교체 가능한 백엔드 팩토리가 있어 구현이 쉽다고 판단 — 품질은 보지 않음
2전제 점검Bedrock에 Gemini가 없다Bedrock 카탈로그는 Claude·Nova·Llama 등 — Gemini는 Google 소유라 부재. 이관 = 엔드포인트 교체가 아니라 모델 교체임이 확정
3OCR 실측OCR ❌ 이관 불가실물 13장에서 Nova가 한글 품목명을 통짜 환각(파싱 5/13·정합 1/13). claude-3-haiku도 글자 오독
4본 벤치마크 550건⏸️ 보류11모델 × 50케이스. 서울 최선 nova-micro 16/18 < Gemini 18/18
5실험 A·B🟡 동률 도달가드레일 오탐 82/109 수정(60→90%) + 프롬프트 few-shot → nova-micro 25/25 = Gemini
6실험 F (HARD-25)❌ Gemini 우월25/25는 천장 효과였음. 천장 없는 스위트에서 Gemini 18 vs nova-micro 12 — 금액 누락이 원인
7실험 G (최종)✅ 이전 확정실패 원인(금액 누락)을 겨냥한 숫자보존 프롬프트 → nova-micro 12→23/25. 남은 실패는 프로덕션이 refine하지 않는 경로라 실제 서비스 경로는 20/20 동률
배운 것: ①구현 가능성 ≠ 품질 보장 · ②측정 스위트가 포화하면 우열을 못 가린다(천장 효과) · ③실패 원인을 특정하면 프롬프트로 상당 부분 복구된다 — 모델을 바꾸기 전에 가드레일·프롬프트를 먼저 보라.

부록 — 측정 환경·제약 (재현용)

AWS 계정·호출 규약

⛔ Claude 4.5 미측정 사유

AccessDeniedException(403): "not authorized to perform the required AWS Marketplace actions (aws-marketplace:ViewSubscriptions, aws-marketplace:Subscribe)" — Claude는 Bedrock에서 Marketplace 구독형(3rd-party)이라 계정 구독 + IAM 권한이 필요하다. Nova는 Amazon 1st-party라 무관. get_foundation_model_availability도 geonu 권한 밖(스코프 정책).

해제 방법: 계정 owner가 Bedrock 콘솔(리전=서울) Model access에서 Anthropic 활성화 + mp-dev 그룹에 aws-marketplace:ViewSubscriptions 부여. 구형 Claude 3/3.5는 액세스 없이도 호출되어 측정에 포함했다.

데이터셋 위치

현행 Gemini 고정 사유

-latest 별칭이 상위 세대로 롤링되며 thinking_budget=0이 거부되어(400) OCR이 전량 실패한 사고가 있었다(PR #272). 이후 gemini-3.5-flash-lite버전 핀 고정하고 thinking은 하한 미만 작은 양수(1)로 사실상 OFF. 별칭 사용 금지가 팀 규칙이다.

초기 OCR 실측 상세 (합성 2종)

합성 clean/degraded에서 Gemini 계열은 11/12 필드를 맞혔으나 Nova는 ≈6/12(품목명 0/4)로 실패했다(Lite: 삼겹살→"이색", Pro: "삼양라면"으로 창작). Tesseract는 저품질에서 0/12 · 빈 출력. 이 합성 실패가 실물 13장 측정으로 이어졌다.

남은 변수

항목상태영향
Claude 4.5 (Haiku/Sonnet)액세스 미개통2026-07-28 재확인 결과 여전히 차단(AccessDeniedException — marketplace 권한). 봉수가 서울 Model access enable + geonu에 aws-marketplace:ViewSubscriptions 부여 시 측정 가능. Claude는 한글 판독력이 구형(3-haiku)에서도 Nova보다 나았으므로 OCR·챗 판정을 바꿀 수 있는 유일한 후보
도쿄 리전 사용 허용팀 합의 필요허용 시 Gemma-3-27B(HARD 18/25로 Gemini와 동률)가 챗 후보로 즉시 승격
HARD-25 자체의 한계소표본25케이스·단일 시행. 순위는 견고하나 절대% 는 물렁 — 카나리로 실사용 검증 권장
근거 리포트: ai-model-migration-benchmark.md(550건 벤치·요금) · ai-model-quality-uplift.md(실험 A~F) · bedrock-migration-design.md(이관 설계) · ai-features-roadmap.md(기능 로드맵). 측정 2026-07-28 · 채점은 프로덕션 가드레일 import.