jacobhan.me

컨텍스트 창은 커지는데 왜 성능은 떨어질까

토큰 100만 시대, 무엇을 넣느냐가 더 중요해지는 이유

2026년 6월 26일


새 모델이 나올 때마다 빠지지 않는 자랑거리가 컨텍스트 창(context window) 크기다. 컨텍스트 창은 모델이 한 번에 "보면서" 추론할 수 있는 작업 기억의 크기로, 시스템 프롬프트·이전 대화·첨부한 문서·모델의 직전 답변까지 모두 이 안에 담긴다.

경쟁은 숫자로 표현된다. Anthropic은 2026년 3월 Claude의 100만(1M) 토큰 창을 정식(GA, General Availability, 정식 출시) 기능으로 풀었다. OpenAI의 차기 모델은 150만 토큰까지 늘어날 것이라는 관측이 도는데, 다만 이 수치는 아직 공식 스펙으로 확정된 것이 아니라 개발자 로그와 정황에서 나온 추정치다. 어느 쪽이든, 100만 토큰이면 책 열 권 분량을 한꺼번에 넣을 수 있다는 설명이 과장은 아니다.

그런데 정작 실무에서 더 중요한 질문은 따로 있다. 창이 커지면 결과도 그만큼 좋아질까? 답은 "그렇지 않다"에 가깝다.

큰 창이 곧 좋은 성능은 아니다

여러 연구와 벤치마크가 한목소리로 가리키는 사실이 있다. 컨텍스트에 토큰이 쌓일수록, 창의 최대 크기와 무관하게 모델의 정확도와 회상 능력이 서서히 떨어진다는 것이다. 이 현상에는 '컨텍스트 부패(context rot)'라는 이름까지 붙었다. Anthropic의 기술 문서도 더 많은 맥락이 자동으로 더 나은 결과를 뜻하지는 않으며, 토큰 수가 늘수록 정확도와 회상이 저하된다고 명시한다. 그래서 무엇을 컨텍스트에 담을지 고르는 일이 공간을 얼마나 확보했는지 못지않게 중요해진다.

정보의 '위치'가 성능을 가른다

컨텍스트가 길어질 때 성능 저하는 균일하게 일어나지 않는다. 정보가 어디에 놓였는지가 회상률을 크게 좌우한다. 모델은 대체로 가장 앞에 들어온 정보와 가장 뒤에 들어온 정보를 잘 기억하고, 한가운데 묻힌 정보는 자주 놓친다. 정확도를 위치에 따라 그려 보면 양 끝이 높고 가운데가 푹 꺼진 U자 모양이 나온다. 영어권에서는 이 현상을 '중간에서 길을 잃다(lost in the middle)'라고 부른다.

정보 위치에 따른 회상 정확도 U자 곡선 컨텍스트의 처음과 끝에 놓인 정보는 잘 회상되고 중간에 놓인 정보는 회상률이 떨어지는 U자 형태 정보의 위치에 따른 회상 정확도 높음 낮음 회상 정확도 처음 중간 컨텍스트 안에서 정보가 놓인 위치 중간 정보는 묻힌다
정보가 컨텍스트의 처음·끝에 있으면 잘 회상되지만, 한가운데 있으면 회상률이 떨어진다.

왜 이런 일이 생길까

원인은 크게 두 갈래다. 첫째, 모델이 토큰들 사이의 관계를 따지는 '어텐션(attention, 주의 집중)' 메커니즘은 토큰이 많아질수록 한정된 주의를 더 넓게 나눠 써야 한다. 관련 없는 토큰이 늘어나면 정작 중요한 토큰으로 쏠려야 할 신호가 희석된다. 둘째, 모델이 학습 과정에서 접한 글들도 대개 중요한 내용을 도입부와 결말에 배치하는 경향이 있어, 모델 역시 양 끝을 더 중시하도록 길들여진다. 이 두 요인이 겹쳐 앞서 본 U자 곡선이 만들어진다.

내부에서는 무슨 일이 일어나나

조금 더 안을 들여다보자. 사용자가 채팅창이나 코딩 도구에 질문을 입력하면, 그 글은 잘게 쪼개져 토큰(token)이라는 단위로 번호가 매겨지고 그래픽 처리 장치(GPU, Graphics Processing Unit)의 영상 메모리(VRAM, Video RAM)에 순서대로 올라간다. 모델은 각 토큰을 처리하면서 '키(key)'와 '값(value)'이라는 중간 계산 결과를 만들어 두는데, 이것을 모아 둔 것이 KV 캐시(Key-Value cache, 키-값 캐시)다. 같은 토큰을 매번 다시 계산하지 않으려고 저장해 두는 일종의 중간 작업물이다.

