복잡한 작업을 단일 에이전트에 맡기면 컨텍스트 오염(context pollution)과 집중력 분산 문제가 발생한다. 서브에이전트는 이 문제를 해결하지만, 어떻게 관리하느냐가 단순히 동기/비동기 실행 여부보다 훨씬 중요하다. 여기서는 2026년 현재 실용적으로 쓰이는 4가지 패턴을 소개한다.
패턴 1: 인라인 툴(Inline Tool) — 함수 호출처럼 서브에이전트 실행
가장 단순한 패턴이다. 메인 에이전트가 call_agent 도구를 호출하면 서브에이전트가 실행되고 결과를 반환한다. 메인 에이전트 입장에서는 read_file이나 run_command를 호출하는 것과 구별이 없다.
동기(sync): 도구 호출이 블로킹된다. 서브에이전트가 완료될 때까지 메인 에이전트의 턴이 멈춘다.
비동기(async): 도구가 즉시 에이전트 ID를 반환한다. 서브에이전트 결과는 나중에 알림 메시지로 삽입된다. 그 사이에 메인 에이전트는 다른 작업을 진행할 수 있다.
적합한 케이스: 독립적인 단일 작업 — 리서치 조회, 코드 리뷰, 파일 분석, 테스트 생성
한계: 완료 후에야 결과를 알 수 있고, 중간에 지시를 추가하거나 취소하는 것이 불가능하다.
패턴 2: 팬아웃(Fan-Out) — 여러 에이전트를 동시에 실행하고 결과를 수집
메인 에이전트가 spawn_agent로 여러 서브에이전트를 동시에 생성한 뒤 wait_agent로 결과를 수집하는 패턴이다. 스폰과 수집이 분리된 것이 패턴 1과의 차이다.
[메인 에이전트]
spawn_agent("백엔드 리팩토링") → agent-a 즉시 반환
spawn_agent("테스트 업데이트") → agent-b 즉시 반환
read_file("docs/auth-spec.md") → 자체 작업 동시 수행
wait_agent() → 두 에이전트 완료 후 결과 일괄 수신모델이 스폰과 웨이트 사이에 자체 작업을 끼워 넣는 능력이 이 패턴의 효과를 결정한다. 스폰 후 즉시 wait_agent를 호출하면 패턴 1과 실효성이 같아진다.
적합한 케이스: 독립적인 여러 작업을 병렬 처리하고, 중간 결과 없이 마지막에 일괄 수집해도 되는 경우
한계: 결과가 일괄로만 도착해 중간 수정이 불가능하다. 모델이 웨이트 타이밍을 잘 판단해야 효과가 있다.
패턴 3: 에이전트 풀(Agent Pool) — 지속적인 에이전트와 메시지 교환
서브에이전트를 장기 실행 상태로 유지하고, 메인 에이전트가 메시지를 주고받으며 멀티스텝 작업을 조율하는 패턴이다. 도구 표면이 넓어진다: spawn_agent, send_message, wait_agent, list_agents, kill_agent.
메인: spawn_agent("researcher") + spawn_agent("writer")
메인: send_message(researcher, "WebAssembly 성능 벤치마크 5개 소스 수집")
메인: send_message(writer, "WebAssembly 성능 블로그 4섹션 아웃라인 작성")
메인: wait_agent() → writer 응답 도착: "아웃라인 준비됨"
메인: wait_agent() → researcher 응답 도착: "소스 5개 수집 완료"
메인: send_message(writer, "소스 반영해서 초안 작성: [소스 내용...]")
메인: wait_agent() → writer 응답: "초안 완료"
메인: send_message(researcher, "이 초안 팩트체크: [초안...]")
메인: wait_agent() → researcher 응답: "오류 2건 발견"
메인: send_message(writer, "수정 적용")
메인: kill_agent(researcher)서브에이전트가 대화 이력을 유지하므로, researcher는 첫 번째 메시지에서 수집한 소스를 팩트체크 메시지에도 기억한다.
적합한 케이스: 에이전트 간 협업이 필요한 다단계 워크플로우
한계: 메인 에이전트가 여러 에이전트 상태를 추적하고 라우팅을 올바르게 해야 한다. 소형 모델은 어느 에이전트가 어떤 컨텍스트를 가졌는지 놓칠 수 있다.
패턴 4: 팀즈(Teams) — 에이전트끼리 직접 통신
메인 에이전트가 팀을 구성하고 역할을 부여한 뒤 물러나면, 에이전트들이 send_message로 서로 직접 통신해 협업을 완료한다.
메인: spawn_agent("planner") + spawn_agent("implementer") + spawn_agent("reviewer")
메인: send_message(planner, "기능 X를 개발하라. 팀: implementer(agent-i), reviewer(agent-v). 직접 소통하고 완료 시 보고하라.")
메인: wait_agent(timeout=60) → 타임아웃 (에이전트들이 서로 통신 중)
메인: list_agents() → planner: 실행 중, implementer: 실행 중, reviewer: 대기 중
...
메인: wait_agent(timeout=600) → planner: "기능 X 개발 완료"메인 에이전트의 대화는 짧다. 팀 셋업 + 킥오프 후 최종 보고만 받는다.
적합한 케이스: 인간의 중간 개입 없이 전문 에이전트가 자율 협업해 완성도 높은 결과를 내야 하는 경우
한계: 에이전트 간 통신을 지원하는 별도 인프라가 필요하다. 프론티어 모델에서도 2~4개 에이전트 조율이 한계다.
패턴 선택 가이드
| 상황 | 추천 패턴 |
|---|---|
| 독립적인 단일 작업 | 패턴 1 (Inline Tool) |
| 독립 병렬 작업 다수 | 패턴 2 (Fan-Out) |
| 전문 역할 간 다단계 협업 | 패턴 3 (Agent Pool) |
| 완전 자율 에이전트 팀 | 패턴 4 (Teams) |
패턴 복잡도가 높을수록 모델 능력과 인프라 요구사항도 함께 올라간다. 대부분의 사용 사례는 패턴 1이나 2에서 시작하는 것이 실용적이다.
관련 문서
- claude-managed-agents — Claude Managed Agents의 다중 에이전트 오케스트레이션
- symphony — OpenAI의 에이전트 자율 조율 시스템
- agent-gateway — AI 에이전트 호출 체인 중앙 제어
참고 자료
- How Agents Manage Other Agents: Four Subagents Patterns in 2026 — philschmid.de (2026-05-05)