Claude Code에 '서브 에이전트를 병렬로 배치하여 분담시키는 것'은 빨라 보입니다. 하지만 실제는 어떨까요? 서로 독립적인 4가지 과제를 하나의 리포지토리에 두고, **스스로 순차적으로 해결하는 방식(직렬)**과 **4개의 서브 에이전트에게 동시에 맡기는 방식(병렬)**을 Sonnet 5.5를 사용하여 총 32회 비교했습니다. (Claude Code 2.1.303, claude -p)
본 테스트는 2026-10-19에 진행되었습니다.
과제가 작으면, 병렬 처리는 느리고 비용이 많이 듭니다. 직렬 방식으로는 총 33초 만에 끝나는 4가지 과제의 경우, 병렬 처리 소요 시간은 1.29배(중앙값 33초 → 43초)였고, 비용은 2.37배(0.107달러 → 0.254달러)였습니다.
- 과제가 무거워지면, 병렬 처리가 빨라집니다. 직렬 방식에서 61초가 걸리는 4가지 과제의 경우, 병렬 처리 시간은 0.74배(61초 → 45초), 비용은 1.54배(0.188달러 → 0.289달러)였습니다.
- 결과는 둘 다 같습니다. 32회 모두에서 4가지 과제 모두 숨겨진 테스트에 합격했습니다. 병렬 처리 소요 시간은 과제의 무거움이 바뀌어도 거의 43
45초 수준을 유지했습니다.
시작 및 대기 시간이 고정되어 있기 때문에, 직렬 방식의 총합이 이 시간을 초과할 때만 병렬 처리가 유리합니다. 이 환경에서는 그 경계가 직렬 방식으로 4060초 정도였습니다. 비용은 병렬 처리가 항상 더 높았습니다. 서브 에이전트는 하나씩 전제(시스템 프롬프트)를 다시 읽고, 과제를 다시 읽으며, 테스트를 재실행합니다.
숨겨진 테스트로 합격 여부가 결정되는 작은 Python 과제 4개를 각각 하나의 리포지토리 내 다른 디렉토리에 배치했습니다. (각 디렉토리에 TASK.md와 보이는 테스트 1~2개). 이들은 서로 의존하지 않습니다.
| 그룹 | 내용 |
|---|
| 가벼운 그룹(T2~T5) | 구간 병합 / TTL이 적용된 LRU 캐시 수정 / 수식 평가 / npm 스타일 semver 범위 판정 |
| 무거운 그룹(T3~T6) | TTL 캐시 수정 / 수식 평가 / semver 범위 판정 / 엄격한 JSON 파서 (오류 위치 및 중첩 5000단) |
지시문은 차이를 최소화하도록 작성되었습니다.
직렬: This repository contains four independent tasks in the directories T2, T3, T4 and T5, each described by its TASK.md. Complete all four tasks yourself, one after another. When done, reply with a one-line summary.
병렬: This repository contains four independent tasks in the directories T2, T3, T4 and T5, each described by its TASK.md. Use the Task tool to launch four subagents in parallel (all four in a single message), one per directory, each told to complete the task in its directory. After they finish, run each directory's tests yourself and fix anything left. When done, reply with a one-line summary.
시작은 둘 다 동일하며, 직렬 방식의 조건에서만 서브 에이전트 도구를 제외했습니다.
claude -p "<지시문>" --model claude-sonnet-5-5 --output-format json \
--allowedTools Bash,Read,Edit,Write,Glob,Grep,Task --permission-mode acceptEdits \
--setting-sources project --strict-mcp-config --disable-slash-commands < /dev/null
...
합격 여부: 4개의 디렉토리 각각에 숨겨진 테스트를 적용하여, 모두 통과하면 성공입니다.
시간: 시작부터 종료까지의 벽시계 시간. 비용: 출력 JSON의 total_cost_usd
(정가 환산, 서브 에이전트 분 포함)-
병렬로 정말 4개를 구동했는가: 출력 JSON의 subagent_stats.spawned
.
병렬 처리 16회 모두 4개였습니다. 서브 에이전트 모델은 메인과 동일한 Sonnet 5.5(모델 사용량(modelUsage)에 Sonnet과, Claude Code가 내부적으로 사용하는 Haiku의 아주 작은 분량만)을 사용했습니다.
횟수: 가벼운 그룹 각 10회, 무거운 그룹 각 6회. 직렬 및 병렬 처리를 각각 한 번씩 동시에 실행하여 시간대 차이를 상쇄시켰습니다. 측정 방법과 예상치는 실행 전에 작성하고 고정했습니다. 무거운 그룹은 가벼운 그룹의 결과를 보고 추가한 것이며, 추가하기 전에 예상치를 작성했습니다.
| 그룹 | 조건 | 횟수 | 4개 과제 모두 성공 | 소요 시간 (중앙값) | 최소~최대 | 비용 (중앙값) | 주(Main)의 턴 수 |
|---|
| 가벼움 (T2~T5) | 직렬 | 10 | 10 | 33.2초 | 28~45초 | 0.107달러 | 5 |
| 가벼움 (T2~T5) | 병렬 | 10 | 10 | 42.8초 | 39~57초 | 0.254달러 | 2 |
| 무거움 (T3~T6) | 직렬 | 6 | 6 | 61.1초 | 47~73초 | 0.188달러 | 8.5 |
| 무거움 (T3~T6) | 병렬 | 6 | 6 | 45.1초 | 42~48초 | 0.289달러 | 2 |
병렬 처리 시간은 가벼운 그룹에서 42.8초, 무거운 그룹에서 45.1초였습니다. 과제가 무거워져도 단지 2초밖에 늘어나지 않았습니다. 직렬 처리는 33초에서 61초로, 과제의 무거움에 비례하여 증가합니다.
병렬 처리 소요 시간은 '가장 느린 서브 에이전트' + '구동 및 결과 수신 및 최종 확인'으로 결정됩니다. 이번 4개 과제에서는 가장 무거운 과제(semver 범위 판별이나 JSON 파서)를 Sonnet 5.5가 단독으로 해결하는 시간은 중앙값 기준으로 각각 36초와 35초였습니다(같은 과제를 하나만 풀게 한 다른 실측, 각 4회). 여기에 710초의 시간이 추가되어 4345초가 되는 것으로 해석됩니다(내역을 측정한 것은 아닙니다).
가벼운 그룹에서 2.37배, 무거운 그룹에서 1.54배
이유 내역은 측정하지 않았지만, 구조상으로 추론할 수 있는 바는 다음과 같습니다. -
직렬 처리는 하나의 세션에서 4개 과제를 연속적으로 풀기 때문에, 서두의 로딩(읽기)은 1회만 하면 되며, 두 번째 이후 과제들은 대화의 연속으로서 캐시에서 저렴하게 읽을 수 있습니다.
병렬 처리는 서브 에이전트마다 서두를 읽고, 과제를 읽고, 테스트를 실행하고, 결과를 주(Main)에게 반환합니다. 주(Main)는 그것을 읽고 다시 한번 테스트를 실행합니다.
과제가 무거워지면 해결하는 부분의 비용이 증가하여, 이 추가 비율이 낮아집니다. 무거운 그룹에서 배율이 떨어진 것은 이것과 일치합니다.
32회 모두 4개 과제 모두 숨겨진 테스트에 합격했습니다. 이번 과제의 크기에서는 '분담시키면 지저분해진다'도 '분담시키면 정교해진다'도 보이지 않았습니다.
| 예상 (실행 전) | 결과 |
|---|
가벼운 그룹: 병렬은 시간 0.40.6배, 비용 1.21.6배 | 시간 1.29배, 비용 2.37배. 둘 다 벗어남 |
| ... | |
'병렬이 빠르다'는 구동에 필요한 수고(오버헤드)를 계산하지 않고 생각했습니다.
이 실측을 통해 말할 수 있는 것은 다음 지점까지입니다.
-
하나씩의 작업이 수십 초 만에 끝난다면, 병렬로 하지 마십시오. 빨라지지 않으며, 비용은 2배를 넘습니다. -
-
각각 무겁고, 직렬 처리 시 총합이 1분을 크게 초과하는 일이라면, 병렬로 하면 빨라집니다. 다만 비용은 절반 정도 상승합니다. 대기 시간을 사는 판단입니다. -
-
비용을 낮추고 싶다면 직렬로 하십시오. 같은 세션에서 연속적으로 푸는 것이 캐시 효과가 좋습니다. - 병렬로 할 경우,
마지막에 주(Main)가 전체를 확인한다는 지시는 넣어두어야 합니다. 이번에는 모두 통과했지만, 주(Main)가 테스트를 다시 실행하는 분량의 비용은 완성도를 유지하기 위한 보험입니다.
-
과제는 작은 Python (1~2 파일, 사양이 명확하고 서로 독립적)입니다. 조사나 큰 리팩토링처럼 하나하나에 몇 분에서 몇십 분이 걸리는 일이라면, 병렬 처리의 이점은 더 커져야 하지만, 이번에는 측정하지 않았습니다.
-
횟수는 조건별로 6~10회였습니다.
-
이 클라우드 버전 Claude Code에서는 서브 에이전트가 백그라운드에서 구동되고, 주(Main)는 결과 통보를 기다리는 형태였습니다(subagent_stats.started_in_background).
(4) 로컬 환경에서 실행 방식이 다르면 고정 시간도 달라집니다 - 서브 에이전트의 종류(general-purpose 등)와 모델은 지정하지 않고 기본값 그대로(메인과 동일한 Sonnet 5.5)였습니다. 서브 에이전트만 Haiku로 하면 비용이 낮아져야 하지만, 측정하지는 않았습니다.
- 비용은 캐시가 데워진 상태의 값입니다(같은 프롬프트를 1시간 이내에 여러 번 사용할 경우). 첫 번째 사용 시에는 더 높아집니다.
서브 에이전트에게 전달할 지시의 기반이 되는 CLAUDE.md 초안은 질문에 답하는 것만으로 만들 수 있는 무료 도구로 제작할 수 있습니다: https://acerola-tools.acerola.workers.dev/?from=qiita-claude-code-subagent-parallel
본 기사는 Zenn에도 게재되어 있습니다: https://zenn.dev/acerola_jp/articles/claude-code-subagent-parallel