반응형
AIKit — 비용 최적화 전략
AI API는 비싸다
2026년 1월 기준 주요 프로바이더 가격표:
| 프로바이더 | 모델 | 입력 (1M 토큰) | 출력 (1M 토큰) |
|---|---|---|---|
| OpenAI | GPT-4o | $2.50 | $10.00 |
| OpenAI | GPT-4o-mini | $0.15 | $0.60 |
| Anthropic | Claude 3.5 Sonnet | $3.00 | $15.00 |
| Anthropic | Claude Opus 4.5 | $5.00 | $25.00 |
| Gemini 1.5 Flash | $0.075 | $0.30 | |
| Gemini 1.5 Pro | $1.25 | $5.00 |
출력 토큰 기준으로 가장 비싼 모델과 가장 싼 모델의 차이가 83배다.
전략 1: 캐싱 (30~50% 절감)
같은 질문에 같은 답을 두 번 받을 필요 없다.
const ai = new AIKit({
provider: 'openai',
apiKey: 'sk-...',
enableCache: true // ← 이것만 켜면 됨
});
// 첫 번째 호출: API 요청 발생
const res1 = await ai.chat('한국의 수도는?');
console.log(res1.fromCache); // false
// 두 번째 호출: 캐시에서 즉시 반환
const res2 = await ai.chat('한국의 수도는?');
console.log(res2.fromCache); // true → 비용 $0
AIKit의 CacheManager는 LocalStorage 기반으로, TTL 1시간, 최대 50개 항목을 유지한다.
전략 2: 토큰 제한 (20~30% 절감)
maxTokens를 설정하지 않으면 모델이 알아서 길게 답변한다. 비용의 대부분은 출력 토큰이다.
// Before — 제한 없음 (평균 800 토큰 응답)
const response = await ai.chat('JavaScript란?');
// After — 200 토큰으로 제한
const response = await ai.chat('JavaScript란?', {
maxTokens: 200 // 간결한 답변 강제
});
전략 3: 모델 선택 (50~80% 절감)
모든 작업에 최고 모델을 쓸 필요 없다.
| 작업 | 권장 모델 | 비용 수준 |
|---|---|---|
| 단순 분류/요약 | GPT-4o-mini / Gemini Flash | 최저 |
| 일반 대화 | GPT-4o / Claude Sonnet | 중간 |
| 복잡한 추론 | Claude Opus / GPT-4o | 최고 |
// 간단한 작업 → 싼 모델
const simple = await ai.chat('이 문장의 감정을 분석해: 좋아요', {
model: 'gpt-4o-mini'
});
// 복잡한 작업 → 좋은 모델
ai.updateConfig({ provider: 'claude' });
const complex = await ai.chat('이 코드의 보안 취약점을 분석해줘: ...');
전략 4: 대화 이력 관리 (10~20% 절감)
대화가 길어질수록 매 요청에 전체 이력이 포함된다. 20턴 대화의 이력을 매번 보내면 입력 토큰이 폭증한다.
// 최근 10개 메시지만 유지
const response = await ai.chat(message, {
messages: history.slice(-10)
});
전략 5: 프롬프트 최적화 (15~25% 절감)
// Before — 장황한 프롬프트 (45 토큰)
const response = await ai.chat(
'다음 텍스트에 대해서 감정 분석을 수행해주세요. ' +
'긍정, 부정, 중립 중 하나로 분류하고 그 이유도 설명해주세요: ' +
text
);
// After — 간결한 프롬프트 (12 토큰)
const response = await ai.chat(
`감정분석(긍정/부정/중립): ${text}`
);
전략 6: 비용 모니터링
const report = ai.getCostReport();
console.log(report);
// {
// totalUSD: '$0.0234',
// byProvider: { openai: '$0.0180', claude: '$0.0054' },
// byModel: { 'gpt-4o-mini': '$0.0120', 'gpt-4o': '$0.0060' },
// totalRequests: 15,
// averageCostPerRequest: '$0.001560',
// dailyAverage: '$0.0234'
// }
CostTracker는 프로바이더별, 모델별로 비용을 추적한다. 어디서 돈이 가장 많이 나가는지 한눈에 파악할 수 있다.
실전 Before/After
| 항목 | Before | After | 절감율 |
|---|---|---|---|
| 모델 | Claude Opus 4.5 | Gemini 1.5 Flash | -95% |
| 캐싱 | 미적용 | 적용 (hit rate 40%) | -40% |
| 토큰 제한 | 없음 | 200 토큰 | -60% |
| 이력 관리 | 전체 전송 | 최근 10개 | -30% |
| 월 비용 | $82.50 | ~$1.20 | -98.5% |
삽질 기록
캐시 적중률 확인
캐시를 켜놓고 "잘 되겠지"라고 방치했는데, 실제 적중률이 5%였다. 원인은 프롬프트에 timestamp를 넣고 있어서 매번 다른 캐시 키가 생성되고 있었다.
// Before — timestamp 포함 → 캐시 키가 매번 다름
ai.chat(`현재 시각 ${Date.now()} 기준으로 날씨 알려줘`);
// After — 고정 키
ai.chat('서울 날씨 알려줘');
모델 선택 자동화 미구현
"간단한 질문은 자동으로 싼 모델로"라는 기능을 만들려다가 포기했다. 질문의 복잡도를 판단하는 것 자체가 AI를 호출해야 하는 문제가 있다. 현재는 사용자가 직접 모델을 선택하는 방식을 유지하고 있다.
마무리
비용 최적화는 기술이 아니라 습관이다. 캐싱 켜기, 토큰 제한하기, 적절한 모델 선택하기. 이 3가지만 지켜도 비용의 80% 이상을 줄일 수 있다.
다음 편(마지막)에서는 AIKit 프로젝트 전체 회고를 다룬다.
기술 스택: AIKit, CostTracker, CacheManager
소스 코드: GitHub
반응형
'프로젝트 > AIKit' 카테고리의 다른 글
| AIKit #8 - 사이드 프로젝트 개발 회고 (1) | 2026.02.09 |
|---|---|
| AIKit #6 - React & Vue에서 AIKit 사용하기 (0) | 2026.02.08 |
| AIKit #5 - PHP 프로젝트에서 AIKit 연동하기 (0) | 2026.02.08 |
| AIKit #4 - 5분 만에 AI 챗봇 만들기 (0) | 2026.02.07 |
| AIKit #3 - QA 개발자가 만든 AI 라이브러리 (0) | 2026.02.07 |