AI 코딩 에이전트를 실제 개발 흐름에 붙이면 가장 먼저 부딪히는 병목 중 하나가 컨텍스트입니다. 모델의 컨텍스트 윈도우는 계속 커지지만, 브라우저 스냅샷, GitHub 이슈 목록, CI 로그, 테스트 실패 출력, kubectl describe, 빌드 로그를 그대로 넣기 시작하면 금방 지저분해집니다. 긴 컨텍스트는 많은 정보를 담을 수 있지만, 많은 정보가 곧 좋은 판단으로 이어지지는 않습니다.

요즘 흐름은 “컨텍스트를 더 크게 쓰자"에서 한 단계 더 이동하고 있습니다. 핵심은 도구 출력 전체를 LLM에게 바로 먹이는 것이 아니라, 검색 가능한 작업 메모리로 내리고 필요한 조각만 다시 올리는 계층을 두는 것입니다. 저는 이 흐름을 Context Offload Layer라고 부르는 편이 실무적으로 맞다고 봅니다. 이 관점은 최근 정리한 Tool Contract Test, Context Contract Registry, Stateful Sandbox Snapshot, Background Agent Session과 같은 축 위에 있습니다.

이 글에서 얻는 것

  • 에이전트 도구 출력이 왜 단순 토큰 비용 문제가 아니라 품질·보안·재현성 문제인지 이해할 수 있습니다.
  • raw output, 요약, 인덱스, 원문 참조를 분리하는 Context Offload Layer의 기준을 잡을 수 있습니다.
  • 어떤 도구 출력은 즉시 컨텍스트에 넣고, 어떤 출력은 검색 가능한 작업 메모리로 내려야 하는지 숫자 기준을 가져갈 수 있습니다.

핵심 개념/이슈

1) 컨텍스트 창은 저장소가 아니라 작업대다

많은 팀이 큰 모델을 쓰기 시작하면 모든 도구 결과를 프롬프트에 그대로 붙입니다. 처음에는 편합니다. 에이전트가 브라우저 화면도 보고, 로그도 보고, 이슈도 보고, 코드도 한 번에 보는 것처럼 느껴집니다. 하지만 시간이 지나면 문제가 생깁니다.

  • 오래된 로그와 최신 로그가 섞여 판단이 흐려진다.
  • 모델이 실제로 쓰지 않는 원문 때문에 비용이 커진다.
  • 중요한 실패 한 줄이 수천 줄 출력 사이에 묻힌다.
  • 민감정보가 포함된 raw output이 불필요하게 모델 입력으로 전달된다.
  • 다음 실행자가 같은 원문을 다시 수집하느라 시간을 쓴다.

그래서 컨텍스트 창은 장기 보관 장소가 아니라 현재 추론에 필요한 작업대로 봐야 합니다. 작업대에는 지금 필요한 도구, 핵심 증거, 의사결정 기준만 올리고, 나머지는 검색 가능한 선반에 둬야 합니다. 이 선반 역할을 하는 것이 Context Offload Layer입니다.

실무 기준으로는 단일 tool call output이 8~16KB를 넘거나, 한 작업에서 같은 종류의 raw output이 3회 이상 반복되거나, 실제 답변에 사용된 줄이 전체 출력의 20% 미만이라면 offload 후보로 보는 편이 좋습니다.

2) Offload는 요약만 저장하는 것이 아니다

가장 흔한 오해는 “긴 출력을 요약하면 된다"입니다. 요약은 필요하지만, 요약만 남기면 검증성이 사라집니다. 에이전트가 “테스트 2개 실패"라고 요약했는데 실제 로그에는 3번째 flaky failure가 있었는지, 나중에 사람이 확인할 수 있어야 합니다.

좋은 offload 단위는 네 겹으로 나뉩니다.

  1. Raw output: 원문. 필요 시 재검증 가능한 증거
  2. Extracted facts: 실패 테스트명, 에러 코드, 파일 경로, timestamp 같은 구조화 필드
  3. Summary: 현재 작업 목적에 맞춘 짧은 설명
  4. Source reference: 원문 위치, 해시, 생성 도구, 생성 시각

이 구조가 있어야 모델은 짧은 요약으로 추론하고, 검증자는 source reference로 원문을 확인할 수 있습니다. Test Evidence Pipeline이 테스트 증거를 PR 리뷰와 연결하듯, context offload도 도구 출력을 “나중에 다시 볼 수 있는 증거"로 남겨야 합니다.

3) 고출력 도구는 contract와 함께 관리해야 한다

브라우저 자동화 스냅샷, GitHub API 응답, 패키지 감사 결과, 로그 검색 결과는 형식이 자주 바뀝니다. 오늘은 error.message에 들어 있던 값이 다음 버전에서 errors[].detail로 바뀌면, 요약기는 조용히 핵심 정보를 놓칠 수 있습니다. 그래서 Context Offload Layer는 Tool Contract Test와 붙어야 합니다.

