볼트 홈: README
해설 — 컨텍스트 오염 깊이읽기: 상처에 들어간 균은 어떻게 자란다
한 줄 정의
컨텍스트 오염은 하나의 거짓 정보가 에이전트의 기억(목표·요약·메모리)에 박히는 순간 “확인된 사실”의 자격을 얻고, 이후 모든 추론을 갉아먹으며 스스로 증식하는 실패다. 핵심은 “틀린 답을 한 번 했다”가 아니라 “틀린 답이 기록되어 다음 사고의 전제가 되었다”는 데 있다.
왜 중요한가
처음 배우는 사람은 환각(hallucination)과 오염(poisoning)을 같은 것으로 본다. 둘 다 모델이 거짓말을 한다는 점에서 닮았으니까. 그러나 이 둘을 구분하지 못하면, 멀쩡하던 에이전트가 어느 순간 고장난 라디오처럼 같은 헛짓을 무한 반복하는 이유를 끝내 이해할 수 없다. 환각은 한 번의 잘못된 출력이고 다음 질문에서 사라진다. 오염은 그 잘못된 출력이 기억에 저장되어 다음 사고의 토대가 되는 순간 시작되며, 시간이 갈수록 저절로 심해진다. 에이전트가 다단계로 길어지고 메모리·RAG·도구를 갖출수록, 오염은 단발 버그가 아니라 시스템 신뢰성의 근본 위협이 된다(01_01-정의-컨텍스트-오염). 컨텍스트 엔지니어링에서 가장 먼저, 가장 깊이 이해해야 하는 실패 모드인 이유다.
1. 비유로 잡는 직관 — 상처에 들어간 균
오염을 한 장면으로 새기고 싶다면 상처 감염을 떠올려라.
칼에 베이는 것 자체(환각)는 흔하고, 대부분 저절로 아문다. 문제는 그 상처에 균 한 마리가 들어갔을 때다. 균은 들어간 즉시 위험한 게 아니다. 위험은 그것이 자기증식한다는 데 있다. 한 마리가 둘이 되고, 둘이 넷이 되고, 면역계가 미처 대응하기 전에 조직 전체로 퍼진다. 항생제(교정 신호)를 늦게 투여할수록 더 많이 써야 하고, 너무 늦으면 환부를 도려내는(컨텍스트 리셋) 수밖에 없다.
컨텍스트 오염도 똑같은 동역학을 따른다. 거짓 정보가 컨텍스트에 “들어간” 순간이 감염의 시작이고, 그것이 요약·재추론·재기록을 거치며 반복 참조될수록 모델은 그것을 더 강하게 “사실”로 취급한다(01_02-메커니즘-자기강화-루프). 균이 증식하듯, 오염은 가만히 둬도 강도가 올라간다. 이렇게 스스로 강해지는(self-reinforcing) 성질이 오염을 환각과 질적으로 다른 현상으로 만드는 핵심이다.
흔한 오해 ① — "오염은 환각이랑 같은 말 아닌가?"
아니다. 모든 오염은 환각에서 비롯되지만, 모든 환각이 오염이 되는 건 아니다. 환각이 출력으로 한 번 나오고 사라지면 그냥 환각이다. 그 환각이 컨텍스트(목표·요약·메모리)에 기록되어 반복 참조될 때 비로소 오염이 된다. 발생 위치가 출력(output)이냐 기록(context)이냐, 지속성이 일시적이냐 영속적이냐가 갈림길이다(01_01-정의-컨텍스트-오염).
2. 두 갈래의 진입 — 우발적 감염과 적대적 주입
균이 상처에 들어오는 경로가 둘이듯, 오염의 진입 경로도 둘이다.
우발적 오염(accidental)은 외부 공격자 없이 에이전트 자신이 만든다. 모델이 환각을 일으키고, 그 환각을 검증 없이 자기 목표 목록에 적어 넣는다. 베이는 순간 공기 중의 균이 우연히 들어온 격이다. 가장 유명한 실증이 Gemini 2.5 포켓몬 에이전트다. 모델은 원작 포켓몬 레드/블루에는 없는 리메이크판 아이템 “TEA”를 구해야 한다는 환각을 일으켰고, 이 잘못된 전제를 goals list에 기록했다. 그 순간부터 모든 전략이 도달 불가능한 목표로 수렴했다(01_03-사례-gemini-포켓몬).
적대적 오염(adversarial)은 외부 공격자가 의도적으로 독을 주입한다. 균을 일부러 상처에 발라 넣는 격이다. 프롬프트 인젝션, RAG 지식 베이스 백도어, 장기 메모리 오염이 여기 속한다. 위협 지형 전체는 별도 노트가 다룬다(01_08-적대적-오염-위협지형).
흥미로운 비대칭이 있다. 진입 경로는 우발과 적대로 갈리지만, 일단 컨텍스트에 박힌 뒤의 동역학은 거의 같다. 자기강화 루프, 목표 고착, 자력 복구 불가까지, 우발적 오염도 결과만 보면 적대적 공격과 구별되지 않을 만큼 시스템을 마비시킨다(01_03-사례-gemini-포켓몬). 이 점이 중요하다. 방어를 악의적 공격 막기로만 생각하면, 공격자가 없는데도 발생하는 우발적 오염을 놓친다.
흔한 오해 ② — "외부 공격만 막으면 오염은 안 생긴다"
틀렸다. 우발적 오염에는 공격자가 없다. Gemini 포켓몬 사례에서 적대자는 아무도 없었다. 오염은 순전히 모델 자신의 훈련 데이터 혼재(리메이크판 정보가 원작 맥락에 잘못 적용됨)와 내부 추론 오류에서 비롯됐다(01_03-사례-gemini-포켓몬). 방화벽만 세우고 안심하면 안 되는 이유다.
3. 왜 스스로 빠져나오지 못하나 — 자기강화 루프의 해부
오염에서 가장 비직관적인 부분은 이것이다. 에이전트가 똑똑하다면, 틀린 목표를 추구하다 계속 실패할 때 “어, 이거 틀렸나?” 하고 스스로 고쳐야 하지 않을까? 그런데 안 고친다. 왜일까. 세 가지 구조적 이유가 겹친다.
3-1. 출처를 추적하지 않는다 (No Provenance)
회의를 하는데 누가 무슨 말을 했는지 기록하지 않는다고 상상해 보자. 회의록에는 결론만 남는다. “TEA가 필요하다”는 문장이 전문가의 검증된 사실에서 나왔는지, 방금 누군가가 던진 근거 없는 추측에서 나왔는지 구분이 안 된다. LLM의 컨텍스트가 정확히 이렇다. 어텐션 메커니즘은 모든 토큰을 동등한 입력으로 처리할 뿐, “이 정보는 신뢰할 수 없는 출처에서 왔다”는 꼬리표를 달지 않는다(01_02-메커니즘-자기강화-루프). 출처가 없으니 모델은 자기 기억 속 오염을 탐지할 근거 자체가 없다.
3-2. 반복이 곧 신뢰가 된다 (Frequency = Truth)
회의가 길어질 때 누군가 같은 말을 자꾸 반복하면 그게 합의된 사실처럼 굳는다. 어텐션도 그렇다. 같은 정보가 컨텍스트 안에서 자주 등장할수록 모델은 그것을 더 강하게 “사실”로 가중한다(01_02-메커니즘-자기강화-루프). 그런데 오염은 매 사이클마다 요약에 다시 포함되며 스스로 반복 빈도를 높인다. 오염이 “나는 사실이다”라고 점점 더 크게 외치는 셈이고, 모델은 그 목소리가 클수록 더 믿는다. 균이 증식하듯 신뢰도가 자가증폭된다.
3-3. 요약이 원본을 지운다 (Lossy Compression)
긴 컨텍스트를 감당하려면 요약은 필수다. 그러나 요약은 본질적으로 손실 압축이다. “TEA가 필요할지도 모른다(불확실)“가 요약을 거치면 “TEA가 필요하다(확정)“로 바뀌고, 오류가 발생한 경위와 불확실성은 사라진 채 결론만 남는다. 더 무서운 건 악의 없이 일어나는 점진적 왜곡이다. SSGM 연구(Lam et al. 2026)가 든 예시를 보자. “약간 매운 음식을 좋아함”이 세 번의 요약을 거치면 “매우 매운 음식을 사랑함”이 된다. 각 단계는 그럴듯해 보이지만 결과는 원래 의도를 위반한다(01_02-메커니즘-자기강화-루프). 에이전트 목표에 적용하면 “간단한 코드를 작성하라”가 “테스트와 문서는 생략하라”로 변질되기도 한다.
이 셋이 합쳐지면 교정 비용의 비대칭이 생긴다. 오염은 매 사이클 자동으로 강해지는데, 교정은 의도적 개입을 요구한다. 10 사이클 오염됐다면 비용이 10배가 아니라, 그동안 파생된 모든 추론까지 함께 뒤집어야 하므로 실질적으로 기하급수적이다. Gemini 보고서의 그 유명한 표현 “되돌리는 데 매우 오랜 시간이 걸린다(very long time to undo)“가 이걸 압축한 말이다(01_02-메커니즘-자기강화-루프).
flowchart TD A["거짓 정보 진입<br/>환각 또는 주입"] --> B["기억에 기록<br/>목표·요약·메모리"] B --> C["다음 추론이 그것을<br/>확인된 사실로 참조"] C --> D["새 추론이 오염을 증폭"] D --> E["재요약·메모리 갱신<br/>반복 빈도 상승"] E --> B E --> F["어텐션 가중치 증가<br/>더 강하게 사실로 취급"] F --> C style A fill:#e74c3c,color:#fff style B fill:#e67e22,color:#fff style F fill:#9b59b6,color:#fff
4. 실제 에이전트에서 어떤 모습인가 — 포켓몬이 보여준 것
이론을 한 번에 살로 만들어 주는 사례가 Gemini 2.5 포켓몬이다. 이 사례가 특별한 이유는, 트위치 시청자들이 이상 행동을 독립적으로 알아챌 만큼 반복적이고 가시적이었다는 점이다. 오염은 미세한 성능 저하가 아니라 눈에 보이는 전략 붕괴를 만든다(01_03-사례-gemini-포켓몬).
오염된 에이전트는 세 가지 증상을 동시에 보였다.
- 목표 고착(fixation): 존재하지 않는 TEA 아이템을 수백 턴, 수 시간 동안 찾아 헤맸다. 목표의 현실성을 재평가하지 않고, 실패가 반복돼도 같은 전략을 고수했다.
- 블랙아웃 전략: 막힌 길을 돌파하려고 파티 포켓몬을 전부 일부러 기절시켜 포켓몬 센터로 강제 이동하는(소지금 절반 손실) 비합리적 우회를 반복했다.
- 도구 망각: 경로 탐색용
pathfinder도구를 쓸 수 있었는데도, 스트레스 상황에서 그 도구의 존재 자체를 잊었다.
여기서 결정적 통찰이 나온다. 도구 망각은 별도 버그가 아니라 목표 오염의 2차 피해다. 오염된 목표에 대한 집착이 컨텍스트의 주의 자원을 다 빨아들이면서, 정작 유용한 도구를 참조할 여력이 사라진 것이다(01_03-사례-gemini-포켓몬). 이것이 오염(Poisoning)이 산만(Distraction)으로 번지는 연쇄다. 오염이 집착을 만들고, 집착이 주의를 소진시켜 산만을 부른다(09_01-감별진단-5대모드-종합비교).
흔한 오해 ③ — "더 똑똑한(더 큰) 모델이면 오염을 알아서 빠져나온다"
안 그런다. 포켓몬을 플레이한 건 당시 최상위 모델 Gemini 2.5 Pro였다. 오염은 모델의 지능 부족이 아니라 시스템 설계의 문제다. 출처 추적 부재, 요약 압축, 검증 게이트 없는 기억 쓰기가 원인이다(01_02-메커니즘-자기강화-루프). 모델을 키워도 구조가 그대로면 오염은 그대로 발생한다.
5. 산업 현장의 교훈 — 장난감 게임이 아니다
“포켓몬이야 게임이지” 싶다면, 산업 실사고 목록을 보면 생각이 바뀐다. Bing/Sydney의 폭주, ChatGPT 장기 메모리에 악성 지시를 심는 SpAIware, 이메일 한 통으로 데이터를 유출시키는 EchoLeak(CVE-2025-32711), 코딩 에이전트의 규칙 파일에 백도어를 심는 Rules File Backdoor — 모두 오염이 실제 운영 시스템에서 일으킨 사고다(01_12-사례-산업-실사고).
이 사례들이 주는 공통 교훈은 하나다. 오염의 진입점은 신뢰한다고 가정한 모든 입력이다. 검색 문서, 도구 출력, 사용자 메시지, 장기 메모리까지, 에이전트가 무비판적으로 신뢰하는 모든 채널이 오염 벡터가 될 수 있다. 포켓몬이 보여준 우발적 메커니즘과 산업 사고가 보여준 적대적 메커니즘은, 진입 경로만 다를 뿐 신뢰된 기억이 무기가 된다는 본질이 같다.
특히 무서운 변종은 도구 출력이 오염 벡터가 되는 경우다. 사용자 메시지는 사람이 한 번이라도 의심하지만, 도구가 돌려준 출력은 기계가 준 사실이라는 후광 때문에 검증 없이 기억으로 빨려 들어가기 쉽다. 청결하다고 믿은 수술 도구를 타고 균이 들어오는 격이다. 신뢰의 후광이 클수록 방어선은 더 얇아진다.
6. 방어는 왜 단일막이 아니라 다층인가
여기서 가장 흔한 실수가 나온다. “그럼 입력 필터 하나 잘 만들면 되잖아?” 안 된다. 오염 방어가 다층(defense in depth)이어야 하는 이유는, 오염이 단일 지점이 아니라 여러 인터페이스를 가로지르며 발생하기 때문이다.
SSGM 프레임워크는 오염이 세 접점에서 일어난다고 본다. 입력 주입(독소가 들어옴), 메모리 통합(요약하며 의미가 왜곡됨), 메모리 검색(오염된 기억이 우선 검색됨)이다(01_02-메커니즘-자기강화-루프). 입력 필터는 첫 접점만 막는다. 나머지 둘은 공격자 없이도 오염을 만든다. 요약 왜곡에는 악의가 필요 없다. 그래서 막을 하나만 세우면, 다른 접점으로 새는 오염을 통째로 놓친다.
면역계로 비유하면, 피부(입력 검증) 하나로는 부족하고 백혈구·항체·발열 같은 다층 방어가 함께 작동해야 하는 것과 같다. 실제 처방도 다층 조합이다(01_09-처방-방어전략):
- 격리(isolation): 신뢰할 수 없는 데이터가 특권 동작을 직접 유발하지 못하게 데이터 흐름을 설계 차원에서 분리한다. 대표 처방이 CaMeL이다. Dual LLM 구조에 capability/taint를 입혀 프롬프트 인젝션을 탐지가 아니라 설계로 차단한다(01_11-paper-CaMeL-방어).
- 메모리 위생(memory hygiene): 기억에 쓰기 전 검증 게이트를 두고, 요약 전 오염 체크포인트를 둔다. goals list가 “쓰면 무조건 신뢰되는” 구조가 되면 안 된다(01_03-사례-gemini-포켓몬).
- RAG 운영 통제: 시간 기반 필터링, 메타데이터 부스팅, 하이브리드 검색·리랭킹으로 오염 소스가 검색 상위에 오르지 못하게 한다(01_01-정의-컨텍스트-오염).
- 컨텍스트 리셋: 자기강화가 깊어지면 교정보다 환부 절제(컨텍스트 창 전체 초기화)가 더 싸다(01_02-메커니즘-자기강화-루프).
흔한 오해 ④ — "행동을 감시하면(circuit breaker, I/O 검열) 오염을 잡는다"
부분적으로만 맞다. 기존 방어들은 행동(action)을 감시할 뿐 신념(belief)은 감시하지 않는다. 오염은 믿음의 문제, 즉 에이전트가 틀린 것을 사실로 믿는 상태다. 행동 감시는 악성 행위를 잡지만, 오염된 믿음은 멀쩡한 행동으로 표출되므로 그대로 통과시킨다(01_02-메커니즘-자기강화-루프). 그래서 신념 편향 탐지(belief drift detection)와 출처 추적이라는 새 프리미티브가 필요하다.
flowchart LR subgraph 진입["진입 차단"] A1["입력 검증"] A2["CaMeL 격리"] end subgraph 기억["기억 위생"] B1["쓰기 검증 게이트"] B2["요약 전 체크포인트"] end subgraph 운영["운영·복구"] C1["RAG 통제"] C2["컨텍스트 리셋"] end A1 --> B1 A2 --> B1 B1 --> C1 B2 --> C1 C1 --> C2
7. 2026 연구가 더해준 것
2025년까지 오염은 포켓몬 일화로 회자됐지만, 2026년 들어 연구자들이 그 비유를 실증과 체계로 굳혔다.
자기증식 비유는 더 이상 은유가 아니다. Zombie Agents(arXiv:2602.15654)는 자기진화하는 에이전트에 자기강화 인젝션을 한 번 심으면, 에이전트가 스스로를 업데이트하는 동안에도 그 제어권이 지속된다는 것을 실증했다. 균이 숙주의 면역 갱신마저 타고 살아남듯, 오염은 에이전트의 자기개선 루프를 숙주로 삼아 영속한다. 3-2절의 “반복이 곧 신뢰”가 공격자 손에서 무기가 된 형태다(01_02-메커니즘-자기강화-루프).
진입·저장·검색의 세 접점(6절)도 정량화됐다. From Untrusted Input to Trusted Memory(arXiv:2606.04329)는 메모리 오염을 write→store→retrieve 전 경로로 체계화해, 신뢰되지 않은 입력이 어느 단계에서 신뢰된 기억으로 둔갑하는지를 단계별로 분해했다(01_08-적대적-오염-위협지형). RAG 쪽은 Securing RAG(arXiv:2604.08304) 서베이가 공격·방어를 분류했고, 소셜웹 간접 인젝션은 Hidden-in-Plain-Text(arXiv:2601.10923)가 벤치마크로 떠올랐다.
방어 프리미티브도 구체화됐다. 5절의 메모리 위생은 VIGIL(arXiv:2601.05755)의 커밋 전 검증(verify-before-commit)으로 처방이 명확해졌다. 도구 출력 스트림을 기억에 커밋하기 전에 검증하라는 것이니, 방금 본 도구 후광 문제의 직답이다. 툴 설명 포이즈닝은 TRUSTDESC(arXiv:2604.07536), RAG 코퍼스 오염은 스파스 어텐션(arXiv:2602.04711)이 맡는다. 4절의 신념 감시 난제에는 Adversarial Intent is a Latent Variable(arXiv:2602.21447)가 적대적 의도를 잠재변수로 두고 상태 기반으로 추론하는 길을 제시했다. 행동이 아니라 신뢰 상태를 추적하라는 6절의 요구와 정확히 맞닿는다(01_09-처방-방어전략).
한 줄로 정리하면, 2026년은 오염이 스스로 증식한다는 비유를 자기강화 인젝션으로 실증하고, 막연했던 다층 방어를 write/store/retrieve 단계별 처방으로 풀어낸 해다.
요약·체크리스트
이 모드를 한 문단으로: 컨텍스트 오염은 상처에 들어간 균과 같다. 거짓 정보 하나가 에이전트의 기억에 박히는 순간 “확인된 사실”의 자격을 얻고, 출처를 추적하지 않고 반복을 신뢰로 환산하며 요약으로 원본을 지우는 LLM의 구조 때문에 스스로 증식한다. 진입은 우발적(자기 환각)일 수도 적대적(주입)일 수도 있으나, 박힌 뒤의 동역학은 목표 고착, 도구 망각, 자력 복구 불가로 같다. 모델을 키운다고 풀리지 않으며, 방어는 입력·기억·운영·복구를 가로지르는 다층이어야 한다.
기억할 핵심 직관 한 줄: 오염은 틀린 답이 아니라 기억이 된 틀린 답이다. 그래서 가만 둬도 저절로 심해진다.
감별 체크리스트
- 증상이 일시적 오답인가, 아니면 기억된 전제에 기반한 반복 오류인가? (후자가 오염)
- 에이전트가 불가능하거나 무관한 목표에 고착되어 있는가? (오염의 시그니처)
- 실패가 반복되는데도 전략을 재평가하지 않는가? (자기강화 루프 작동 중)
- 오염원이 외부 입력(적대)인가 자기 추론(우발)인가? 진입 차단 전략이 갈린다
- 방어가 입력 한 곳만 막고 있지 않은가? 기억 위생·운영 통제·리셋까지 다층인지 확인
관련 노트
- 01 오염 — 챕터 01 MOC: 오염 전체 지도
- 01_01-정의-컨텍스트-오염 — 정의와 4가지 실패 유형, 환각 vs 오염 구분
- 01_02-메커니즘-자기강화-루프 — 자기강화가 왜 안 풀리나(출처·반복·요약)
- 01_03-사례-gemini-포켓몬 — 우발적 오염의 실증: TEA 환각과 목표 고착
- 01_08-적대적-오염-위협지형 — 적대적 진입 경로(인젝션·백도어·메모리 오염)
- 01_09-처방-방어전략 — 다층 방어 처방
- 01_11-paper-CaMeL-방어 — CaMeL: 설계로 차단하는 정본 처방
- 01_12-사례-산업-실사고 — 산업 실사고가 주는 교훈
- 09_01-감별진단-5대모드-종합비교 — 5대 모드 종합 감별
- 02 산만 — 오염이 번지는 옆 모드(산만)