AI 코딩 에이전트가 같은 버그를 3번씩 반복하는 이유 — 컨텍스트가 길어지면 기억을 잃는다
지난 5월 23일 API 통합 작업 중, Cursor가 똑같은 import 경로 오류를 5번째 반복했을 때, 저는 화면을 껐다 켰어요. 프롬프트를 3번이나 고쳐 썼는데도 같은 실수를 반복하더라고요. AI 코딩 에이전트가 같은 버그를 계속 내는 건 프롬프트 문제가 아니라 컨텍스트 관리 문제라고 봅니다. 세션이 길어질수록 초반 지시는 희석되고, 에이전트는 자기가 방금 고친 걸 잊거든요.
왜 AI 코딩 에이전트는 같은 버그를 3번씩 반복할까요?
직접 겪은 패턴을 먼저 얘기할게요. Claude Code로 React 컴포넌트 5개를 리팩토링하던 날, 첫 번째 시도에서 prop 타입 오류가 났어요. 수정 지시를 내렸더니 두 번째 시도에서 같은 오류가 다른 파일에 재현됐습니다. 세 번째 시도에선 첫 번째 파일로 돌아가서 또 같은 오류를 냈죠. 세션 시작 후 35분이 지난 시점이었어요.
Cursor로 10개 파일을 동시에 수정할 때도 비슷했어요. 초반 10분간은 완벽하게 지시를 따르다가, 20분 넘어가자 파일 상단에 있는 타입 정의를 무시하고 하단에서 중복 선언을 만들기 시작했습니다. 제가 "위에 이미 선언했잖아요"라고 지적하면 "아, 맞네요" 하고 고치는데, 다음 파일에서 또 같은 짓을 반복했어요.
세션이 길어지면 초반 지시를 잊는 이유는?
원인은 크게 세 가지예요. 토큰 제한, 컨텍스트 윈도우 슬라이딩, 모델의 장기 의존성 한계입니다.
Claude 공식 가이드를 보면 컨텍스트 윈도우가 200K 토큰이라고 나와 있어요. 한글 기준으로 대략 10만 자 정도인데, 파일 10개에 대화 이력까지 합치면 30분 안에 채워집니다. 제가 직접 세어봤더니 Claude Code 세션 40분 시점에서 누적 토큰이 18만을 넘더라고요. 윈도우가 꽉 차면 오래된 대화부터 밀려나요. 제가 초반에 "절대 lodash 쓰지 마세요"라고 했던 지시가 25분 후엔 컨텍스트 밖으로 사라진 거죠.
컨텍스트 윈도우 슬라이딩도 문제예요. 모델이 최근 입력에 가중치를 더 주기 때문에, 세션 초반 지시는 후반으로 갈수록 영향력이 떨어져요. 저는 30분 넘는 세션에서 초반 지시를 3번 이상 재확인해야 했어요.
모델 자체의 장기 의존성 한계도 있어요. Transformer 구조상 멀리 떨어진 토큰 간 관계는 약해지거든요. 이건 모델 구조 문제라 프롬프트로 해결이 안 돼요.
그럼 어떻게 대처해야 할까요?
실제로 효과 봤던 방법 세 가지를 공유할게요.
첫째, 세션을 20분 단위로 분할하세요. 저는 타이머를 맞춰놓고 20분마다 새 세션을 시작해요. 이전 세션 결과를 명시적으로 요약해서 다음 세션 첫 프롬프트에 넣습니다. "앞 세션에서 prop 타입을 interface로 통일했고, lodash는 금지했어요"처럼요. 이렇게 하면 컨텍스트 윈도우를 리셋하면서도 연속성을 유지할 수 있어요.
둘째, 명시적 컨텍스트를 문서화하세요. 저는 프로젝트 루트에 .ai-context.md 파일을 만들어서 금지 사항, 코딩 컨벤션, 파일 구조를 적어둬요. 매 프롬프트마다 ".ai-context.md 참고해서"라고 붙이면, 세션이 길어져도 핵심 규칙은 안 잊어버립니다. 실제로 이 방법 쓴 후 반복 오류가 70% 줄었어요.
셋째, 재시도 전에 컨텍스트를 체크하세요. 에이전트가 같은 실수를 2번 반복하면, 프롬프트를 고치기 전에 "지금 세션에서 내가 뭘 지시했는지 요약해봐"라고 물어봐요. 컨텍스트 누락이 확인되면 그때 세션을 초기화하는 게 더 빨라요.
예상되는 반론에 미리 답해볼게요
"프롬프트를 더 명확하게 쓰면 되지 않나요?"라고 물으실 수 있어요. 맞는 말이에요. 명확한 프롬프트는 기본입니다. 하지만 제 경험상 프롬프트가 아무리 명확해도 세션이 30분을 넘기면 초반 지시는 희석돼요. 3번째 재시도부터는 프롬프트 개선보다 컨텍스트 초기화가 더 효과적이었습니다.
"그럼 AI 코딩 도구가 아직 실무에 부족한 거 아닌가요?"라는 의견도 있을 거예요. 이 반론은 부분적으로 수용해요. 단일 세션 장시간 작업엔 확실히 한계가 있어요. 하지만 세션을 20분 단위로 분할하고 명시적 컨텍스트를 문서화하면 이 문제는 충분히 우회 가능합니다. 저는 이 방법으로 하루 평균 4시간씩 AI 코딩 도구를 쓰는데, 생산성은 여전히 수작업 대비 2배 이상이에요.
반복 오류는 도구 결함이 아니라 컨텍스트 관리 실패예요
AI 코딩 에이전트가 같은 버그를 반복하는 건 모델이 멍청해서가 아니에요. 컨텍스트 윈도우가 유한하고, 세션이 길어지면 초반 정보가 희석되는 구조적 한계 때문입니다. 이 사실을 알고 나면 대처법은 명확해져요. 세션 분할, 명시적 컨텍스트 문서화, 재시도 전 컨텍스트 체크.
여러분은 몇 번째 재시도에서 컨텍스트를 초기화하시나요? 저는 2번 반복되면 바로 새 세션을 시작하는 게 가장 효율적이었어요. 프롬프트 개선에 10분 쓰느니 컨텍스트 리셋에 1분 쓰는 게 낫더라고요.
자주 묻는 질문
Q. 컨텍스트 윈도우 200K 토큰이면 충분히 큰 거 아닌가요?
A. 코드는 토큰 소모가 빨라요. 파일 1개당 평균 3000~5000 토큰, 대화 이력까지 합치면 30분 안에 10만 토큰 넘어갑니다. 특히 JSON이나 TypeScript 타입 정의는 토큰 밀도가 높아서 금방 차요.
Q. Cursor와 Claude Code 중 어느 쪽이 컨텍스트 관리가 나은가요?
A. 제 경험상 Claude Code가 조금 나아요. 같은 작업 기준으로 Claude Code는 30분까지, Cursor는 25분까지 안정적이었어요. 하지만 둘 다 40분 넘어가면 명시적 관리가 필요한 건 마찬가지입니다.
Q. 세션을 분할하면 코드 일관성이 깨지지 않나요?
A. 이전 세션 요약을 다음 세션 첫 프롬프트에 3~5줄로 넣으면 일관성은 유지돼요. "앞 세션에서 useState 대신 useReducer로 통일했고, API 호출은 모두 try-catch로 감쌌어요" 정도면 충분합니다.