RSS
AI 자동화

테스트용 LLM API 비용 비교: 로컬 모델에서 Gemini·Groq·Claude까지

작성자
듀오랩스 대표·17분 읽기

LLM 기능을 개발하면서 테스트는 몇 달째 로컬 모델로만 돌리고 있습니다. 대화, 툴을 부르는 에이전트, 문서에서 필드를 뽑는 구조화 추출, 이미지 인식, 요약까지 전부 자체 추론 서버 한 대에서 확인했습니다. 호출 비용이 0원이라 마음 놓고 몇백 번씩 돌릴 수 있다는 점이 가장 컸습니다. 그런데 기능이 늘수록 로컬 모델로 하는 테스트가 실제로 무엇을 검증하고 있는지 의심스러워졌습니다. 이 글은 그 판단과, 테스트용으로 쓸 클라우드 API 후보를 놓고 비용을 따져 본 기록입니다.

로컬 모델로 버틴 방식과 그 대가

GPU 메모리 약 32GB 안에 모델 다섯 개를 상주시켰습니다. 챗과 글쓰기는 qwen3.5:4b, 구조화 추출은 qwen3:8b, 비전은 qwen2.5vl:7b, 빠른 분류는 exaone3.5:2.4b, 임베딩은 bge-m3입니다. 역할마다 직접 재서 이긴 모델을 붙였고, 상주 모델 수를 줄이려고 챗과 글쓰기는 한 모델을 나눠 쓰게 했습니다.

숫자만 보면 나쁘지 않았습니다. 챗 모델은 툴 15종을 붙인 에이전트 시험 8개 중 7개를 통과했고, 명함 인식은 5칸을 다 채웠습니다. 문제는 그 숫자를 얻기까지 프롬프트에 쌓인 것들이었습니다.

FAQ를 만드는 프롬프트에 개수 상한만 주면 모델은 1개만 냈습니다. 그래서 "최소 4개"를 함께 박았습니다. 리드 점수를 매기는 프롬프트에서는 예산이 미정인 고객에게 모델이 곧바로 0점을 줬습니다. 점수 구간을 숫자로 못박고 "미정은 부정이 아니다"를 추가하고 나서야 45점이 나왔습니다. 계약서 조항명 칸에 "5"라고 적은 일도 있어서, 스키마 설명과 별개로 필드마다 지시문을 한 줄씩 다시 썼습니다.

하나하나는 고칠 만한 문제였습니다. 하지만 이런 처방이 수십 개 쌓이면서 깨달은 것이 있습니다. 저는 기능을 테스트하고 있던 게 아니라 작은 모델을 달래고 있었습니다. 테스트가 실패했을 때 그게 내 코드의 문제인지 4B 모델의 한계인지 구분이 안 되면, 그 테스트는 신호가 아니라 소음입니다. 반대로 작은 모델에 맞춰 덧댄 프롬프트는 더 큰 모델에서 오히려 답을 딱딱하게 만들 수 있어서, 나중에 모델을 바꾸면 다시 손봐야 합니다.

품질보다 먼저 걸린 동시성

테스트 속도도 문제였습니다. 추론 서버가 한 대라서 모델마다 동시에 한 요청만 처리하도록 대기열을 두었습니다. 테스트 여러 개를 병렬로 돌리면 결국 한 줄로 서서 하나씩 처리됩니다. 에이전트 테스트는 한 번에 여러 스텝을 돌기 때문에 앞의 테스트 하나가 수십 초를 잡아먹습니다.

모델을 바꿔 가며 비교하는 테스트는 더 느렸습니다. 상주하지 않은 모델을 부르는 순간 다른 모델이 메모리에서 밀려나고, 다음 호출이 콜드 로드를 맞습니다. 벤치마크 두 개가 겹쳤을 때 "9*7" 한 번에 60초가 걸린 적도 있습니다.

클라우드로 옮길 때 먼저 확인한 것

다행히 코드는 처음부터 클라우드 프로바이더를 받을 수 있게 짜여 있었습니다. 챗·에이전트 경로와 구조화 추출 경로 모두 Anthropic과 Groq 분기가 있고, 역할별 기본 모델을 고르는 해석기가 한 곳에 모여 있습니다. 외부 유료 모델에는 하루 호출 상한도 이미 걸려 있습니다. 그래서 이번 결정은 다시 짜는 문제가 아니라 역할마다 무엇을 붙일지 고르는 문제가 됐습니다.