여기서 흔한 오해가 하나 있다. "입력이 조금이라도 바뀌면 캐시를 통째로 비우고 처음부터 다시 계산한다"는 생각이다. 실제 동작은 그보다 영리하다. 시스템은 새 입력을 앞에서부터 기존 캐시와 맞춰 보다가 '처음으로 달라지는 지점'을 찾고, 그 앞의 일치하는 부분은 캐시를 그대로 재사용하며 달라진 지점부터 끝까지만 다시 계산한다. 이를 접두(prefix) 매칭이라고 한다.

KV 캐시 재사용 범위 뒤에 이어붙이면 앞부분 캐시를 전부 재사용하고, 앞부분을 수정하면 달라진 지점부터 끝까지 다시 계산한다 KV 캐시는 어디까지 재사용되나 ① 대화를 뒤에 이어붙일 때 시스템 프롬프트 지난 대화 새 입력 ← 앞부분 캐시 그대로 재사용 (빠르고 저렴) ② 앞부분 내용을 수정할 때 변경 지점 매칭 이 지점부터 끝까지 다시 계산 재사용(캐시 적중) 다시 계산
대화를 뒤에 이어붙이기만 하면 앞부분 캐시는 전부 재사용된다. 반대로 앞쪽 내용을 고치면 그 지점부터 끝까지 다시 계산해야 한다.

이 차이가 실무에서 갖는 의미는 분명하다. 일반적인 대화처럼 뒤에 내용을 덧붙이기만 하면, 앞에 쌓인 방대한 맥락의 캐시가 그대로 쓰여 응답이 빠르고 비용도 적게 든다. 반대로 맨 앞의 시스템 프롬프트(ChatGPT·Claude의 '사용자 설정'이나 코딩 도구의 지침 파일 같은 것)나 대화 앞쪽 내용을 도중에 바꾸면, 그 뒤의 캐시가 무효가 되어 상당 부분을 다시 계산하게 된다. 새 세션을 시작하면 모델은 가장 먼저 이 시스템 프롬프트부터 다시 읽어 들인다.

그래서, 컨텍스트를 가볍게 유지해야 한다

정리하면, 창을 키우는 일과 성능을 높이는 일은 같지 않다. 큰 창은 '한 번에 담을 수 있는 양'의 상한을 올려 줄 뿐이고, 좋은 결과는 그 안에 무엇을 얼마나 넣느냐에서 갈린다. 그래서 실력은 다음과 같은 컨텍스트 관리에서 드러난다.

특히 긴 작업에서 효과가 큰 방법이 '세션 인계(handoff)'다. 컨텍스트가 일정 수준(예컨대 20만·40만 토큰)에 다다르면 경고를 띄우고, 지금까지의 결정과 현재 상태 같은 핵심만 짧은 메모로 추려 둔 뒤, 무거워진 세션은 비우고 새 세션에서 그 메모만 들고 작업을 이어가는 방식이다. 누적된 잡다한 맥락을 버리고 모델의 '머리'를 다시 가볍게 만드는 것이다.

세션 인계 흐름 컨텍스트가 임계치에 가까워지면 핵심만 메모로 추려 저장하고 새 세션에서 가벼운 컨텍스트로 작업을 이어간다 컨텍스트가 무거워지면 세션을 갈아탄다 세션 1 임계치 경고 handoff 메모 새 세션 재개 작업하며 누적 200k·400k 등 핵심 결정·상태만 가벼운 컨텍스트로 컨텍스트 ~85% 임계점에서 알림 추려서 저장 컨텍스트 ~15% 창이 아무리 커도, 무거워진 컨텍스트는 비우고 핵심만 넘겨 다시 시작한다
컨텍스트가 임계점에 가까워지면 핵심만 메모로 넘기고, 새 세션에서 가벼운 상태로 작업을 이어간다.

정리

새 모델의 컨텍스트 창이 100만, 150만으로 늘었다는 소식에 마냥 반길 일은 아니다. 창의 크기 자체가 결과의 질을 보장하지 않기 때문이다. 오히려 창이 커질수록, 그 큰 공간을 무엇으로 채울지 고르는 판단이 더 중요해진다. 모델이 가장 좋은 답을 내놓는 조건은 '많은 맥락'이 아니라 '정돈된 맥락'이다.

핵심 원칙 창을 키우는 것은 도구의 몫이고, 그 안을 가볍고 정확하게 유지하는 것은 사용자의 몫이다.