긴 문서 어떻게 잘라야 싼가 — 분할 전략별 총비용 실측
긴 문서가 컨텍스트 한도를 넘으면 잘라서 넣어야 합니다. 그런데 어떻게 자르느냐에 따라 총비용이 1.5배까지 차이납니다.
고정 길이로 자를지 문단 단위로 자를지, 겹침을 둘지, 조각마다 설명을 붙일지 — 각각의 비용을 직접 측정했습니다. 결론은 의외로 단순했습니다.
결론부터
| 전략 | 총 토큰 | 최소 대비 |
|---|---|---|
| 문단 단위로 자르기 | 455 | 100% |
| 300자 고정, 겹침 없음 | 458 | 101% |
| 문단 단위 + 짧은 헤더 | 485 | 107% |
| 300자 고정, 20% 겹침 | 552 | 121% |
| 300자 + 긴 헤더 + 20% 겹침 | 675 | 148% |
문단 경계로 자르는 것이 가장 쌉니다. 그런데 이유가 재미있습니다. 싸기 때문에 좋은 게 아니라, 겹침이 필요 없어지기 때문입니다.
겹침(overlap)이 비용의 주범
고정 길이로 자르면 문장이 중간에서 끊깁니다. 그래서 보통 앞뒤를 조금씩 겹쳐서 의미가 끊기지 않게 합니다. 이 겹침이 그대로 비용이 됩니다.
| 분할 방식 | 조각 수 | 총 토큰 | 원문 대비 |
|---|---|---|---|
| 300자, 겹침 없음 | 3 | 458 | 1.01배 |
| 300자, 10% 겹침 | 4 | 503 | 1.11배 |
| 300자, 20% 겹침 | 4 | 552 | 1.21배 |
| 300자, 30% 겹침 | 4 | 601 | 1.32배 |
30% 겹침이면 원문의 3분의 1을 추가로 내는 셈입니다. 문서가 100조각이면 그 비용이 그대로 100배가 됩니다.
그런데 문단 단위로 자르면
문단은 이미 의미가 완결된 단위입니다. 그래서 겹침 없이 잘라도 내용이 끊기지 않습니다. 측정 결과 문단 단위 분할은 원문과 정확히 같은 455토큰이었습니다. 추가 비용이 0입니다.
겹침은 잘못된 위치에서 자른 것을 보상하는 비용입니다. 애초에 옳은 위치에서 자르면 낼 필요가 없습니다.
조각 크기는 비용에 거의 영향이 없다
의외의 결과입니다. 조각을 잘게 쪼개든 크게 쪼개든 총 토큰은 거의 같습니다.
| 조각 크기 | 조각 수 | 총 토큰 |
|---|---|---|
| 150자 | 6개 | 460 |
| 300자 | 3개 | 458 |
| 600자 | 2개 | 457 |
겹침이 없다면 조각 크기는 비용 관점에서 고민할 필요가 없습니다. 답변 품질과 관리 편의만 보고 정하면 됩니다.
조각마다 붙이는 설명의 비용
“이것은 전체 문서 중 3번째 조각입니다” 같은 안내를 붙이면 AI가 맥락을 이해하는 데 도움이 됩니다. 그런데 이 안내가 모든 조각에 반복되므로 비용이 누적됩니다.
| 헤더 | 헤더 토큰 | 6조각 총합 | 원문 대비 |
|---|---|---|---|
| 없음 | 0 | 455 | 1.00배 |
[3/6] | 5 | 485 | 1.07배 |
[문서: AI 도입 보고서 / 3번째 조각 중 6개] | 20 | 575 | 1.26배 |
| 문장형 긴 설명 | 31 | 641 | 1.41배 |
조각이 많아지면 심각해집니다
| 조각 수 | 헤더만 차지하는 토큰 |
|---|---|
| 5조각 | 90 |
| 10조각 | 180 |
| 50조각 | 900 |
| 200조각 | 3,600 |
조각당 18토큰짜리 헤더도 200조각이면 3,600토큰입니다. 헤더는 짧을수록 좋습니다. [3/6] 정도면 충분히 맥락이 전달되고 5토큰밖에 들지 않습니다.
실전 권장안
| 상황 | 권장 | 이유 |
|---|---|---|
| 일반 문서 (보고서·기사·매뉴얼) | 문단 단위, 겹침 없음, [n/N] 헤더 | 가장 저렴하고 의미도 보존 |
| 장·절 구조가 있는 문서 | 소제목 단위로 자르기 | 자연스러운 경계 |
| 표·데이터 | 행 단위 + 헤더 1회만 | 표는 CSV로 변환 권장 |
| 코드 | 함수·클래스 단위 | 구조가 이미 경계를 제공 |
| 구조가 없는 긴 글 | 고정 길이 + 10% 겹침 | 겹침은 최소로 |
자를 때 지킬 것
- 의미 단위(문단·소제목)를 먼저 찾으세요. 겹침 비용이 사라집니다.
- 헤더는
[3/6]수준으로 짧게. 긴 설명은 조각 수만큼 곱해집니다. - 필요 없는 부분은 자르기 전에 삭제하세요. 목차·표지·반복 머리말은 대개 불필요합니다.
- 조각 크기로 고민하지 마세요. 비용에는 거의 영향이 없습니다.
그리고 한 가지 더 — 조각을 여러 턴에 나눠 넣지 마세요. 대화는 매 턴 이전 내용을 다시 전송하므로, 조각을 하나씩 넣으며 대화하면 앞 조각들이 계속 재전송됩니다. 가능하면 한 번에 넣고 질문도 한 번에 모아서 하세요.
재현 코드
import tiktoken
enc = tiktoken.get_encoding("o200k_base")
n = lambda t: len(enc.encode(t))
doc = open("문서.txt", encoding="utf-8").read()
def fixed(t, size, overlap=0):
out, i, step = [], 0, size - overlap
while i < len(t):
out.append(t[i:i+size])
if i + size >= len(t): break
i += step
return out
paras = [p for p in doc.split("\n\n") if p.strip()]
print("원문 ", n(doc))
print("문단 단위 ", sum(n(p) for p in paras))
print("300자 겹침없음", sum(n(c) for c in fixed(doc, 300, 0)))
print("300자 20%겹침 ", sum(n(c) for c in fixed(doc, 300, 60)))
print("문단+[n/N] ", sum(n(f"[{i+1}/{len(paras)}]\n" + p)
for i, p in enumerate(paras)))한계: 이 측정은 토큰 비용만 비교한 것입니다. 겹침을 두면 검색 정확도가 올라가는 경우가 있어, 검색 기반 시스템(RAG)에서는 비용을 더 내고 겹침을 두는 것이 합리적일 수 있습니다. 여기서 말하는 것은 문서를 직접 붙여 넣어 읽히는 상황입니다.
정리
- 분할 전략에 따라 총비용이 1.5배까지 차이 납니다.
- 문단 경계로 자르면 겹침이 필요 없어 추가 비용이 0입니다.
- 겹침은 20%면 1.21배, 30%면 1.32배 — 잘못 자른 것을 보상하는 비용입니다.
- 조각 크기는 비용에 거의 영향이 없습니다. 품질 기준으로 정하세요.
- 헤더는
[3/6]수준으로 짧게. 200조각이면 긴 헤더만 3,600토큰입니다.
측정일: 2026년 9월 21일 / tiktoken 0.14.0 / 인코딩 o200k_base