전부 옮길 생각은 없었습니다. 빠른 분류는 2.4B 모델이 이미 정확도 100%에 1.1초라서 바꿀 이유가 없습니다. 임베딩은 바꾸면 손해입니다. 문서 컬렉션마다 색인할 때 쓴 임베딩 모델이 고정돼 있어서, 모델을 바꾸면 기존 문서를 전부 다시 색인해야 하고 검색 품질 이득은 작습니다. 옮길 대상은 챗·에이전트, 글쓰기, 구조화 추출, 비전 네 역할로 좁혔습니다.

후보 열세 개의 단가

2026년 10월 기준으로 공개 가격표와 가격 비교 사이트에 나온 단가를 모았습니다. 100만 토큰당 달러이고, 프로모션 할인은 뺀 정가입니다.

모델 입력 출력 비전 메모
Groq gpt-oss-20b $0.075 $0.30 ✗ 가장 싼 축, 매우 빠름
DeepSeek V4 Flash $0.09 $0.18 ? 출력이 가장 쌈
Gemini 2.5 Flash-Lite $0.10 $0.40 ✓ 무료 등급 있음
Groq gpt-oss-120b $0.15 $0.60 ✗ 툴 호출 직접 확인함
Mistral Small 4 $0.15 $0.60 ✓ 유럽 사업자
GPT-5.4 nano $0.20 $1.25 ✓ OpenAI 최저가
Gemini 3.1 Flash-Lite $0.25 $1.50 ✓ 무료 등급 있음
Upstage Solar Pro 4 $0.30 $1.20 ✗ 한국어 특화
Gemini 2.5 Flash $0.30 $2.50 ✓ 추론 토큰이 출력으로 과금
Cerebras gpt-oss-120b $0.35 $0.75 ✗ Groq보다 비싸고 더 빠름
GPT-5.4 mini $0.75 $4.50 ✓
Claude Haiku 4.5 $1.00 $5.00 ✓
Claude Sonnet 5.5 $2.00 $10.00 ✓ 비교 기준

네이버 HyperCLOVA X도 후보에 넣고 싶었는데, 원화로 과금된다는 것 외에 토큰 단가를 공개 자료에서 찾지 못해 표에서 뺐습니다. Upstage Solar Pro 4는 출시 기념으로 90% 할인 중이었지만 9월에 끝났습니다.

가장 싼 쪽과 가장 비싼 쪽의 입력 단가가 25배 넘게 차이 납니다. 출력은 50배가 넘습니다. 표만 봐서는 감이 오지 않아서 테스트 호출량에 대입해 봤습니다.

경량 모델이면 한 달 1~3만 원

아직 클라우드 모델로 실측한 토큰량은 없습니다. 그래서 아래 숫자는 제가 세운 가정 위에서 계산한 값이고, 가정을 그대로 적어 둡니다.

에이전트 호출 한 번은 툴 15종의 정의와 대화 이력이 매 스텝 입력으로 들어갑니다. 스텝당 입력 약 5천 토큰에 평균 2.5스텝으로 잡아, 한 번에 입력 1만 2,500토큰과 출력 750토큰으로 계산했습니다. 단발성 호출(요약·추출·생성)은 입력 2천에 출력 600, 이미지 인식은 입력 2천에 출력 300입니다. 하루 300회를 에이전트 40%, 단발 50%, 이미지 10%로 나눴고 환율은 1달러 1,400원으로 잡았습니다. 이미지를 못 읽는 모델도 같은 식으로 계산했으니, 그 모델들은 이미지 몫만큼 다른 모델 비용이 더 붙는다고 보면 됩니다.

계산 자체는 단순합니다. 입력과 출력 단가가 다르다는 것만 놓치지 않으면 됩니다.

// 100만 토큰당 달러
const PRICE = {
  "gemini-2.5-flash-lite": { in: 0.1, out: 0.4 },
  "gpt-oss-120b": { in: 0.15, out: 0.6 },
  "claude-haiku-4-5": { in: 1.0, out: 5.0 },
} as const;

function costUsd(model: keyof typeof PRICE, tokensIn: number, tokensOut: number) {
  const p = PRICE[model];
  return (tokensIn * p.in + tokensOut * p.out) / 1_000_000;
}

costUsd("claude-haiku-4-5", 12_500, 750); // 0.01625 (에이전트 1회)
costUsd("gemini-2.5-flash-lite", 12_500, 750); // 0.00155

에이전트 한 번에 출력은 750토큰뿐인데 입력이 1만 2,500토큰입니다. 출력 단가가 입력의 4~5배여도 비용의 대부분은 입력에서 나옵니다. 경량 모델끼리 비교할 때는 출력 단가보다 입력 단가를 먼저 보는 게 맞습니다.