최소 계약은 아래 정도면 시작할 수 있습니다.

  • 각 도구 output의 최대 raw size와 truncation 정책
  • 반드시 추출해야 하는 필드 목록
  • 민감정보 마스킹 규칙
  • summary에 포함하면 안 되는 값
  • 원문 보관 TTL과 접근 권한
  • extraction 실패 시 모델에게 전달할 fallback 형태

특히 보안 관점에서 raw output은 조심해야 합니다. 로그에는 토큰, 이메일, 내부 URL, 고객 ID가 섞일 수 있습니다. 모든 raw output을 영구 저장하면 위험하고, 전부 버리면 재현성이 떨어집니다. 실무적으로는 기본 TTL을 24~72시간, release evidence나 incident evidence는 별도 보존 정책으로 승격하는 방식이 무난합니다.

4) Offload Layer의 진짜 가치는 다음 실행에서 드러난다

한 번의 세션 안에서는 그냥 긴 컨텍스트로 버티는 것이 더 쉬워 보일 수 있습니다. 하지만 백그라운드 에이전트, 멀티에이전트 작업, 세션 handoff가 늘면 이야기가 달라집니다. 다음 실행자가 이전 도구 원문을 다시 수집하지 않고, 이미 추출된 facts와 source reference를 검색해서 이어갈 수 있으면 비용이 크게 줄어듭니다.

예를 들어 CI 실패를 고치는 작업에서 offload layer가 없다면 다음 에이전트는 다시 PR을 열고, Actions 로그를 받고, 실패 테스트를 찾고, 관련 파일을 읽습니다. 반대로 offload가 있으면 failed_test_name, stacktrace_top_frame, artifact_hash, log_ref, last_verified_at만 받아 곧바로 수정 후보를 좁힐 수 있습니다. 이건 Agent Handoff Packet과 자연스럽게 연결됩니다. handoff packet은 무엇을 이어받을지 말하고, offload layer는 그 근거를 다시 꺼낼 수 있게 합니다.

실무 적용

1) 먼저 고출력 도구 10개를 측정한다

도입은 거창한 벡터 DB부터 시작할 필요가 없습니다. 먼저 최근 1~2주 에이전트 작업에서 output이 큰 도구를 정렬해 보세요.

  • browser snapshot / screenshot OCR
  • GitHub issue·PR·review thread 조회
  • CI 로그와 테스트 실패 출력
  • npm audit, pip-audit, trivy 같은 보안 스캔
  • kubectl logs, docker logs, APM trace 검색
  • 코드 검색 결과와 대량 파일 read

각 도구에 대해 평균 output size, p95 output size, 실제 답변에서 참조된 줄 수, 민감정보 포함 가능성, 재사용 빈도를 봅니다. 추천 기준은 아래와 같습니다.

조건처리 방식
4KB 이하, 즉시 판단 필요컨텍스트에 직접 포함
8~64KB, 일부 줄만 필요facts 추출 + 요약 + raw ref
64KB 초과 또는 반복 조회인덱싱 후 검색 결과만 주입
민감정보 가능성 높음raw 저장 전 마스킹, 모델 입력 최소화
재현 증거로 중요해시와 TTL, owner를 붙여 보존

2) Retrieval 기준은 “많이 찾기"보다 “덜 오염시키기"다

Offload Layer를 붙이면 검색이 좋아져야 하지만, 무작정 많은 조각을 다시 넣으면 원래 문제로 돌아갑니다. retrieval 기준은 작게 시작하는 편이 낫습니다.

  • 한 번의 모델 호출에 재주입하는 offload chunk는 3~7개로 제한
  • 각 chunk는 1~2문단 또는 20줄 이하로 압축
  • source reference와 timestamp를 항상 포함
  • 24시간 이상 지난 작업 증거는 stale 표시 후 재검증 요구
  • 같은 원문에서 나온 중복 chunk는 하나로 병합

이 기준은 Context Freshness Budget과도 맞닿아 있습니다. 오래된 정보가 많이 들어오면 모델은 똑똑해지는 것이 아니라 자신 있게 틀릴 수 있습니다.

3) 작은 저장소로 시작해도 된다

초기 구현은 복잡할 필요가 없습니다. SQLite, Postgres, object storage, 간단한 full-text index만으로도 충분히 시작할 수 있습니다. 중요한 건 저장소 종류가 아니라 메타데이터입니다.

최소 필드 예시는 이렇습니다.

artifact_id: ci-log-2026-05-09-001
tool_name: github_actions_log
created_at: 2026-05-09T10:06:00+09:00
source_ref: repo/pr/123/checks/456
raw_hash: sha256:...
retention_ttl_hours: 72
sensitivity: internal
extracted_facts:
  failed_tests: ["OrderProjectionRebuildTest.shouldResumeFromCheckpoint"]
  files: ["src/test/.../OrderProjectionRebuildTest.java"]
summary: "projection checkpoint 재개 테스트가 expected offset mismatch로 실패했다."
last_verified_at: 2026-05-09T10:08:00+09:00

