본문 바로가기
프로젝트/AIKit

AIKit #7 - AI API 비용 90% 줄이기

by 루까(Luka) 2026. 2. 9.
반응형

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
Google Gemini 1.5 Flash $0.075 $0.30
Google 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

반응형