모델 에이전트 1회 단발 1회 월 비용
Groq gpt-oss-20b $0.0012 $0.0003 약 8천 원
DeepSeek V4 Flash $0.0013 $0.0003 약 8천 원
Gemini 2.5 Flash-Lite $0.0015 $0.0004 약 1만 1천 원
Groq gpt-oss-120b $0.0023 $0.0007 약 1만 6천 원
GPT-5.4 nano $0.0034 $0.0011 약 2만 6천 원
Gemini 3.1 Flash-Lite $0.0043 $0.0014 약 3만 1천 원
Claude Haiku 4.5 $0.0163 $0.0050 약 11만 8천 원
Claude Sonnet 5.5 $0.0325 $0.0100 약 23만 6천 원

처음 예상보다 훨씬 쌌습니다. 경량 모델이면 한 달 테스트 비용이 커피 몇 잔 값입니다. 하루 300회는 개인 개발 기준으로 넉넉하게 잡은 숫자라, 실제로는 이보다 적게 나올 가능성이 큽니다.

표에서 눈여겨본 것은 에이전트 칸입니다. 모든 모델에서 에이전트 한 번이 단발 호출의 3~4배입니다. 툴 정의가 매 스텝 다시 들어가기 때문입니다. 지금 걸어 둔 유료 모델 상한은 하루 호출 200회인데, 이 방식은 에이전트 한 번과 분류 한 번을 똑같이 1회로 셉니다. 회귀 테스트를 반복문으로 돌리다 실수하면 상한보다 먼저 금액이 튈 수 있어서, 상한은 호출 수가 아니라 금액으로 거는 게 맞다고 봅니다.

// 호출 횟수 대신 오늘 쓴 금액으로 막는다
async function assertDailyBudget(estimatedUsd: number) {
  const spent = await sumTodayCostUsd(); // 실행 기록에 남긴 비용 합계
  if (spent + estimatedUsd > DAILY_BUDGET_USD) {
    throw new Error("오늘 테스트 예산을 다 썼습니다. 로컬 모델로 전환하세요.");
  }
}

호출 전에 예상 비용을 넣어 보고, 호출이 끝나면 실제 사용량(usage)으로 계산한 값을 기록에 남깁니다. 예상은 프롬프트 길이로 대충 잡아도 충분합니다. 상한의 목적은 정확한 정산이 아니라 반복문 실수를 하루 안에 멈추는 것이기 때문입니다.

가장 싼 후보를 바로 고르지 않은 이유

단가만 보면 Groq gpt-oss-20b와 DeepSeek V4 Flash가 이깁니다. 그런데 둘 다 바로 고르지 않았습니다.

테스트용 모델을 고를 때 제 기준은 "나중에 실제로 쓸 수 있는 모델인가"입니다. 테스트에서만 쓰고 실제로는 못 쓰는 모델로 프롬프트를 다듬으면, 로컬 모델에서 겪은 일을 한 번 더 겪게 됩니다. DeepSeek은 데이터가 중국 사업자를 거치는데, 고객 데이터를 다루는 기능에 그대로 가져가기 어려운 경로입니다. 그래서 단가 이득보다 이 감점이 크다고 판단했습니다.

Groq은 지난주에 툴 호출과 JSON 추출을 직접 확인했고, 응답이 0.4~0.7초라 테스트가 정말 빨리 끝납니다. 다만 gpt-oss 계열은 이미지를 못 읽어서 비전 테스트는 다른 곳으로 보내야 하고, 한국어 요약과 작문 품질은 아직 재지 않았습니다. 하나 더 있습니다. 9월 말에 Groq에서 기본으로 쓰던 llama-3.3-70b가 내려가면서 모델 목록이 비고 호출이 404로 죽은 일이 있었습니다. 클라우드 모델은 예고 없이 사라질 수 있다는 것을 이미 한 번 겪었습니다.

테스트에는 무료 등급이 맞는 Gemini

Gemini Flash-Lite 계열이 눈에 들어온 것은 텍스트와 비전을 한 모델로 처리하기 때문입니다. Groq에 비전만 Haiku로 따로 붙이는 조합을 프로바이더 하나로 줄일 수 있습니다. 구조화 출력도 스키마를 직접 넘기는 방식이라 추출 테스트에 잘 맞습니다.

결정적인 것은 무료 등급입니다. Flash와 Flash-Lite는 Google AI Studio에서 하루 최대 1,000회, 분당 5~15회까지 무료로 열려 있습니다(Gemini API 가격 정리). 서비스 트래픽이라면 분당 5~15회는 금방 닿는 한도지만, 혼자 돌리는 테스트에는 충분합니다. 무료 등급에 넣은 입력은 구글이 제품 개선에 쓸 수 있다는 조건이 붙는데, 테스트 입력은 대부분 제가 만든 가짜 데이터라 이 조건도 테스트에서는 걸리지 않습니다. 위 표의 월 1만~3만 원조차 0원이 될 수 있다는 뜻입니다.

