모든 챗봇 튜토리얼은 같은 방식으로 시작합니다. 바로 시스템 프롬프트를 작성하는 것입니다. 그래서 당신도 하나를 작성하죠. 그러다가 팀원이 어조에 대한 단락을 추가하고, 누군가는 회사 역사를 붙여넣고, 세 달 후에는 그 프롬프트가 마치 README 파일처럼 읽히게 됩니다.
아무도 이 README 파일의 비용을 책정하지 않습니다. 왜냐하면 이것은 항목별로 표시되는 경우가 없기 때문입니다. 하지만 그것은 매번 호출될 때마다 입력 토큰(input tokens)으로, 영원히 청구됩니다.
먼저 두 단어부터 알아봅시다. **토큰(token)**이란 영어 단어의 약 ¾ 정도이며, API는 이를 백만 단위로 과금합니다. **시스템 프롬프트(system prompt)**는 사용자 메시지보다 먼저 보내는 지침 블록(instruction block)입니다. 그리고 API는 상태를 기억하지 못하는(stateless) 방식이므로, 호출 간에 이 내용을 기억하지 못합니다. 따라서 요청할 때마다 다시 보내야 하고, 매번 요청할 때마다 비용을 지불해야 합니다.
실제 트래픽의 모습
산술 계산에 앞서, 저희 게이트웨이에서 얻은 배경 정보를 공유하겠습니다. 2026년 7월 18일부터 10월 15일까지 16개 고객 계정으로부터 발생한 5,546건의 성공적인 채팅 호출을 분석한 결과, 중간 요청(median request)당 1,280개의 입력 토큰이 사용되었고 108개의 출력 토큰이 반환되었습니다. 요청 크기는 답변보다 약 12배나 크며, 일반적인 챗봇의 경우 이 입력 토큰 중 대부분은 반복적으로 전송되는 동일한 고정 지침 텍스트입니다. 이것이 바로 청구서에 나타나는 시스템 프롬프트의 모습입니다.
일반적인 프롬프트 계산하기
저는 가상의 전자제품 매장을 위한 현실적인 지원 봇(support-bot) 프롬프트를 작성해 보았습니다. 역할, 반품 정책, 답변 형식, 에스컬레이션 규칙, 네 개의 퓨샷 예시(few-shot examples) (모델에게 예상되는 스타일을 보여주는 샘플 대화), 그리고 오늘 날짜가 적힌 줄로 구성했습니다. 그런 다음 tiktoken과 현재 GPT 모델의 기반 토크나이저인 o200k_base를 사용하여 계산해 보았습니다.
import glob, tiktoken # pip install tiktoken
enc = tiktoken.get_encoding(
전체 프롬프트는 총 946 토큰이었습니다. 정책(policies)에 234토큰, 예시(examples)에 192토큰, 답변 형식(answer format)에 127토큰을 사용했습니다. 그리고 한 단락은 97토큰을 차지했습니다: "당신은 도움이 되고 친절하며 전문적인 어시스턴트임을 기억하세요. 항상 정확하고 완전하며 잘 구조화된 답변을 제공하기 위해 최선을 다하세요..." — 이는 모든 현대 모델이 기본적으로 수행하는, 여든한 단어의 내용입니다.
### 한 단락의 가격
공식 입력 가격(2026년 10월 기준)에 따라, 이 97토큰이 하루에 얼마나 많은 호출을 하느냐에 따라 연간 얼마가 드는지 보여드립니다. 모델별로 다릅니다:
| 모델 (입력 $/1M) | 일일 1K 호출 | 일일 10K 호출 | 일일 100K 호출 |
| :--- | :--- | :--- |
| Gemini 3.1 Flash Lite ($0.25) | $9 | $89 | $885 |
| ... |
공식은 한 줄입니다: `토큰 수 × 일일 호출 횟수 × 365 / 1,000,000 × 입력 가격`. 저렴한 모델에서는 이 단락이 무시해도 될 오차(rounding error) 수준입니다. 중간급 모델을 적당한 트래픽으로 사용할 경우, 사용하지 않는 것에 대한 월간 구독료가 됩니다. 대규모로 사용하는 플래그십 모델의 경우, 이는 급여와 같습니다.
"하지만 입력은 싸고, 출력이 비싼 부분이다." 토큰 단위로는 그렇습니다. 하지만 요청(request) 단위로는 그렇지 않습니다. 1,280토큰의 요청과 108토큰의 답변을 가정할 때, 출력 비용이 다섯 배나 더 들더라도 입력이 더 큰 비중을 차지합니다.
### 프롬프트 감사: 잘라내고, 캐싱하기
프롬프트 섹션을 하나하나 살펴보면서 하나의 질문을 던지세요. 이 부분이 사라진다면 답변이 달라질까요?
모델이 어차피 하거나 절대 사용하지 않는 부분은 **잘라내세요(Cut)**. 제 예시에서 이는 "도움이 되라"는 단락(97토큰), 회사 역사 및 미션 선언문(106토큰 — 봇이 환불 처리를 위해 설립 연도를 알 필요가 없습니다), 그리고 형식 섹션에서 반복된 두 가지 규칙(23토큰)입니다. 총합은 226토큰으로, 프롬프트의 24%를 차지하며, 일일 10K 호출을 하는 Sonnet 5.5 모델 기준으로 연간 약 $1,650에 달합니다. 평가 세트(eval set)를 잘라낸 후 실행해 보세요. 품질이 유지된다면, 그 토큰들은 장식품에 불과했습니다.
**캐시(Cache)**는 길고 안정적인 것을 의미합니다. **프롬프트 캐싱(Prompt caching)**이란 제공업체가 요청의 시작 부분을 유지하고, 반복되는 읽기에 대해 일반 입력 가격보다 훨씬 적은 비용을 청구하는 것입니다. 문제는 다음과 같습니다. 오직 바이트 단위로 완전히 동일한 접두사에서만 작동한다는 것입니다. 제 원래 프롬프트에는 상단에 오늘 날짜와 고객 이름이 있었는데, 이 중 한 줄이라도 바뀌면 전체 프롬프트가 캐싱 불가능해집니다. 동적인 내용은 모두 끝으로 옮기세요:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
messages = [
{"role": "system", "content": ROLE + POLICIES + FORMAT + EXAMPLES}, # 절대 변하지 않는 부분
{"role": "system", "content": f"Today: {today}. Customer: {name}."}, # 변경되는 부분
...
자르기(Cutting)와 캐싱은 대안이 아닙니다. 먼저 자르세요. 왜냐하면 삭제한 토큰은 비용이 들지 않지만, 캐시된 토큰은 호출할 때마다 여전히 비용이 들고, 캐시가 만료되면 전체 가격을 지불해야 하기 때문입니다.
### 이것이 해결하지 못하는 것들
캐싱에는 손익분기점(break-even point)이 있습니다. 쓰기(writes) 비용이 일반 입력보다 더 많이 들 수 있으므로, 적은 캐시 적중률(hit rate)에서는 청구서가 높아질 수 있습니다. 일부 제공업체는 또한 최소 길이 이상의 접두사만 캐싱한다는 점도 확인하세요. 의존하기 전에 문서를 확인해야 합니다. 제 토큰 수는 OpenAI의 토크나이저를 기반으로 한 것입니다. Anthropic과 Google은 텍스트를 다르게 분할하므로, 숫자가 몇 퍼센트 정도 달라지는 것을 예상해야 합니다. 그리고 저희 자체 사용 기록에는 아직 캐시된 토큰을 분리하여 보여주지 못했기 때문에, 실제 캐시 적중률을 트래픽에서 보여드릴 수 없습니다.
위의 가격들은 공급업체의 공식 가격입니다. 저희는 그 아래에서 동일한 모델들을 재판매합니다. 예를 들어, 공식 $2.00 대비 Claude Sonnet 5.5를 입력 토큰당 $1.70에 제공하여, $708짜리 단락을 $602까지 낮춥니다. 이것은 고정된 비율의 할인일 뿐이며, 그 단락 자체를 제거하는 것은 아닙니다. 필요하지 않은 토큰에 대한 할인은 여전히 필요하지 않은 토큰 비용을 지불하고 있는 것입니다.
시스템 프롬프트를 열고 위의 스크립트를 실행하여 가장 비싼 단락을 찾으세요. 아마도 아무도 작성한 것을 기억하지 못하는 부분일 겁니다.