부록 F. Claude Opus 4.7 1M 컨텍스트 활용
Claude Opus 4.7의 1,000,000 토큰 컨텍스트(약 2,500 A4 페이지)는 RAG를 건너뛰어 전체 문서를 통째로 주입할 수 있게 해줍니다. 언제 쓰면 이득이고 언제 RAG가 낫지, 비용은 어떻게 관리할지를 정리했습니다.
F.1 1M 컨텍스트가 여는 새로운 패턴
- 수백 페이지 RFP·계약서 전체 분석을 한 번에
- 20만 줄 레거시 코드베이스 아키텍처 질문에 파일 전체 투입
- 분기 전체 회의록·Slack 로그에서 의사결정 흐름 추적
- RAG 인덱싱 비용·복잡도를 제거하고 바로 질답
F.2 1M 컨텍스트 vs RAG — 선택 기준
| 기준 | 1M 컨텍스트 유리 | RAG 유리 |
|---|---|---|
| 문서 총량 | ~1M 토큰 (~2,500페이지) | 수천만 토큰 이상 |
| 호출 빈도 | 하루 수십 건 이하 | 초당 수 건 이상 |
| 질문 다양성 | 문서 전반을 가로지르는 분석 | 국소적 검색 |
| 지연시간 | 10~40초 허용 | 1~3초 필요 |
| 문서 업데이트 | 드문 변경 | 잦은 변경 |
| 비용 | 프롬프트 캐싱으로 최적화 | 임베딩 + vector DB |
하이브리드가 정답: 자주 바뀌는 부분은 RAG, 안 바뀌는 핵심 문서(계약서, 스타일 가이드)는 컨텍스트에 고정 + 프롬프트 캐싱.
F.3 비용 계산 — 프롬프트 캐싱이 열쇠
Opus 4.7 기준(2026-04):
- 입력: $5 / 1M tokens
- 출력: $25 / 1M tokens
- 캐시 쓰기: $6.25 / 1M (+25%)
- 캐시 읽기: $0.50 / 1M (−90%)
예: 500페이지(500k 토큰) 문서에 하루 50건 질문
캐싱 없음: 500k × $5 × 50 = $125/일 (문서 입력만)
캐싱 있음: 500k × $6.25 × 1 = $3.13 (첫 호출 캐시 쓰기)
+ 500k × $0.50 × 49 = $12.25 (이후 캐시 읽기)
= 약 $15.4/일 (88% 절감)
캐시 TTL은 5분 기본, 1시간 옵션 존재. 호출 간격이 길면 주기적 keep-alive 호출로 캐시 유지.
F.4 1M 프롬프트 설계 체크리스트
- 불변 부분을 앞에
시스템 규칙 → Few-shot → 대형 문서 → 사용자 질문 순서. 앞쪽일수록 캐시 효율 상승.
- 섹션 태그
XML 태그(<contract>, <runbook>)로 구획해 모델이 섹션을 정확히 참조하게 함.
- 목차(TOC) 삽입
본문 앞에 "이 문서는 다음 섹션을 포함: 1. 정의, 2. 책임..." 목록. 모델의 탐색 정확도가 오름.
- 인용 요구
"각 주장 옆에 [섹션번호]를 붙여라" — hallucination 억제 + 사후 검증 용이.
- Needle-in-a-haystack 체크
중간에 의도적으로 작은 플래그("
※2026-04-17 업데이트")를 심어 두고, 매 호출 시 "이 플래그가 있으면 문구 X를 출력하라"로 장거리 주의 검증.
F.5 대규모 문서 분석 워크플로
1. 문서 전처리 (PDF → Markdown, 헤더 정규화, 페이지 번호 유지)
2. 메타 요약: 1M 전체에 "200단어 executive summary + 섹션 목록" 요청 → 캐시
3. 세부 분석: 같은 캐시 위에서 "섹션 3.2의 리스크 요인을 표로" 등 질문
4. 대조: 이전 버전 문서와 diff → "변경된 조항 10개를 법적 영향과 함께 정리"
5. 확증: 모든 결론에 근거 섹션 번호 부착, 사람이 최종 확인
F.6 한계와 함정
- 장거리 recall은 완벽하지 않음: Needle test 정확도 95%+지만 5% 미스 존재 → 중요 사실은 상단/하단 위치에 중복 배치
- 비용 폭주: 캐싱 미설정 시 대규모 문서 × 높은 호출 빈도는 순식간에 수천 달러
- 지연시간: 1M 토큰 처리는 첫 응답 토큰까지 30~60초 가능. UX 설계에 "분석 중" 표시 필수
- 데이터 주권: 1M 주입은 곧 많은 내부 정보 전송. DPA·국외 이전 동의 재확인(부록 B)
F.7 미니 실습 — 계약서 질의응답 봇
from anthropic import Anthropic
client = Anthropic()
CONTRACT = open("master_agreement.md").read() # ~300k tokens
def ask(question: str):
resp = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
system=[
{"type": "text",
"text": "너는 한국 기업 법무 어시스턴트다. 근거 없는 해석은 금지.",
"cache_control": {"type": "ephemeral"}},
{"type": "text",
"text": f"<contract>\n{CONTRACT}\n</contract>",
"cache_control": {"type": "ephemeral"}},
],
messages=[{"role": "user", "content": question}],
)
return resp.content[0].text
print(ask("21조 손해배상 한도와 그 적용 예외를 요약해줘. 조항 번호를 근거로 붙여줘."))
같은 프로세스가 살아있는 동안 후속 질문은 캐시 읽기 가격만 지불합니다.
F.8 참고
- Anthropic 1M context 공식 안내 — docs.claude.com/context-windows
- Prompt caching — docs.claude.com/prompt-caching
- 관련: 1.6 RAG, #22 캐싱 친화 설계