걸리는 점은 연동 작업입니다. Groq과 Anthropic은 코드에 이미 길이 있지만, Gemini는 챗 경로에 프로바이더를 붙이고 추출 경로에 분기를 하나 더 만들어야 합니다. 모델 목록과 비용 단가표, 서버에서 모델이 사라졌는지 확인하는 검증도 같이 손봐야 합니다.

Gemini 구독으로 대신할 수 있을까?

조사하면서 같이 고민한 것이 하나 있습니다. 어차피 Gemini를 쓸 거라면, 개인용 연간 구독을 하면 테스트까지 해결되지 않을까 하는 생각이었습니다.

안 됩니다. 구독(Google AI Pro 같은 소비자 요금제)은 사람이 Gemini 앱과 웹에서 쓰는 상품이고, API 키는 들어 있지 않습니다. 코드에서 모델을 부르려면 AI Studio에서 따로 API 키를 발급받아야 하고 과금도 따로입니다. 구독 계정으로 로그인하는 CLI를 테스트 스크립트에 끼워 넣는 방법도 떠올릴 수는 있지만, 그러면 테스트가 실제 코드 경로(API 호출)를 지나지 않습니다. 무엇을 테스트하는지가 다시 흐려지는 셈이라 택하지 않았습니다.

비용으로 따져도 구독이 불리합니다. 월 3만 원 안팎의 정액보다 위 표의 경량 모델 종량제가 같거나 쌉니다. 앞에서 본 것처럼 테스트 정도는 무료 등급 안에서 끝날 가능성이 큽니다. 구독은 Gemini 앱 자체를 업무에 많이 쓸지로 따로 판단할 문제입니다.

지금 기울어 있는 조합과 아직 모르는 것

현재 기울어 있는 조합은 이렇습니다. 챗·에이전트·글쓰기·추출·비전 테스트는 Gemini Flash-Lite 계열 하나로 묶고, 빠른 분류와 임베딩은 로컬에 남깁니다. Groq gpt-oss-120b는 빠른 반복이 필요할 때의 대안으로, Claude Haiku는 품질 기준선으로 둡니다. 로컬 모델은 버리지 않습니다. 데이터가 밖으로 나가면 안 되는 경우를 위한 선택지로는 여전히 유효하기 때문입니다.

코드로 옮기면 역할별 기본값 표 한 장입니다. 기능 코드는 모델 이름을 모르고 역할만 묻게 해 두었기 때문에, 바꾸는 곳은 여기 한 군데입니다.

const ROLE_MODELS = {
  chat: { provider: "google", model: GEMINI_LITE },
  writing: { provider: "google", model: GEMINI_LITE },
  extract: { provider: "google", model: GEMINI_LITE },
  vision: { provider: "google", model: GEMINI_LITE },
  fast: { provider: "ollama", model: "exaone3.5:2.4b" }, // 이미 100%·1.1초
  embed: { provider: "ollama", model: "bge-m3" }, // 바꾸면 전부 재색인
} as const;

// 기능 코드는 이것만 부른다
const spec = resolveRoleSpec("extract");

이 구조 덕분에 같은 테스트 묶음을 모델만 바꿔 돌리는 비교도 표의 한 줄을 갈아 끼우는 일로 끝납니다.

이 조합은 아직 단가표 위의 결론입니다. 확인할 것이 셋 남아 있습니다. 첫째, 툴 15종을 붙인 에이전트 시험과 회의 요약, 추출 스키마, 명함 인식을 Gemini 두 종과 gpt-oss-120b, Haiku에 똑같이 돌려 봐야 합니다. 로컬 모델을 고를 때 썼던 시험을 그대로 씁니다. 둘째, 실행 기록에서 실제 하루 호출 수와 호출당 토큰을 재서 위 가정을 실측으로 바꿔야 합니다. 셋째, 작은 모델을 달래려고 쌓은 프롬프트를 큰 모델 기준으로 다시 봐야 합니다.

측정이 끝나면 이 표가 어디서 틀렸는지 다시 적겠습니다.

참고: Gemini API 가격(morphllm), Groq 가격(CloudZero), GPT-5.4 mini·nano 소개(OpenAI), Solar Pro 4(OpenRouter), LLM 가격 비교(BenchLM)

마지막 수정:

공유하실 때는 출처(Duolabs)와 원문 주소를 표시해 주세요.