볼트 홈: README
깊이읽기 — 컨텍스트 부패: 길이는 상한일 뿐, 보증이 아니다
한 줄 정의
컨텍스트 부패(Context Rot)는 과제 난이도를 똑같이 고정해 두어도 입력 토큰 수가 늘어날수록 LLM의 성능이 비균질적으로(non-uniformly) 무너지는 현상이다. 원인은 내용이 아니라 길이 그 자체다.
왜 중요한가
2024~2025년 LLM 업계의 광고판에는 큰 숫자가 걸렸다. Gemini 1.5 Pro 200만 토큰, GPT-4.1 100만 토큰, Llama 4 Scout 1,000만 토큰. 이 숫자를 본 실무자 대부분은 자연스럽게 이렇게 가정한다. “100만 토큰을 지원한다니, 100만 토큰까지 넣어도 모델이 다 읽고 기억하겠구나.” 그 가정 위에서 RAG 파이프라인은 검색된 문서를 30개씩 욱여넣고, 에이전트는 전체 대화 이력을 매 턴 통째로 다시 보내며, 프롬프트에는 “혹시 모르니” 매뉴얼 전문을 첨부한다.
이 가정이 틀렸다는 데서 이 글은 출발한다. 지원 길이는 천장(ceiling)일 뿐 보증(guarantee) 이 아니다. GPT-4.1은 100만 토큰을 지원하지만, 어휘 매칭을 제거한 NoLiMa 벤치마크에서 신뢰할 만한 유효 길이(effective length)는 16K에 그친다(05_01-정의-컨텍스트-부패). 62배의 간극이다. 광고판의 숫자와 실제로 믿을 수 있는 숫자가 이만큼 벌어져 있다면, “최대 몇 토큰까지 됩니까?”라는 질문 자체가 틀렸다.
처음 배우는 사람이 이 글을 한 편 읽고 나면, 길이가 늘어날 때 모델 안에서 무슨 일이 벌어지는지 감이 잡히도록 썼다. 어텐션이 어떻게 희석되고, 중간이 어떻게 사라지며, 검색과 추론이 어떻게 서로를 잡아먹는지를 차례로 짚는다. 정확한 수치와 근거는 05 부패 챕터의 아토믹 노트로 연결해 두었다.
1. 같은 책, 1000페이지가 되면
비유로 시작하자. 당신에게 책 한 권을 주고 “12쪽 셋째 문단에 나오는 친구 이름이 뭐였지?”라고 묻는다. 30페이지짜리 책이라면 당신은 거의 틀리지 않는다. 그런데 똑같은 문장이 똑같은 위치에 있되, 책이 1000페이지로 불어났다고 하자. 묻는 내용은 완전히 같다. 찾아야 할 문장도 글자 하나 안 바뀌었다. 그런데도 당신의 집중력은 책을 넘기는 동안 서서히 닳고, 비슷하게 생긴 다른 이름들에 한눈을 팔고, 어느 순간 “그런 친구는 안 나왔던 것 같은데”라고 말해 버린다.
이것이 컨텍스트 부패의 핵심 직관이다. 문제가 어려워진 게 아니라 책이 두꺼워졌을 뿐이다. 바로 이 “두꺼워졌을 뿐”이라는 통제 조건이 부패를 다른 모든 실패모드와 갈라놓는 결정적 지점이다.
Chroma Research(Hong·Troynikov·Huber, 2025)가 이 현상을 처음 공식화하면서 쓴 정의가 정확히 이것이다(05_04-paper-context-rot-chroma):
“LLMs do not maintain consistent performance across input lengths… we see increasing non-uniformity in performance as input length grows.”
여기서 반드시 붙잡아야 할 단어가 비균질성(non-uniformity) 이다. 성능이 길이를 따라 매끄럽게 선형으로 떨어진다면 안전 마진을 계산할 수 있다. “50K까지는 95%, 100K까지는 90%” 하는 식으로 말이다. 그러나 부패는 그렇게 점잖게 떨어지지 않는다. 모델마다 다른 지점에서, 불규칙하게, 예고 없이 무너진다. 안전 마진을 미리 계산할 수 없다는 점, 이것이 부패가 무서운 진짜 이유다.
2. 왜 NIAH 만점이 우리를 속였나
“장기 컨텍스트는 해결된 문제”라는 서사는 어디서 왔을까. 범인은 NIAH(Needle in a Haystack) 벤치마크다. 긴 문서(haystack) 속에 짧은 사실(needle)을 숨겨두고 모델이 찾아내는지 보는 테스트인데, 2025년 SOTA 모델들은 여기서 거의 만점을 받는다.
문제는 NIAH가 측정하는 게 사실상 복사라는 데 있다. needle이 “샌프란시스코에서 가장 좋은 일은 샌드위치를 먹는 것”이고 질문이 “샌프란시스코에서 가장 좋은 일은?”이면, 모델은 같은 단어를 입력에서 찾아 그대로 베끼면 된다. 이를 정량화한 것이 ROUGE R-1 점수다. NIAH는 0.905로, 정답이 거의 글자 그대로 입력에 들어 있다는 뜻이다(05_01-정의-컨텍스트-부패).
그런데 현실의 과제는 복사가 아니다. “정원 가꾸기 워크숍에 간 날과 토마토 모종을 심은 날 사이에 며칠이 지났지?”라고 물으면, 모델은 두 날짜를 각각 찾고, 빼고, 의미적으로 연결해야 한다. “며칠”이라는 답은 입력에 글자로 적혀 있지 않다. NoLiMa(Modarressi et al., ICML 2025)가 바로 이 어휘 매칭을 제거한 벤치마크인데, ROUGE R-1이 0.069로 사실상 0이다(05_05-paper-nolima).
어휘의 다리를 끊자 무슨 일이 벌어졌나. 13개 모델 중 11개가 32K 토큰에서 기준 성능의 절반 이하로 추락했다. Command R+는 90.9%에서 7.4%로(-83.5%p), Claude 3.5 Sonnet은 87.5%에서 29.8%로(-57.7%p) 무너졌다. 결국 NIAH 만점은 모델이 긴 컨텍스트를 이해한다는 증거가 아니라, NIAH가 너무 쉬운 시험이었다는 증거였다.
흔한 오해 ①: "1M 토큰 지원 = 1M까지 믿어도 됨"
지원 길이는 모델이 터지지 않고 받아들이는 상한이지, 그 길이까지 정확하게 활용한다는 보증이 아니다. GPT-4.1은 1M을 지원하지만 NoLiMa effective length는 16K다. 고객사에는 “최대 몇 토큰 지원하나요?”가 아니라 “어느 길이까지 신뢰할 만한 성능이 보증되나요?” 를 물어야 한다.
흔한 오해 ②: "NIAH 만점이면 장문 처리가 검증된 것"
NIAH는 리터럴 매칭(복사) 과제다. 실제 에이전트·다중문서 요약·시간 추론은 의미 연상을 요구한다. 같은 모델이 NIAH 만점이어도 NoLiMa·실무 과제에서는 무너질 수 있다. 벤치마크가 무엇을 측정하는지를 먼저 보라.
3. 부패는 “내용 탓”이 아니다 — 가장 결정적인 증거
여기까지 읽으면 자연스러운 반박이 떠오른다. “긴 문서엔 잡음이 많으니까 헷갈리는 거 아냐? 비관련 내용만 걸러내면 되잖아.” 이 직관은 절반만 맞다. 그리고 나머지 절반이 틀렸음을 증명한 연구가 부패를 이해하는 데 가장 중요하다.
Du et al.(2025, Findings of EMNLP)은 논문 제목에 결론을 그대로 박아 넣었다. “Context Length Alone Hurts LLM Performance Despite Perfect Retrieval”(05_03-메커니즘-왜-발생하는가). 이들은 부패의 원인을 한 겹씩 벗겨내는 통제 실험을 설계했다.
먼저 완벽한 검색 조건을 만든다. 관련 정보가 100% 컨텍스트에 들어 있다고 보장한다. 검색 오차가 0이다. 그런데도 길이가 늘면 성능이 13.9%~85% 떨어졌다. 다음으로 비관련 토큰을 공백으로 대체해 잡음을 무해화했다. 그래도 저하는 여전했다. 마지막으로 비관련 토큰을 완전히 마스킹해, 모델이 관련 토큰에만 어텐션하도록 물리적으로 강제했다. 그래도 저하는 사라지지 않았다.
이 마스킹 실험이 왜 결정타인지 짚어 보자. 잡음을 완전히 지웠다는 것은 오염(내용의 질)을 제거했다는 뜻이고, 모델이 관련 토큰만 보도록 강제했다는 것은 위치 편향까지 통제했다는 뜻이다. 그런데도 길이가 길면 성능이 떨어진다. 남은 변수는 단 하나, 위치의 개수, 곧 길이 그 자체뿐이다.
그래서 부패는 “무엇이 들어 있느냐(what)“의 문제가 아니라 “얼마나 많이 들어 있느냐(how much)” 의 문제다. 오염·산만·충돌은 모두 내용을 바꾸거나 빼면 해결된다. 그러나 부패는 내용을 완벽하게 정제해도 길이만 길면 남는다(05_02-분류-다른-실패모드와의-관계).
Chroma의 LongMemEval 실험은 같은 진실을 다른 각도에서 보여준다. 같은 질문을 두고 관련 내용만 추린 Focused(~300토큰) 입력과 전체 이력을 담은 Full(~113K토큰) 입력을 비교했더니, 18개 모델 전체에서 예외 없이 Focused가 Full을 앞섰다(05_01-정의-컨텍스트-부패). 단 하나의 예외도 없었다는 점이 중요하다. “더 많은 정보 = 더 나은 답”이라는 통념이 18:0으로 깨진 것이다.
4. 길이가 늘면 모델 안에서 일어나는 일 — 단계별 서사
이제 부패가 어떻게 일어나는지, 토큰이 쌓이는 과정을 따라가 보자. 세 가지 일이 동시에, 게다가 서로를 악화시키며 벌어진다(05_03-메커니즘-왜-발생하는가).
1단계 — 어텐션이 희석된다. 트랜스포머가 정보를 찾는 주력 기제는 induction head다(Olsson et al., 2022). “앞에서 [A] 다음에 [B]가 나왔으니, 또 [A]가 나오면 [B]다” 식의 표면적 반복 패턴 매칭이다. 그런데 이 기제의 전제는 어휘가 겹친다는 것이다. 질문과 답이 같은 단어를 공유하지 않으면(NoLiMa 조건), 모델은 의미적 연상에만 의존해야 하는데, 컨텍스트가 길어질수록 의미적으로 비슷해 보이는 엉뚱한 토큰들이 어텐션 점수를 나눠 갖고, 진짜 needle의 신호는 묽어진다.
2단계 — 중간이 사라진다. Liu et al.(2024)의 “Lost in the Middle”이 밝힌 U자형 곡선이다. 정보가 컨텍스트 맨 앞(초두 편향)이나 맨 뒤(최신 편향)에 있으면 잘 찾지만, 중간에 묻히면 성능이 급락한다. 여기서 길이와의 연결이 핵심인데, 길이가 늘어날수록 “중간”이라는 구간이 통째로 커진다. 30페이지 책의 중간은 좁지만 1000페이지 책의 중간은 광활하다. 정보가 그 늘어난 중간 어딘가에 떨어질 확률이 높아지고, 그만큼 소실된다.
3단계 — 검색과 추론이 서로를 잡아먹는다. Focused 입력에서 모델은 추론만 하면 된다. Full 입력에서는 “무엇이 관련 있는지 먼저 찾는” 검색 과제가 추가로 얹힌다. 한정된 어텐션 예산을 검색에 쓰고 나면 정작 추론에 쓸 자원이 모자란다. 이것이 이중 과제 병목이다.
이 병목의 얼굴을 Chroma가 포착한 실제 실패 사례에서 볼 수 있다. Claude Sonnet 4에게 113K 토큰 안에 날짜가 명시된 정원 워크숍 질문을 던졌을 때, 모델은 이렇게 답했다:
“I cannot determine the number of days… because the specific dates for these events are not provided in the chat history.”
답은 컨텍스트 안에 분명히 있다. 모델이 찾지 못할 뿐이다. 이것이 부패의 진짜 얼굴이다. 정보의 부재가 아니라 회수의 실패다.
그 아래에는 두 가지 아키텍처 구조가 깔려 있다(05_03-메커니즘-왜-발생하는가). 하나는 attention sink다. softmax가 확률 질량을 어디든 분배해야 하므로, 마땅히 attend할 곳이 없으면 첫 토큰에 잉여 질량을 버린다. 컨텍스트가 길수록 더 많은 쿼리 스텝이 같은 sink로 질량을 흘려보내고, needle에 갈 어텐션 예산이 누적적으로 줄어든다. 다른 하나는 RoPE의 장거리 감쇠다. 멀리 떨어진 토큰 쌍의 내적이 평균적으로 약해져, 끝에서 답을 만들 때 멀리 있는 초·중반 증거일수록 신호가 흐려진다. 둘 다 프롬프트로는 못 지우는, 모델 내부의 물리적 성질이다. 그래서 마스킹해도 부패가 남는다. 내용을 지워도 위치의 개수는 남기 때문이다.
5. 어텐션은 “없음”을 볼 수 없다 — 부재 감지의 실패
부패의 마지막 조각은 가장 미묘하다. AbsenceBench(Fu et al., 2025)는 “있는 것 찾기”가 아니라 “없는 것 알아채기” 를 테스트한다(05_03-메커니즘-왜-발생하는가).
어텐션의 수식 softmax(QK^T/√d)·V을 떠올려 보자. 모델이 무언가에 주의를 기울이려면 그것이 Key 벡터로 존재해야 한다. 그런데 부재(absence)는 어떤 Key에도 대응하지 않는다. 문서에서 빠진 정보는 attend할 대상 자체가 없다. 그래서 모델은 “이게 원래 없는 건지, 어딘가 있는데 내가 못 찾는 건지”를 구조적으로 구별하지 못한다.
여기서 실무적 함의가 두 가지 나온다. 하나, 부패는 수십만 토큰의 극단적 장문에만 오는 게 아니다. Claude 3.7 Sonnet이 고작 5K 토큰 조건에서 부재 감지 F1이 69.6%에 그쳤다. 둘, Claude 계열이 긴 컨텍스트에서 보이는 abstention(답변 거부) 급증도 여기서 설명된다. 정보가 컨텍스트에 분명히 있는데도 “찾을 수 없다”고 판단해 버린다. needle 회수 실패가 부재로 오인되는 것이다.
이 “감시자도 못 본다”는 통찰을 2026 연구가 한 층 더 무겁게 만든다. 부재 감지의 약함이 답을 내는 모델의 문제였다면, ‘Classifier Context Rot’(arXiv:2605.12366)은 답을 채점하는 분류기마저 길이에 부패함을 보였다. 둘을 겹치면 최악의 시나리오가 그려진다. 장문 구간에서 모델은 멀쩡한 답을 “없다”고 abstain하고, 그 출력을 거르는 가드레일 분류기도 함께 흐려져 오판을 잡지 못한다. 부재 감지의 실패가 회수 레이어와 평가 레이어 양쪽에서 동시에 터지는 셈이다(아래 7절).
흔한 오해 ③: "모델이 '정보가 없다'고 하면 진짜 없는 것"
부재 감지가 구조적으로 약하므로, 모델의 “찾을 수 없음”은 정보의 부재가 아니라 회수의 실패일 수 있다. 특히 보수적인 모델(Claude)은 긴 컨텍스트에서 환각 대신 abstention을 택해 멀쩡히 있는 답을 “없다”고 보고한다. 환각이 줄어드는 대신 사용성이 깎이는 트레이드오프다.
6. 그래서 어떻게 설계하나
메커니즘을 알면 처방이 따라온다(05_07-처방-완화-체크리스트). 핵심은 단순하다. 부패의 원인이 길이라면, 길이를 줄이는 것이 정공법이다.
- 컨텍스트 최소화가 곧 정확도 문제다. Anthropic Engineering의 표현으로 “원하는 결과의 가능성을 최대화하는, 가장 작은 고신호 토큰 집합”을 찾아라. 토큰을 줄이는 건 비용 절감이 아니라 정확도 향상이다(Focused 18:0 Full).
- 검색과 추론을 분리하라. 한 호출에 둘 다 시키지 말고, 검색은 검색대로(또는 서브에이전트로) 끝낸 뒤 추론에는 추린 결과만 넣어라. 이중 과제 병목을 호출 분리로 해소하는 것이 05_08-에이전트-시사점과 06 해결전략의 핵심이다.
- 위치를 설계하라. 핵심 지시는 앞에, RAG 결과는 질문 직전(끝)에 둔다. U자형의 바닥(중간)에 중요 정보를 묻지 마라. 다만 위치 최적화는 부패의 한 경로만 막는다. Du et al.은 증거를 질문 바로 앞에 둬도 저하가 남음을 확인했다.
- 디스트랙터를 적극 배제하라. 주제만 비슷하고 정답은 아닌 문서가 가장 해롭다. NoLiMa에서 어휘 겹치는 무관 문장 하나만으로 GPT-4o의 effective length가 8K에서 1K로 급락했다. RAG는 recall보다 precision이다.
에이전트 맥락에서는 이 모든 게 더 위험하다. 멀티턴 루프에서 도구 출력과 이전 사고가 컨텍스트에 계속 쌓이면, 아무도 악성 내용을 넣지 않았는데도 길이만으로 부패가 쌓인다(05_08-에이전트-시사점). 그래서 압축·요약·서브에이전트 위임이 에이전트 설계의 필수 위생이다.
부패를 다른 실패모드와 헷갈리지 않으려면 09_01-감별진단-5대모드-종합비교의 감별 흐름을 함께 보라. “내용이 무해하고 위치를 최적화했는데도 길이만 길면 무너진다”가 부패의 지문(指紋)이다.
7. 2026 연구가 더해준 것
2026년 부패 연구는 “어디까지가 부패인가”의 경계를 두 방향으로 넓혔다. 하나는 임계점의 정량화다. 본문이 강조한 비균질성, 곧 부드럽게가 아니라 예고 없이 특정 지점에서 무너진다는 성질을, 자연 길이분포 분석으로 그 임계 길이까지 실제로 짚어내는 연구가 나왔다(arXiv:2601.15300). “안전 마진을 미리 계산할 수 없다”던 본문 진술은 이제 “모델별 임계점을 측정해 마진을 경험적으로 그을 수 있다”로 한 칸 전진한 셈이다. 길이별 성능·품질 저하의 상관도 별도로 확인됐다(arXiv:2601.11564). 다른 하나는, 더 중요한 확장으로, 부패가 생성기만의 병이 아니라는 발견이다. ‘Classifier Context Rot’(arXiv:2605.12366)은 모니터·분류기, 즉 가드레일 자체도 입력이 길어지면 성능이 무너짐을 보였다. 본문 5절(어텐션은 부재를 못 본다)이 회수기의 한계였다면, 이건 감시자의 한계다. 함의가 날카롭다. 긴 컨텍스트를 LLM 판정기로 감시하는 설계는, 정작 가장 위험한 장문 구간에서 판정기 자신이 부패해 안전망이 같이 찢어진다. “검색과 추론을 분리하라”는 본문 처방에, “평가·가드레일도 짧은 컨텍스트에서 돌려라”가 2026형 한 줄로 더해진다(05 부패, 07 거버넌스).
한 문단 요약
컨텍스트 부패는 입력이 길어질수록 과제 난이도가 똑같아도 성능이 비균질적으로 무너지는 현상이며, 원인은 내용이 아니라 길이 자체다. NIAH 만점은 복사 능력이었을 뿐이고, 어휘 매칭을 지운 NoLiMa에서 GPT-4.1의 유효 길이는 16K(지원 1M의 62분의 1)에 그친다. Du et al.이 비관련 토큰을 완전히 마스킹해도 저하가 남는다는 것을 보여 부패가 길이 그 자체에서 온다는 것을 증명했고, Chroma의 Focused(~300tok) > Full(~113K) 결과는 18개 모델 전체에서 예외가 없었다. 안에서는 어텐션 희석·U자형 위치 편향·검색과 추론의 이중 과제 병목이 attention sink와 RoPE 감쇠 위에서 동시에 작동하며, 어텐션은 부재를 볼 수 없어 멀쩡히 있는 답을 “없다”고 보고하기도 한다. 처방의 정공법은 길이 최소화·검색과 추론 분리·위치 설계·디스트랙터 배제다.
graph TD L["입력 길이 증가<br/>length up"] --> M1["어텐션 신호 희석<br/>induction head 한계"] L --> M2["U자형 위치 편향<br/>중간 구간 확대"] L --> M3["검색과 추론 이중 과제<br/>어텐션 예산 잠식"] L --> M4["attention sink와 RoPE 감쇠<br/>아키텍처 누적 침식"] M1 --> R["성능 비균질 저하<br/>= 컨텍스트 부패"] M2 --> R M3 --> R M4 --> R R --> F1["needle 회수 실패"] R --> F2["부재로 오인한 abstention"] R --> RX["처방: 길이 최소화<br/>검색-추론 분리<br/>위치 설계<br/>디스트랙터 배제"]
요약·체크리스트
- 지원 길이 != 유효 길이. “1M 지원”은 천장이지 보증이 아니다. GPT-4.1 NoLiMa effective length = 16K.
- NIAH 만점을 믿지 마라. NIAH(ROUGE 0.905)는 복사 과제. NoLiMa(0.069)에서 13개 중 11개 모델이 32K에서 반토막.
- 부패의 원인은 길이 자체. 검색이 완벽하고 잡음을 마스킹해도 13.9~85% 저하 지속(Du et al.). 내용(what)이 아니라 양(how much)의 문제.
- Focused > Full은 18:0. 관련 내용만 추린 ~300토큰이 전체 이력 ~113K토큰을 전 모델에서 이겼다. 토큰 줄이기는 정확도 문제.
- 메커니즘 4종 동시 작동. 어텐션 희석 / U자형 위치 편향 / 검색-추론 이중 과제 / attention sink·RoPE 누적 침식.
- 모델의 “없다”를 의심하라. 어텐션은 부재를 attend 못 한다. 5K에서도 부재 감지 F1 69.6%. abstention은 회수 실패일 수 있다.
- 처방 4종. 길이 최소화 · 검색과 추론 분리 · 핵심 정보 앞/끝 배치 · 주제 유사 디스트랙터 배제.
기억할 핵심 직관 한 줄: 같은 책이라도 1000페이지가 되면 특정 문장을 찾는 집중력이 서서히 닳는다. 지원 길이는 상한일 뿐, 보증이 아니다.
관련 노트
- 05 부패 — 챕터 전체 맵
- 05_01-정의-컨텍스트-부패 — 정의·NIAH 한계·핵심 수치
- 05_02-분류-다른-실패모드와의-관계 — 오염·충돌·위치 편향과의 분류학적 차별점
- 05_03-메커니즘-왜-발생하는가 — 6대 메커니즘 심층 분석
- 05_04-paper-context-rot-chroma — Chroma 18개 모델 실험 상세
- 05_05-paper-nolima — NoLiMa 어휘 매칭 제거 벤치마크
- 05_07-처방-완화-체크리스트 — 대응 처방전
- 05_08-에이전트-시사점 — 멀티턴·툴 루프에서의 부패 누적
- 09_01-감별진단-5대모드-종합비교 — 5대 실패모드 감별진단