Claude Opus 4.1 캐시 기능으로 API 비용 90% 절감하기
지난 시간에는 철학적은 방향으로 클로드 프롬프트 캐싱을 말씀드렸습니다.
그래서 오늘은 그걸 어떻게 해야 하는지를 아래와 같이 정리해서 공유드립니다.
Claude를 처음 사용하는 개발자라면, 가장 먼저 마주하게 되는 문제 중 하나는 프롬프트의 반복적 사용입니다. 예를 들어, 시스템 메시지에 동일한 지시문을 포함시키고, 거기에 다양한 질문을 덧붙이는 구조를 자주 사용하게 됩니다. 이런 경우, 동일한 내용을 매번 다시 보내고 처리하는 것은 비효율적이며 비용 또한 증가합니다. Prompt Caching(프롬프트 캐싱)은 이 문제를 해결하기 위한 기능으로, 고정된 내용을 한 번만 처리하고 나중 요청에서는 캐시된 결과를 재활용할 수 있도록 설계된 시스템입니다.
이 기능의 핵심은 프롬프트에서 변하지 않는 부분을 명확히 구분하고, 해당 영역을
cache_control
파라미터를 통해 캐시에 저장
하는 데 있습니다. 예를 들어, 아래와 같은 시스템 메시지를 반복 사용하는 상황을 생각해봅시다.
"system": [
{
"type": "text",
"text": "당신은 셰익스피어 작품을 해석하는 문학 AI입니다.",
"cache_control": {"type": "ephemeral", "ttl": "1h"}
},
{
"type": "text",
"text": "<햄릿 전체 대사>"
}
]
이때 질문 메시지는 다음과 같이 다양하게 구성될 수 있습니다:
"messages": [
{
"role": "user",
"content": "햄릿의 주제는 무엇인가요?"
}
]
이 구조를 활용하면, 이후 질문만 바꾸는 요청에서도 Claude는 앞의 시스템 메시지를 다시 처리하지 않고, 캐시된 내용을 바탕으로 빠르게 응답하게 됩니다.
기본 개념을 이해했다면, 이제 시간 설정(TTL: Time To Live)과 비용 구조를 이해해야 캐시를 제대로 활용할 수 있습니다. 캐시는 기본적으로 5분 동안 유지되며, 필요하다면 1시간까지 연장할 수 있습니다. 이를 위해
"ttl": "1h" 옵션을 cache_control 에 추가하면 됩니다.
이 설정은 매우 중요합니다. 예를 들어, 여러분이 웹 애플리케이션에서 하루에 수백 명의 사용자가 동일한 문서에 대해 질문을 던지는 시스템을 운영한다고 가정합시다. 이때 매번 동일한 문서를 재처리하지 않고 캐시를 유지함으로써 입력 토큰 비용의 90%까지 절감할 수 있습니다. 캐시된 구간은 읽을 때는 단 10%의 비용만 청구되며, 다시 쓰지 않는 한 별도 요금 없이 계속 활용할 수 있습니다.
비용 구조를 예로 들어 보면 이렇습니다. Claude Opus 4.1 기준으로:
일반 입력 토큰: $15/1M tokens
캐시 쓰기 (5분): $18.75/1M
캐시 쓰기 (1시간): $30/1M
캐시 읽기: $1.50/1M
즉, 캐시를 적절히 활용하면 많은 양의 텍스트를 반복적으로 사용할 때 속도와 비용 모두 최적화할 수 있게 됩니다. 특히 큰 문서나 복잡한 툴 설정이 필요한 에이전트 시스템에서는 매우 강력한 전략이 됩니다.
Prompt Caching을 완전히 이해하고 나면, 실제 서비스 환경에서는 더 정교한 사용법이 요구됩니다. 특히, 다양한 구성 요소가 서로 다른 빈도로 갱신될 때는 여러 개의
cache_control
포인트를 설정
하여 각기 다른 영역을 분리 캐시하는 전략이 필요합니다.
예를 들어, 다음과 같은 구성의 프롬프트를 생각해봅시다:
툴 정의 – 거의 변하지 않음
시스템 역할 지시 – 가끔 바뀜
대화 문맥 – 자주 변경됨
이 경우, 툴 정의 부분은 1시간 TTL로 길게 유지하고, 시스템 지시문은 5분 TTL로 짧게 유지할 수 있습니다. 이렇게 하면 전체 프롬프트가 변할 때마다 모든 것을 다시 캐시하는 것이 아니라, 변경된 부분만 갱신하고 나머지는 그대로 재활용할 수 있게 됩니다.
"tools": [
{
"name": "summarize",
"description": "문서를 요약하는 도구입니다.",
"cache_control": {"type": "ephemeral", "ttl": "1h"}
}
],
"system": [
{
"text": "당신은 요약 전문 AI입니다.",
"cache_control": {"type": "ephemeral", "ttl": "5m"}
}
],
"messages": [
{
"role": "user",
"content": "이 문서를 요약해줘: <본문>"
}
]
이렇게 다층적 캐시 전략을 적용하면, 시스템 전반의 요청 처리 속도는 비약적으로 빨라지며, 반복되는 연산의 중복을 최소화할 수 있습니다.
또 한 가지 유의할 점은 캐시가 깨지는 조건입니다. Claude는 툴, 시스템, 메시지의 구조를 엄격하게 판단하기 때문에, 예를 들어 툴 정의에 작은 수정이 들어가도 전체 캐시가 무효화될 수 있습니다. 따라서 변경이 적은 부분은 반드시 상단에 배치하고, 캐시 지점도 명확히 지정해야 기대하는 효과를 얻을 수 있습니다.
Prompt Caching은 단순한 성능 최적화를 넘어, 대규모 사용자 대응, 고정형 문서 기반 응답, 복잡한 멀티턴 대화 시스템에 이르기까지 Claude API를 비용 효율적이면서도 강력하게 확장할 수 있는 핵심 기능입니다.
단 몇 줄의 설정만으로도 큰 비용 절감과 빠른 응답 속도를 얻을 수 있으므로, 실제 서비스를 운영하거나 대화형 에이전트를 설계하는 모든 개발자에게 필수적으로 익혀야 할 기능이라 할 수 있습니다.