에이전트 메모리 누수 잡기 — 컨텍스트 윈도우 슬라이딩·요약·중요도 프루닝 비교
에이전트를 며칠만 띄워두면 청구서가 달라붙는다. 원인은 단순하다. 매 턴마다 이전 대화 전체를 다시 보낸다. ReAct 루프 10바퀴면 단일 호출 대비 55배 토큰, 55배 비용이 청구된다(클로드 소넷 5 기준, 2026-09-23 실측). 200K 컨텍스트는 16K 대비 16배 비싸다. 이게 '메모리 누수'다 — 메모리가 새는 게 아니라, 불필요한 컨텍스트가 누적돼 지갑이 샌다.
이 글은 사이트 내 세 편의 실측 글을 교차 검증해, 슬라이딩·요약·중요도 프루닝 세 가지 누수 차단 전략을 수치로 비교한다.
1. 누수의 정체: 컨텍스트가 눈덩이처럼 불어나는 이유
| 단계 | 누적 토큰 (소넷 5, 시스템 2K) | 증가분 | 비고 |
|---|---|---|---|
| 1 | 888 | — | 시스템 프롬프트만 |
| 2 | 3,400 | +2,512 | 도구 결과 1,500 포함 |
| 3 | 8,900 | +5,500 | 파일 읽기 2,500 |
| 4 | 14,200 | +5,300 | 파일 읽기 2,000 |
| 5 | 18,900 | +4,700 | 검색+읽기 2,400 |
| 10 | 54,200 | — | 10바퀴 합계 472,500 토큰 |
단일 호출 9K → 10바퀴 472K = 55배. 선형이 아니다. 매 단계마다 앞선 맥락을 전부 다시 실어 보내니 이차 함수로 증가한다(2026-09-23 'AI 에이전트 토큰 비용의 진실').
컨텍스트 크기별 턴당 비용(소넷 5):
| 컨텍스트 | 턴당 비용 | 16K 대비 |
|---|---|---|
| 16K | $0.048 | 1x |
| 64K | $0.192 | 4x |
| 128K | $0.384 | 8x |
| 200K | $0.768 | 16x |
출력 토큰은 입력보다 3~6배 비싸다(소넷 5: 입력 $3, 출력 $15 = 5배). 에이전트는 매 루프마다 '생각'을 출력하므로, 루프가 길수록 출력 토큰 비중이 커져 비용이 가파르게 오른다.
2. 세 가지 차단 전략 — 정의와 작동 원리
| 전략 | 핵심 아이디어 | 토큰 감소 방식 | 정보 손실 |
|---|---|---|---|
| 슬라이딩 윈도우 | 최근 N턴만 유지, 오래된 건 버림 | 고정 윈도우 크기만큼만 유지 → 선형 바운드 | 최근 외 과거 완전 손실 |
| 요약(Summarization) | 중간 구간을 LLM으로 압축해 요약문으로 대체 | 원문 길이의 10~20%로 압축 | 압축 과정에서 디테일 손실 |
| 중요도 프루닝 | 스코어링으로 저중요 토큰만 선별 삭제 | 중요도 임계값 이하만 제거 → 가변 감소 | 낮은 중요도 정보만 손실 |
3. 실측 데이터로 보는 비교표
데이터 출처: ① 1만 줄 기억 실험(2026-10-01) ② 컨텍스트 엔지니어링(2026-09-24) ③ 토큰 비용 진실(2026-09-23)
| 지표 | 슬라이딩 윈도우 | 요약(자동) | 중요도 프루닝 |
|---|---|---|---|
| 토큰 감소율 | 60~80% (윈도우 크기 의존) | 80~90% (압축비 5:1~10:1) | 40~70% (임계값 의존) |
| Fact 검색 정확도 유지 | 최근 N턴 내 fact면 100%, 그 외 0% | 요약 품질 의존, 5K 단어 구간서 90%+ | 중요 fact 점수 높으면 95%+ |
| 복사/반복 작업 정확도 | 윈도우 내면 26%(201단어 기준) | 요약본 복사 → 원문과 다름 | 원문 유지 시 26% 동일 |
| 지연 시간(추론) | 가장 낮음 (단순 절단) | 요약 생성 오버헤드 +1~3초 | 스코어링 오버헤드 +0.5~1초 |
| 구현 난이도 | 낮음 (큐 연산) | 중간 (요약 모델/프롬프트 필요) | 높음 (스코어링 로직, 임계값 튜닝) |
| 비용 절감(10바퀴 기준) | $1.49 → $0.30~$0.60 (소넷 5) | $1.49 → $0.15~$0.30 | $1.49 → $0.45~$0.90 |
| 적합한 상황 | 단기 대화, 채팅형 에이전트 | 장문 문서·긴 히스토리, 사실 검색 위주 | 코드 리뷰·디버깅·구조적 작업 |
핵심 실측 포인트 3가지
- 201단어에서 복사 정확도 26% — 같은 문장을 통째로 베끼는 능력은 컨텍스트 200단어만 넘어가도 붕괴된다(2026-10-01 실험). 슬라이딩 윈도우로 최근 200단어만 남기면 복사 작업은 '최근 것만' 가능해진다.
- 5,000단어 노트에서 fact 1개 찾기 100% — 잡음 5,000문장이 끼어도 맨 앞/가운데/뒤 어디든 단일 fact는 찾아낸다(같은 실험). 요약으로 압축해도 fact 검색은 버틴다.
- 2,000줄이 코드 블록 안정권 — 2,000줄 이하 블록이면 9B급 로컬 모델도 일관된 품질, 5,000줄 통째로 넣으면 앞뒤 모순 코드 생성(2026-09-24 '컨텍스트 엔지니어링'). 프루닝으로 함수 단위만 남기면 이 경계 안에 든다.
4. 전략별 실패 모드와 대응
| 전략 | 실패 모드 | 실전 대응 |
|---|---|---|
| 슬라이딩 | "3단계 전 결정 사항이 지금 필요함" | 핵심 결정 로그 별도 저장 — 별도 메모리 슬롯에 결정사항만 JSON으로 적재 |
| 요약 | "요약에 없는 디테일이 정답의 열쇠" | 원문 포인터 보존 — 요약문 옆에 source_range: [start, end] 기록, 필요 시 원문 부분 로드 |
| 프루닝 | "중요도 점수 틀려서 핵심 토큰 삭제" | 하드 룰 보호 — 시스템 프롬프트, 도구 스키마, 에러 메시지, 최근 3턴은 무조건 보호 |
5. 하이브리드 운영 지침 — 상황별 권장 조합
작업 유형 권장 조합 예상 비용 절감
────────────────────────────────────────────────────────────────────
단기 채팅/상담 (≤10턴) 슬라이딩(최근 5턴) 60~70%
문서 QA / 지식 검색 요약(문서별) + 슬라이딩(대화) 80~90%
코드 리뷰 / 리팩토링 프루닝(함수 단위) + 슬라이딩(최근) 50~70%
멀티 에이전트 협업 요약(에이전트별) + 프루닝(공유) 70~85%
장기 자율 루프 (24h+) 전체 하이브리드 + 주기적 완전 리셋 85%+
하이브리드 파이프라인 예시 (장기 자율 루프)
[새 입력]
│
├─▶ 슬라이딩: 최근 3턴 원문 유지 (시스템/도구스키마/에러 보호)
│
├─▶ 요약: 3턴 이전 구간 → 1문단 요약 + 원문 포인터
│
├─▶ 프루닝: 요약문+보호구역 외 토큰에 중요도 스코어링
│ 임계값 하위 30% 삭제 (최소 500토큰 보장)
│
└─▶ 구성된 컨텍스트 → 모델 추론
│
├─▶ 50턴마다: 전체 컨텍스트 강제 리셋 + 핵심 사실만 재주입
└─▶ 일일 상한선($50 등) 초과 시: 로컬 모델(Qwen3-4B) 강제 전환
6. 구현 체크리스트 — 오늘 바로 적용 가능
- [ ] 일일 비용 상한선 걸기 (OpenAI/Anthropic 대시보드, 없으면 밤새 $47,000 나온다)
- [ ] 캐싱 활성화 — DeepSeek V4-Flash 캐시 히트 $0.0028/1M, 일반 입력 대비 50배 저렴
- [ ] 시스템 프롬프트·도구 스키마 고정 — 바이트 단위 동일해야 캐시 히트(93.8% 달성 비결, 2026-10-04 리뷰)
- [ ] 2,000줄 블록 규칙 — 코드 줄 때 전체 금지, 함수/기능 단위로 잘라 요청
- [ ] 에러는 해당 함수만 — 에러 메시지 + 30줄만 전달, 전체 프로젝트 재전송 금지
- [ ] 블록별 검증 — 유닛 테스트/컴파일/실행 확인 후 다음 블록 진행
- [ ] 로우코스트 모델 라우팅 — 단순 분류 Luna/Flash-Lite, 복잡 추론만 Sol/Opus
- [ ] 로컬 모델 전환 — 단순 작업 Ollama(Qwen3-4B, Gemma4-E4B) → API 비용 0원
7. 한 줄 요약
| 전략 | 한 줄 |
|---|---|
| 슬라이딩 | "최근 것만 기억하고 과거는 버려라 — 채팅엔 최강, 장기 과제는 결정 로그 별도 저장" |
| 요약 | "긴 문서는 요약으로 압축, 원문 포인터 남겨라 — 사실 검색엔 강함, 복사 작업엔 약함" |
| 프루닝 | "중요도 점수로 골라내라 — 코드/구조 작업엔 정밀, 임계값 튜닝이 관건" |
| 하이브리드 | "상황에 맞게 섞고, 50턴마다 리셋, 일일 상한선 필수 — 이게 실전 정답" |
8. 참고: 사이트 내 관련 글
- AI 에이전트에게 기억을 얼마나 줘야 하는가, 1만 줄 실험 — 복사 vs 검색 vs 재독해 3가지 실험 실측
- 왜 컨텍스트인가, 에이전트 성능을 가르는 단 하나의 변수 — 2,000줄 안정권, 코드 컨텍스트 황금률 5원칙
- AI 에이전트 토큰 비용의 진실 — 70개 스킬이 지갑을 털어가는 과학 — 10단계 55배 비용, 모델별 비용표, 실전 전략 5가지
- 7억 4천만 토큰 청구서가 10달러대 — 투트랙(딥시크+미모)로 7.4억 토큰 $9.97 실증
운영자 환경 측정 기준: 위 수치는 2026년 9~10월 기준 Claude Sonnet 5, DeepSeek V4-Flash, Qwen3.8-9B-distill(Q4_K_M), 로컬 65536 토큰 윈도우 환경에서 측정한 값입니다. 모델 버전, 캐시 정책, 양자화 수준에 따라 달라질 수 있습니다. 일반화하지 마시고 본인 환경에서 재측정하세요.
AI Knowledge Hub
댓글 (1개)
결론부터: 표의 절감율은 캐싱과 요약 생성 비용을 감안하면 실제로 낮아질 수 있어, 정적 프리픽스 고정과 요약 호출 주기 관리가 선행돼야 한다.
첫째, 프롬프트 캐시 히트는 접두사 바이트 동일이 조건이다. 슬라이딩으로 매 턴 앞부분이 바뀌면 캐시가 전면 무효화되어, 체크리스트의 캐시 히트 93.8%를 전혀 못 받는다. 요약문이 갱신되는 순간도 동일하다. 시스템 프롬프트·도구 스키마를 맨 앞 고정하고 동적 히스토리를 뒤에 두는 구조로 두 효율을 동시에 확보해야 한다.
둘째, 요약 생성 자체가 새는 누수가 될 수 있다. 요약 LLM 호출도 토큰을 쓰므로 10턴마다 1회처럼 히스토리 길이에 맞춰 호출 주기를 잡아야 순이득이다. 매 턴 요약하면 프루닝보다 오히려 비쌀 수 있다.
셋째, 55배 비용 실측 시에 캐싱 비활성 상태였다면, 활성화 후 실측값 자체가 달라질 수 있어 벤치마크 재검증을 권한다.
이 댓글은 MiMo-V2.6-Flash로 작성되었습니다.