이 정도만 있어도 다음 에이전트나 사람이 원문 재조회 없이 핵심 상태를 파악할 수 있습니다.

4) 실패 모드를 먼저 정해둔다

Context Offload Layer는 잘 만들면 컨텍스트 위생을 좋아지게 하지만, 실패했을 때 조용히 품질을 떨어뜨릴 수 있습니다. 그래서 저장소 설계보다 먼저 실패 모드를 정해두는 편이 좋습니다. 특히 아래 네 가지는 운영 규칙으로 명시해 두는 것이 안전합니다.

실패 모드증상방어 규칙
요약 누락에러 원문에는 중요한 warning이 있는데 summary에는 없다summary마다 raw_ref와 extraction_version을 붙이고, 중요 판단 전 원문 확인 링크를 남긴다
stale artifact어제 로그를 오늘 실패의 근거로 착각한다last_verified_at이 freshness budget을 넘으면 재조회 없이는 확정 판단하지 않는다
민감정보 잔존토큰·고객 ID·내부 URL이 raw output에 남는다저장 전 마스킹, 모델 주입 전 2차 마스킹을 분리한다
검색 과다 주입관련 없는 chunk가 많이 들어와 판단이 흐려진다chunk 수 상한과 중복 제거를 retrieval layer의 기본값으로 둔다

이 표를 runbook에 넣어두면 팀의 논의가 “어떤 DB를 쓸까"에서 “틀렸을 때 어떻게 감지하고 되돌릴까"로 이동합니다. 제 경험상 이 질문이 먼저 잡혀야 에이전트 플랫폼이 운영 도구가 됩니다.

트레이드오프/주의점

첫째, offload layer는 새로운 상태 저장소입니다. 상태 저장소가 생기면 권한, TTL, 백업, 삭제, 감사가 따라옵니다. 단순 토큰 절약 기능으로 도입했다가 내부 로그 저장소가 하나 더 생긴 사실을 놓치면 보안 리스크가 커집니다.

둘째, 요약 품질이 낮으면 더 위험합니다. raw output을 안 보여주고 잘못된 요약만 모델에게 주면, 모델은 틀린 전제를 더 깔끔하게 밀어붙입니다. 그래서 요약에는 반드시 source reference와 confidence, extraction error를 붙이는 편이 좋습니다.

셋째, 모든 것을 벡터 검색으로 풀 필요는 없습니다. 테스트 실패명, 파일 경로, 에러 코드, PR 번호처럼 구조화 가능한 정보는 SQL/키워드 검색이 더 정확합니다. 벡터 검색은 자연어 설명과 유사 사례 탐색에 쓰고, 결정적 필드는 구조화 인덱스로 두는 편이 안전합니다.

의사결정 우선순위는 민감정보 최소화 > 검증 가능한 원문 참조 > 현재 작업 관련성 > 토큰 비용 절감입니다. 비용을 아끼려고 원문을 없애면 검증성이 깨지고, 편하다고 원문을 다 넣으면 보안과 품질이 깨집니다.

체크리스트 또는 연습

체크리스트

  • 고출력 도구별 p95 output size와 실제 참조율을 측정했다.
  • raw output, extracted facts, summary, source reference를 분리한다.
  • 민감정보 마스킹과 raw 보관 TTL이 있다.
  • offload artifact에는 생성 도구, 생성 시각, 해시, freshness 상태가 붙는다.
  • retrieval chunk 수와 크기에 상한이 있다.
  • tool output schema 변경을 Tool Contract Test로 감지한다.
  • handoff packet이나 background session 결과에서 offload reference를 재사용한다.

연습

  1. 최근 에이전트 작업 5개를 골라 가장 큰 tool output 10개를 뽑아 보세요. 그중 실제 최종 답변에 쓰인 줄이 몇 줄인지 표시하면 offload 후보가 바로 보입니다.
  2. CI 로그 하나를 raw output, extracted facts, summary, source reference 네 겹으로 나눠 저장하는 미니 스펙을 작성해 보세요.
  3. 24시간 지난 offload artifact를 다음 세션에서 사용할 때 재검증해야 하는 필드 3개를 정해 보세요. timestamp, branch head, test run id만 확인해도 사고가 많이 줄어듭니다.

결론

2026년의 에이전트 개발은 더 긴 컨텍스트 경쟁만으로 해결되지 않습니다. 진짜 차이는 어떤 정보를 작업대 위에 올리고, 어떤 정보는 검색 가능한 작업 메모리로 내리며, 그 근거를 어떻게 다시 검증할 수 있게 만드는지에서 납니다.

Context Offload Layer는 토큰 절약 장치가 아니라 에이전트 운영 계층입니다. 도구 출력이 커질수록 raw output, facts, summary, reference를 분리하는 팀이 더 빠르게 디버깅하고, 더 안전하게 handoff하고, 더 적은 비용으로 같은 품질을 유지할 수 있습니다. 긴 컨텍스트보다 중요한 것은 좋은 컨텍스트 위생입니다.

관련 글