Agent 설계 패턴
장기 컨텍스트 Agent의 세 가지 전략
태스크가 여러 컨텍스트 윈도우에 걸쳐 진행될 때, 새 윈도우마다 기억이 초기화됩니다. 프로덕션 환경에서 검증된 세 가지 전략으로 이 근본적 도전에 대응하여, Agent가 장기 태스크에서 일관성과 효율성을 유지할 수 있습니다.
근본적 도전
장기 태스크의 기억 소실 문제
복잡한 코딩 태스크는 Agent가 수십 단계의 작업을 수행하며 수만 Token의 대화 기록을 생성할 수 있습니다. 컨텍스트 윈도우가 가득 찰 때, 시스템은 딜레마에 직면합니다:
Option A: 새 윈도우를 시작하면, 새 윈도우는 아무것도 기억하지 못하고 Agent가 이미 완료한 작업을 반복합니다.
Option B: 기존 윈도우에서 계속 작업하면, Token이 증가함에 따라 모델의 어텐션이 희석되어 성능이 저하됩니다.
이것은 이론적 문제가 아닙니다. Claude Code, Cursor, Devin 같은 제품들이 매일 이 문제를 해결하고 있습니다.
Option A: 새 윈도우를 시작하면, 새 윈도우는 아무것도 기억하지 못하고 Agent가 이미 완료한 작업을 반복합니다.
Option B: 기존 윈도우에서 계속 작업하면, Token이 증가함에 따라 모델의 어텐션이 희석되어 성능이 저하됩니다.
이것은 이론적 문제가 아닙니다. Claude Code, Cursor, Devin 같은 제품들이 매일 이 문제를 해결하고 있습니다.
전략 1
1
Compaction
컨텍스트 압축
대화가 컨텍스트 윈도우 한계에 가까워지면, LLM 호출 한 번으로 기존 대화를 요약합니다: 핵심 정보는 유지하고 불필요한 세부 사항은 제거한 후, 압축된 컨텍스트에서 작업을 계속합니다.
- 핵심 결정: 무엇을 유지하고 무엇을 버릴지 선택하는 것입니다. 이는 정보 이론적 문제로, 모든 Token이 동등하지 않으며 일부 정보는 손실되면 복구할 수 없습니다.
- 저위험 작업: 오래된 tool call 결과(예: 파일 목록, 검색 출력) 정리 - 일반적으로 후속 추론에 영향을 주지 않습니다.
- 고위험 작업: 아키텍처 결정의 추론 과정이나 미해결 버그 설명을 삭제하면 Agent가 같은 실수를 반복하게 됩니다.
- Claude Code 실무 사례: 아키텍처 결정과 미해결 버그 정보는 유지하고, 중복된 파일 내용 출력과 완료된 태스크의 중간 단계는 삭제합니다.
실무 팁
압축 시 LLM이 생성하는 요약은 구조화되어야 합니다 — 자유형 텍스트는 정보를 빠르게 찾기 어렵습니다. 예: "완료: [목록] | 미완료: [목록] | 핵심 결정: [목록] | 알려진 문제: [목록]" 형식으로 작성하면 후속 추론에서 필요한 정보를 빠르게 찾을 수 있습니다.
전략 2
2
Structured Note-taking
구조화된 메모
Agent가 실행 중에 대화 기록에만 의존하지 않고 핵심 정보를 외부 파일에 능동적으로 기록합니다. 컨텍스트가 초기화(새 윈도우)되면, 메모 파일에서 정보를 읽어 기억을 복원합니다.
- 핵심 아이디어: 단기 기억(컨텍스트 윈도우)을 장기 기억(파일 시스템)으로 외부화하여 윈도우 간 정보 연속성을 구현합니다.
- Claude Code 실무 사례: TODO list 파일을 유지하며 단계마다 업데이트합니다. 컨텍스트가 압축되거나 초기화되어도 TODO를 열면 진행 상황을 즉시 파악할 수 있습니다.
- Claude 포켓몬 플레이 사례: Agent가 게임 메모 파일을 유지하며 지도 위치, 획득한 아이템, 다음 계획을 기록했습니다. 새 대화를 시작할 때마다 이 메모를 먼저 읽어 기억을 이어갔습니다.
- 핵심 설계 원칙: 메모 형식은 고정되고 구조화되어야 합니다 — 자유형 산문은 읽어올 때 내용 이해에 추가 Token이 필요합니다.
Compaction과 비교
Compaction은 기존 정보를 압축하여 계속 사용하고, Note-taking은 정보를 외부에 저장했다가 나중에 가져옵니다. 전자는 연속 작업 시나리오에 적합하고, 후자는 중단될 수 있거나 여러 세션에 걸쳐 이어가야 하는 시나리오에 적합합니다. 두 가지를 함께 사용할 수도 있습니다.
전략 3
3
Sub-agent Architecture
Sub-agent 아키텍처
오케스트레이터 Agent가 깊은 탐색이 필요한 서브태스크를 Sub-agent에게 위임합니다. Sub-agent는 독립적인 컨텍스트 윈도우에서 작업하며(수만 Token을 소비할 수 있음), 최종적으로 오케스트레이터에게 정제된 요약(1,000~2,000 Token)만 반환합니다.
- 핵심 가치: 관심사 분리 + 컨텍스트 격리. Sub-agent의 작업 초안이 오케스트레이터의 컨텍스트를 오염시키지 않습니다.
- Token 경제학: Sub-agent가 코드 읽기, 의존성 분석, 추론에 내부적으로 30,000 Token을 소비하더라도, 오케스트레이터에게는 1,500 Token의 결론만 보고합니다. 오케스트레이터의 컨텍스트는 간결하게 유지됩니다.
- 병렬 처리 우위: 여러 Sub-agent가 동시에 작업하며 각각 다른 방향을 탐색하고, 마지막에 오케스트레이터가 결과를 통합합니다. 단일 Agent의 직렬 탐색보다 훨씬 빠릅니다.
- 실제 적용 사례: Cursor의 background agent와 Claude Code의 Task tool은 모두 Sub-agent 아키텍처의 구현입니다.
비유
CEO(오케스트레이터 Agent)가 3명의 부서장(Sub-agent)에게 각각 경쟁사 조사, 시장 분석, 기술 평가를 맡긴다고 상상해 보세요. 각 부서장은 일주일(많은 Token)을 사용할 수 있지만, CEO에게 보고하는 것은 한 페이지 PPT(정제된 요약)뿐입니다. CEO의 인지 대역폭은 항상 전략적 수준에 유지됩니다.
JIT Context vs 사전 로딩
사전 로딩(Preloading)
대화 시작 시 정보를 컨텍스트에 미리 주입
- CLAUDE.md / Rules 파일 직접 로드
- 사용자 설정, 프로젝트 구성
- 자주 사용하는 컨텍스트 정보
- 장점: 즉시 사용 가능, 추가 호출 불필요
- 단점: 사용 여부에 관계없이 매번 Token 소비
JIT(Just-In-Time 온디맨드)
필요할 때만 정보를 컨텍스트로 가져옴
- glob/grep으로 필요 시 파일 검색
- RAG로 관련 문서 검색
- API 호출로 실시간 데이터 수신
- 장점: 컨텍스트가 간결하게 유지되며 현재 필요한 것만 포함
- 단점: 도구 호출 왕복에 따른 지연 발생
모범 사례: 하이브리드 전략
고빈도 정보 사전 로딩(프로젝트 규약, 핵심 규칙, 사용자 설정) + 롱테일 정보 온디맨드 검색(특정 파일 내용, API 문서, 기록).
브라우저 캐싱 전략과 유사합니다: 핫 데이터는 메모리 캐시에(사전 로딩), 콜드 데이터는 디스크나 네트워크에서 가져옵니다(JIT). 목표는 컨텍스트 적중률 극대화 — 추론에 필요한 대부분의 정보는 이미 윈도우 안에 있고, 가끔 필요한 것만 동적으로 가져옵니다.
브라우저 캐싱 전략과 유사합니다: 핫 데이터는 메모리 캐시에(사전 로딩), 콜드 데이터는 디스크나 네트워크에서 가져옵니다(JIT). 목표는 컨텍스트 적중률 극대화 — 추론에 필요한 대부분의 정보는 이미 윈도우 안에 있고, 가끔 필요한 것만 동적으로 가져옵니다.
세 가지 전략 비교
| 전략 | 핵심 아이디어 | 적합한 시나리오 | 대표 제품 |
|---|---|---|---|
| Compaction | 기존 컨텍스트를 압축하여 핵심 정보를 유지하고 계속 진행 | 중단 없는 연속 장기 세션 | Claude Code auto-compact |
| Note-taking | 외부에 능동적으로 메모를 작성하고 윈도우 간에 읽어옴 | 중단될 수 있거나 여러 세션에 걸쳐 이어가야 하는 태스크 | Claude Code TODO, Cursor Rules |
| Sub-agent | Sub-agent가 깊이 탐색하고 요약만 반환 | 깊은 탐색이 필요하지만 오케스트레이터 컨텍스트를 오염시키지 않으려는 경우 | Cursor Task, Claude Code spawn |
장기 태스크의 본질적 도전은 유한한 어텐션 윈도우 vs 무한히 증가하는 정보량입니다. Compaction, Note-taking, Sub-agent 아키텍처는 각각 세 가지 문제를 해결합니다: 윈도우 내에서 간결함 유지, 윈도우 간 기억 전달, 깊은 탐색의 노이즈 격리. 세 가지를 조합해야 Agent가 복잡한 장기 태스크에서 효율성을 유지할 수 있습니다.