← BLOGAI 산업

매 턴 바뀌는 건 마지막 한 줄인데, 당신은 프롬프트 전체를 다시 계산해 돈을 낸다 — 에이전트 원가의 진짜 다이얼은 캐시다

AI 원가를 줄이라는 조언은 늘 '더 싼 모델, 더 짧은 프롬프트'로 수렴한다. 그런데 에이전트 청구서의 대부분은 매 턴 똑같은 시스템 프롬프트·도구 정의·히스토리를 처음부터 다시 계산하는 데서 나온다. 프롬프트 캐싱이 그 90%를 깎는 원리와, 프리픽스가 한 바이트만 흔들려도 캐시가 조용히 깨져 제값을 다 물게 되는 함정을 짚는다.

비용을 줄이라는 조언은 늘 두 갈래로 수렴한다. “더 싼 모델로 갈아타라”, “프롬프트를 줄여라”. 그런데 에이전트를 실제로 굴려 본 사람은 안다. 청구서의 대부분은 답을 만드는 데가 아니라, 매 턴 똑같은 앞부분을 처음부터 다시 읽는 데서 나온다. 시스템 프롬프트, 도구 정의, 지금까지 쌓인 대화 — 수만 토큰짜리 이 덩어리는 턴마다 거의 그대로인데, 바뀌는 건 사용자가 방금 친 마지막 한 줄뿐이다. 그런데 값은 매번 처음부터 전부 문다. 원가를 실제로 꺾는 다이얼은 모델 선택이 아니라 여기, 캐시에 있다.

매 턴, 바뀐 건 끝 한 줄인데 값은 처음부터 낸다

LLM은 프롬프트를 받으면 모든 토큰을 한 번씩 훑어 내부 상태(KV 캐시)를 만든 뒤에야 답을 시작한다. 이 계산은 프롬프트 길이에 비례하고, 대화가 길어질수록 앞부분이 통째로 다시 계산된다. 10턴째 대화라면 1턴에서 이미 처리했던 시스템 프롬프트와 도구 설명서를 열 번째로 또 계산하고 있는 셈이다. 에이전트가 이 구조에 가장 크게 얻어맞는다. 도구 정의만 수천에서 수만 토큰, 거기에 누적된 히스토리가 붙으니, 실제로 ‘새로 생각하는’ 토큰보다 ‘다시 읽는’ 토큰이 훨씬 많다.

프롬프트 캐싱은 이 낭비를 정확히 겨눈다. 앞서 계산한 프리픽스의 내부 상태를 저장해 두고, 다음 요청이 같은 앞부분으로 시작하면 그 구간은 다시 계산하지 않고 꺼내 쓴다. Anthropic은 캐시에서 읽은 토큰을 기본 입력가의 0.1배, 즉 90% 할인으로 매긴다. Google Gemini도 2.5 계열의 명시적 캐시 히트에 **90%**를 깎고, DeepSeek은 캐시 히트 토큰을 미스의 수십 분의 1 수준으로 매긴다. OpenAI는 아예 자동으로 걸리며, 초기 50%였던 캐시 할인이 최신 GPT-5 계열에서는 **90%**까지 내려왔다.

90%를 깎지만, 프리픽스가 한 바이트만 흔들려도 0을 깎는다

여기가 대부분이 돈을 흘리는 지점이다. 캐시는 '프리픽스 매치’로만 작동한다. 저장된 것과 이번 요청이 앞에서부터 정확히 같은 구간까지만 재사용되고, 처음으로 달라지는 토큰이 나오는 순간 거기서부터 끝까지는 전부 새로 계산된다. 앞쪽에 조금이라도 바뀌는 값이 끼면, 뒤에 아무리 안정적인 내용이 있어도 캐시는 통째로 깨진다.

실전에서 이걸 깨뜨리는 것들은 하나같이 사소해 보인다. 시스템 프롬프트 맨 위에 박아 둔 현재 시각이나 요청 ID, 매번 순서가 바뀌는 도구 목록, 키 순서가 고정되지 않은 JSON 직렬화, 사용자마다 앞에 붙는 이름 한 줄. 이 중 하나만 프리픽스 앞쪽에 있으면 캐시 적중률은 0에 수렴한다. 더 나쁜 건 이때 에러가 나지 않는다는 점이다. 요청은 정상으로 성공하고 답도 멀쩡하게 나온다. 다만 90% 싸게 갈 수 있던 토큰을 매번 제값 주고 사고 있을 뿐이다. 청구서를 뜯어보기 전까지는 아무도 모른다.

규율은 하나 — 안 변하는 걸 앞으로

그래서 캐싱은 켜고 끄는 기능이 아니라 프롬프트를 짜는 순서의 문제다. 원칙은 단순하다. 절대 안 바뀌는 것을 앞에 놓고, 자주 바뀌는 것을 맨 뒤로 민다. 시스템 지침, 도구 정의, 장문의 참고 문서, 예시(few-shot)처럼 요청 사이에 똑같은 덩어리를 프리픽스로 고정하고, 사용자의 이번 입력처럼 매번 달라지는 것만 꼬리에 붙인다. 앞의 무거운 덩어리가 캐시에 걸려 있는 한, 대화가 길어져도 매 턴 새로 계산하는 건 마지막 수백 토큰뿐이다.

효과는 원가에서 끝나지 않는다. 다시 계산할 게 적으니 첫 토큰까지의 지연도 줄고, Anthropic 기준으로 캐시에서 읽은 토큰은 분당 입력 토큰 한도(rate limit)에 계산되지 않는다. 같은 계정으로 훨씬 높은 처리량을 밀어 넣을 수 있다는 뜻이다. 원가·속도·한도가 같은 레버 하나에 물려 있다.

캐시는 공짜가 아니다

단, 세 가지 함정이 있다. 첫째, 쓰기 프리미엄. Anthropic은 캐시에 처음 써 넣을 때 기본가의 1.25배(5분 유지)에서 2배(1시간 유지)를 받는다. 그래서 딱 한 번 쓰고 버릴 내용을 캐시하면 오히려 손해다 — 최소 한두 번은 다시 불려야 본전이다. 둘째, TTL. 캐시는 짧은 시간만 살아 있고(적중할 때마다 시계가 초기화된다) 놔두면 사라진다. 실제로 Anthropic은 2026년 3월 무렵 기본 TTL을 1시간에서 5분으로 별도 공지 없이 줄였고, 이걸 모르던 팀들의 적중률이 무너지며 요금이 튀었다. 셋째, 저장 비용. Gemini의 명시적 캐싱은 할인 대신 캐시를 유지하는 시간만큼 저장료를 따로 물린다 — 트래픽이 뜸하면 저장료가 절감분을 삼킨다.

모델을 바꾸기 전에 프리픽스를 봐라

"더 싼 모델로 내려가라"는 조언은 절반만 맞다. 캐시를 제대로 깐 강한 모델이, 캐시 없이 도는 싼 모델보다 원가에서도 품질에서도 이기는 구간이 넓다. 에이전트 원가의 진짜 다이얼은 어떤 모델을 부르느냐가 아니라, 안 변하는 것을 앞에 고정해 두 번 계산하지 않는 프롬프트 구조다. 청구서가 이상하게 크다면, 모델을 갈아타기 전에 프리픽스가 매 요청마다 그대로인지부터 봐야 한다.