뉴스레터를 운영하는 4개의 AI 에이전트를 몇 달간 돌려보니, 메모리보다 컨텍스트 윈도우가 문제였습니다
I've had four long running agents running my newsletter for months. The hard part wasn't memory, it was the context window
핵심 요약
장기 실행 AI 에이전트의 컨텍스트 윈도우 한계를 극복하기 위해 체크포인트 기반의 주기적 세션 초기화 방식을 도입한 경험담입니다.
- 컨텍스트 윈도우 관리 — 에이전트가 메모리를 잃지 않도록 체크포인트를 생성하고 세션을 새로 고침함
- 체크포인트 검증 — 에이전트가 빈 체크포인트로 재시작하지 않도록 강제하여 오류를 방지함
- 상태와 지시 분리 — 과거의 기록을 명령이 아닌 데이터로 취급하여 에이전트의 오작동을 최소화함
- 에이전트의 기만 방지 — 작업 완료를 거짓으로 보고하는 에이전트의 습성을 테스트로 걸러냄
내 뉴스레터(The AIgent, 구독자 9천 명 육박)는 Titus, Pheme, Davinci, Metis라고 이름 붙인 4개의 Claude Code 에이전트가 매일 굴리고 있다. Titus는 전체적인 관리와 정리를 맡고, Pheme는 에디터 겸 뉴스레터 매니저, Davinci는 빌더, Metis는 작업 배분을 담당함. 물론 나가는 모든 내용은 내가 직접 검수한다.
근데 예상치 못한 문제가 터짐. 가장 먼저 맛탱이 간 건 메모리나 도구 쪽이 아니었음. 바로 컨텍스트 윈도우였다. 에이전트가 오래 돌아가면 컨텍스트가 꽉 차버리는데, 이때 압축(손실 압축 요약으로 대충 넘기기)을 하거나, 아니면 싹 다 밀어버리고 10분 동안 처음부터 다시 설명해줘야 함. 며칠씩 계속 돌아가야 하는 시스템에선 둘 다 답이 없더라.
그래서 지금은 에이전트마다 알아서 리프레시하게 바꿨다. 컨텍스트가 꽉 차면 체크포인트를 만들고, 확인하고, 싹 비운 다음, 새로운 세션이 제대로 시작됐는지 체크하고 체크포인트부터 다시 이어가는 방식임. 확인 안 되면 절대 안 비운다.
실제로 굴려보면서 배운 몇 가지 팁:
체크포인트를 맹신하지 마라. 라이브 에이전트 확인해보니까 4개 중 3개가 다음 할 일이 없는 체크포인트로 복구될 뻔했음. 지금은 빈 체크포인트로는 복구 안 되게 막아놨다.
저장된 메모리는 명령어가 아니라 데이터로 취급해라. 에이전트가 이전에 쓴 내용이 다음 세션에 명령을 내리게 두면 안 됨.
에이전트들은 일 다 끝난 척 구라를 친다. 속도 테스트 돌릴 때, 에이전트가 실제로 순환 작업을 안 하고 세션 하나에서 "완료" 마커를 여러 번 찍으면서 끝났다고 우기더라. 그 세션은 바로 폐기함.
실패할 때마다 테스트 코드를 짜서 수정했고, 그건 다시 오픈 소스 버전에 반영했다.
분명히 말하는데, 이건 내가 이렇게 쓰고 있다는 거지 뭐 대단한 성과를 냈다는 건 아님. 지금까지 나온 유일한 공식 결과는 에이전트 하나로 11번 연속 깔끔하게 리프레시 성공했다는 거 정도.
실무에서 에이전트 돌리는 다른 사람들은 이 문제 어떻게 해결하는지 궁금하다. 그냥 압축하게 두냐, 아니면 주기적으로 재시작하냐? 아니면 다른 방법이 있나?
(내가 만든 하네스는 무료 오픈 소스임. 규칙에 따라 링크는 댓글에 남긴다.)

