장시간 실행 Agent
Managed Agent: 뇌-손 분리
핵심 인사이트: Agent의 사고와 실행을 독립적인 구성 요소로 분리하여, 어느 부분에 장애가 발생하더라도 시스템이 우아하게 복구될 수 있도록 합니다.
유추: 운영 체제의 가상화
세 가지 핵심 구성 요소
Session
이벤트 로그
Append-only 이벤트 스트림으로 영속적으로 저장됩니다. 사용자 입력, 도구 호출, 모델 출력 등 발생한 모든 것을 기록합니다.
Harness
뇌(Brain)
Claude를 호출하고 도구 호출을 라우팅하는 루프입니다. 다음에 무엇을 할지, 컨텍스트를 어떻게 구성할지 결정하는 사고 역할을 담당합니다.
Sandbox
손(Hand)
코드를 실행하고 파일을 편집하는 컨테이너 환경입니다. 명령 실행, 파일 쓰기, 외부 시스템과의 상호 작용 등 실행 역할을 담당합니다.
왜 분리해야 하는가: 반려동물 vs 소 떼
아키텍처 진화
구방식 (반려동물)
Session + Harness + Sandbox가 모두 같은 컨테이너 안에 있습니다.
컨테이너 다운 = 세션 손실 = 디버그 불가 = 작업 완전 실패.
반려동물처럼, 죽으면 끝 — 대체 불가능합니다.
컨테이너 다운 = 세션 손실 = 디버그 불가 = 작업 완전 실패.
반려동물처럼, 죽으면 끝 — 대체 불가능합니다.
새 방식 (소 떼)
각 구성 요소가 독립적으로 배포되어 서로 의존하지 않습니다.
컨테이너 다운 = 도구 호출 실패 = Claude가 재시도 결정 = 새 컨테이너 생성 후 계속.
목장의 소처럼, 하나가 죽으면 다른 것으로 교체 — 시스템은 계속 작동합니다.
컨테이너 다운 = 도구 호출 실패 = Claude가 재시도 결정 = 새 컨테이너 생성 후 계속.
목장의 소처럼, 하나가 죽으면 다른 것으로 교체 — 시스템은 계속 작동합니다.
직접 해보기: 장애 복구 시뮬레이터
Harness
뇌(Brain)
execute()
emitEvent()
Sandbox
손(Hand)
Event Log
Session(세션)
아래 버튼을 클릭하여 다양한 장애 시나리오에서 시스템의 복구 동작을 관찰하세요.
뇌를 컨테이너에서 분리한 후의 이점
핵심 개선 사항
-
컨테이너가 도구 호출이 됩니다:
execute(name, input) -> string— Harness에게는 일반 함수에 불과합니다 - 컨테이너 다운 = 도구 호출 오류 반환 = Claude가 재시도 여부 결정 = 자동으로 새 컨테이너를 생성하여 작업 계속
- Harness는 컨테이너가 준비되기 전에 처리를 시작할 수 있습니다 — 컨테이너 준비를 기다릴 필요 없음
-60%
TTFT p50 감소
-90%+
TTFT p95 감소
TTFT = Time to First Token (첫 번째 Token 응답 시간)
아키텍처 수준의 보안 해결
아키텍처 수준의 보안 문제 해결
- 구방식: Agent가 생성한 코드와 API 키가 같은 컨테이너에 있어 Prompt Injection으로 키를 직접 탈취 가능
- Git Token: 저장소 클론 시 컨테이너 환경 변수로 주입되어 Sandbox 내에서 사용 가능하지만 Agent는 Token 값을 볼 수 없습니다
- MCP OAuth Token: 외부 vault에 저장되어 프록시를 통해 MCP 호출을 전달하므로 Sandbox에서 Token에 직접 접근 불가
다중 뇌, 다중 손
구성 요소를 자유롭게 조합 가능합니다
Brain A
Brain B
Brain C
여러 Brain: 각각 무상태 Harness로, 필요에 따라 시작됩니다
Sandbox 1
Sandbox 2
Sandbox 3
Sandbox 4
여러 Hand: 각각 독립적인 도구로, 다른 Brain에 전달할 수 있습니다
하나의 Brain이 여러 Sandbox를 동시에 제어하거나(병렬 실행), 동일한 Sandbox를 다른 Brain 간에 전달(릴레이 실행)할 수 있습니다. 구성 요소 간 완전한 결합 해제입니다.
좋은 아키텍처는 구성 요소가 독립적으로 장애를 처리하고 교체될 수 있게 합니다. 뇌-손 분리는 단순한 성능 최적화가 아니라 시스템의 신뢰성 모델을 근본적으로 바꿉니다: '반려동물 하나가 죽으면 모두 끝'에서 '어떤 부분도 재구축 가능'으로.