콘텐츠로 이동

케이스 스터디: Claude Code와 Codex

앞선 챕터들에서 루프의 구조, 패턴, 실패 모드를 이론적으로 다뤘다. 12절은 실전이다. 수백만 명이 매일 사용하는 두 코딩 에이전트 — Anthropic의 Claude Code와 OpenAI의 Codex — 가 실제로 루프를 어떻게 구현했는지 해부한다. 이 두 시스템은 서로 다른 설계 철학을 가지고 있으면서도, 동일한 핵심 문제들을 풀어야 했다.

Boris Cherny, Claude Code 책임자의 말을 다시 떠올려 보자.

“나는 더 이상 Claude에 프롬프트하지 않는다. 루프를 돌리며 무엇을 할지 알아내게 한다. 내 일은 루프를 작성하는 것이다.”

이 한 문장이 현대 코딩 에이전트의 철학을 담고 있다.

Claude Code: 단일 스레드 마스터 루프

섹션 제목: “Claude Code: 단일 스레드 마스터 루프”

Claude Code는 하나의 메인 스레드에서 돌아가는 마스터 루프를 중심으로 설계되어 있다. 사용자가 터미널에서 claude 를 실행하면 이 루프가 시작된다.

┌─────────────────────────────────────────────────────────────────┐
│ Claude Code 마스터 루프 │
└─────────────────────────────────────────────────────────────────┘
사용자 입력
┌──────────────────────────────┐
│ 컨텍스트 구성 │
│ - 시스템 프롬프트 │
│ - CLAUDE.md 파일들 로드 │
│ - 이전 대화 히스토리 │
│ - 현재 도구 목록 │
└──────────────┬───────────────┘
┌──────────────────────────────┐
│ Claude 호출 (Sonnet/Opus) │
└──────────────┬───────────────┘
stop_reason?
├── end_turn ──▶ 사용자에게 응답 출력, 대기
└── tool_use ──▶ 도구 실행
┌────┴────┐
│bash │read_file│write_file│···
└────┬────┘
│ tool_result
컨텍스트 창에 추가
컨텍스트 92% 임계치 도달?
├── 아니오 ──▶ Claude 재호출
└── 예 ──▶ Compaction 실행
(압축 요약 + 중요 파일 유지
+ 컨텍스트 초기화 후 재개)

Claude Code는 CLAUDE.md 파일 시스템을 장기 메모리로 활용한다. 프로젝트 루트의 CLAUDE.md에는 프로젝트 규칙, 자주 사용하는 명령어, 코드 컨벤션이 저장된다. 이 파일은 매 루프 시작 시 컨텍스트에 주입된다. 루프가 새로 시작되어도 중요한 맥락이 유지되는 이유다.

92% Compaction: 컨텍스트 수명 관리

섹션 제목: “92% Compaction: 컨텍스트 수명 관리”

루프가 오래 돌수록 컨텍스트 창이 차오른다. Claude Code는 컨텍스트가 임계치(약 92%)에 도달하면 압축(compaction)을 실행한다. 현재 대화를 요약하고, 최근에 수정한 파일들의 내용을 보존하고, 컨텍스트를 초기화한 뒤 루프를 계속한다. 5-3절에서 다룬 compaction 전략의 실제 구현이다.

복잡한 작업에서 Claude Code는 서브에이전트를 스폰할 수 있다. 하지만 **깊이 제한(depth cap)**을 두어 에이전트 트리가 무한히 깊어지는 것을 방지한다. 각 서브에이전트는 독립적인 컨텍스트를 가지며, 부모 에이전트에게 결과만 반환한다. 컨텍스트 격리로 에러 전파를 차단한다.

OpenAI Codex는 클라우드 컨테이너에서 실행되는 코딩 에이전트로, 명시적인 4단계 루프를 따른다.

┌─────────────────────────────────────────────────────────────────┐
│ Codex 루프 구조 │
└─────────────────────────────────────────────────────────────────┘
사용자 태스크
① PLAN
저장소 구조 파악, 문제 이해
단계별 실행 계획 수립
② EXECUTE
파일 읽기, 코드 수정, 명령 실행
각 단계를 격리된 컨테이너에서 실행
③ VERIFY
수정된 코드에 테스트 실행
린트, 타입 체크, 빌드 확인
④ FIX (필요 시)
검증 실패 → 오류 분석
코드 수정 → VERIFY로 돌아감
모든 검증 통과 → PR 생성·제출

RL 기반 훈련: “테스트 통과까지 반복”

섹션 제목: “RL 기반 훈련: “테스트 통과까지 반복””

Codex의 특이점 중 하나는 모델(codex-1) 자체가 강화학습으로 코딩 루프를 반복하는 행동을 학습했다는 것이다. 단순히 코드를 생성하는 것이 아니라, 테스트를 실행하고, 실패를 확인하고, 수정하고, 다시 실행하는 전체 사이클을 보상 신호로 학습했다. 11-5절의 학습 루프가 추론 루프에 내재화된 형태다.

각 Codex 세션은 독립된 클라우드 컨테이너에서 실행된다. 이는 7-5절의 샌드박싱 원칙을 철저히 적용한 것이다. 에이전트가 임의의 명령을 실행해도 다른 세션이나 실제 시스템에 영향을 미치지 않는다. 블래스트 반경(blast radius)을 컨테이너 경계로 제한한다.

설계 철학이 다른 두 시스템에서 반복되는 패턴이 있다.

원칙 Claude Code Codex
명확한 종료 조건 stop_reason end_turn 모든 테스트 통과
컨텍스트 관리 92% compaction 단계별 클린 컨텍스트
격리 서브에이전트 격리 컨테이너 격리
검증 통합 도구 실행 결과 관찰 명시적 verify 단계
파일 기반 상태 CLAUDE.md 컨테이너 파일시스템

모든 구체적 구현이 다르지만, 근본적인 원칙은 같다. 루프를 단순하게, 종료 조건을 명확하게, 상태를 외부에 저장하고, 검증을 루프에 내장하라.

다음 챕터에서는 SWE-agent를 케이스 스터디로, ACI(에이전트-컴퓨터 인터페이스) 설계가 루프 효율에 어떤 차이를 만드는지 살펴본다.

참고 자료