본문 바로가기
AI 툴 문제 해결

Claude Code 서브에이전트 병렬 실행이 멈출 때 해결법

by 오소리 이랩 2026. 8. 6.

Claude Code 실전 활용

Claude Code 서브에이전트 병렬 실행, 충돌 없이 돌리는 법

Claude Code에서 반복 작업을 자동화하다 보면, 한 번에 하나씩 처리하는 방식이 답답해지는 순간이 옵니다. 파일 10개를 분석하거나, 여러 폴더에 같은 작업을 적용할 때 순차 실행은 시간이 너무 오래 걸립니다. 특히 각 작업이 서로 독립적이라서 앞선 결과를 기다릴 필요가 없다면, 순서대로 실행하는 건 자원 낭비에 가깝습니다.

📌 3줄 요약

병렬 실행의 진짜 난관은 설정이 아니라 파일 충돌·컨텍스트 초과·순서 의존성 세 가지 오류다.

에이전트별로 출력 경로를 완전히 분리하고, 의존 관계가 있는 작업은 순차로 남겨두면 대부분의 충돌이 사라진다.

실행 후에는 반드시 결과를 검증하고, 동시 3~4개 수준에서 점진적으로 확장하는 것이 안전하다.

서브에이전트 병렬 실행이 필요한 이유

이때 등장하는 것이 서브에이전트(sub-agent) 병렬 실행입니다.

🔍 서브에이전트란?

서브에이전트란, 메인 에이전트가 특정 작업을 위임하는 별도의 작업 단위를 말합니다. 메인 에이전트는 전체 흐름을 관리하는 지휘자 역할이고, 서브에이전트는 실제 작업을 수행하는 실무자라고 생각하면 이해하기 쉽습니다.

예를 들어 블로그 글 6개를 생성한다고 가정하겠습니다.

실행 방식 소요 시간 설명
순차 실행 30분 글 하나당 5분씩, 총 30분이 걸립니다.
병렬 실행 (3개 동시) 15분 이론상 절반인 15분으로 줄일 수 있습니다.

하지만 실제로는 에이전트끼리 같은 파일을 건드리거나, 출력이 뒤섞이는 문제가 발생합니다. 결과물이 조용히 덮어씌워져서 에러 메시지도 없이 잘못된 결과가 나오는 경우가 특히 까다롭습니다.

💬 제 경험은요

제가 직접 써보니까, 병렬 실행은 설정 자체보다 충돌 방지가 핵심이었습니다. 구조를 잘 잡아두면 자동화 속도가 확실히 달라집니다.

이 글에서는 병렬 실행 시 자주 만나는 오류부터 안정적인 확장까지 단계별로 정리해 드릴게요.

 

병렬 실행 시 자주 발생하는 3가지 오류

첫 번째는 파일 충돌(file conflict) 문제입니다. 두 개 이상의 서브에이전트가 같은 파일에 동시에 쓰기를 시도하면, 한쪽의 결과가 덮어씌워집니다. 대표적인 증상은 output/step1_topic.json 같은 공유 파일에 마지막 에이전트의 결과만 남는 현상입니다. 이 경우 에이전트별로 고유한 출력 경로를 지정해야 합니다.

⚠️ 주의

파일 충돌은 오류 메시지가 전혀 나타나지 않기 때문에, 결과를 열어보기 전까지는 문제를 인지하기 어렵습니다.

두 번째는 컨텍스트 윈도우 초과입니다.

🔍 컨텍스트 윈도우(context window)

AI가 한 번에 처리할 수 있는 텍스트 양을 말합니다.

병렬 에이전트가 각각 긴 응답을 반환하면, 메인 에이전트의 컨텍스트가 한꺼번에 차버립니다. 컨텍스트가 가득 차면 메인 에이전트가 이전 지시를 잊어버리거나, 응답이 중간에 끊기는 현상이 나타납니다. 서브에이전트 3개가 각각 2,000자씩 반환하면 6,000자가 한 번에 메인 컨텍스트에 들어오는 셈이에요.

세 번째는 순서 의존성(dependency) 무시입니다. "A 작업 결과를 B가 써야 하는데, 동시에 실행해서 B가 빈 입력을 받는" 상황이 생깁니다. 이 문제는 작업 간의 관계를 미리 파악하지 않으면 반드시 발생합니다.

# 잘못된 예: 의존 관계 있는 작업을 병렬 실행
Agent({ prompt: "주제를 정해줘" })        # A
Agent({ prompt: "A의 주제로 글을 써줘" })  # B — A 결과 없이 실행됨

이 세 가지를 미리 알고 시작하면, 디버깅 시간을 크게 줄일 수 있습니다. 오류 메시지 없이 결과만 이상한 경우가 많아서, 원인 파악이 더 어렵습니다. 병렬 실행을 도입하기 전에 이 세 가지 패턴을 체크리스트로 만들어두면 실수를 예방할 수 있어요.

 

병렬 실행 충돌을 방지하는 설정 방법

가장 중요한 원칙은 각 서브에이전트의 작업 공간을 완전히 분리하는 것입니다. 출력 파일명에 에이전트 번호나 고유 식별자를 붙이면 충돌을 막을 수 있습니다. 이 원칙 하나만 제대로 지켜도 파일 충돌 문제의 90% 이상은 사라집니다.

실제 설정 방법을 단계별로 정리하겠습니다.

1 출력 경로를 에이전트별로 나눕니다: output/agent_1/, output/agent_2/ 형태로 분리합니다.
2 공유 파일 접근이 필요하면 읽기 전용(read-only)으로 제한합니다.
3 의존 관계가 있는 작업은 반드시 순차 실행으로 전환합니다.
# 독립적인 작업 3개를 병렬로 실행하는 구조 예시
claude -p "파일 A를 분석해줘" --output output/result_a.md &
claude -p "파일 B를 분석해줘" --output output/result_b.md &
claude -p "파일 C를 분석해줘" --output output/result_c.md &
wait

🔍 &wait 의 의미

위 예시에서 &는 백그라운드 실행을 의미하고, wait는 모든 작업이 끝날 때까지 대기하는 명령입니다.

각 에이전트가 서로 다른 파일을 대상으로 하기 때문에 충돌이 발생하지 않습니다. 만약 같은 설정 파일을 참조해야 한다면, 그 파일은 읽기만 하고 절대 수정하지 않도록 프롬프트에 명시해 주세요.

Claude Code의 Agent 도구를 사용할 때도 같은 원리가 적용됩니다. 한 메시지 안에서 여러 Agent 호출을 동시에 보내면, Claude Code가 자동으로 병렬 처리합니다.

# Agent 도구 병렬 호출 (CLAUDE.md 또는 프롬프트 내에서)
Agent({ description: "파일A 분석", prompt: "src/a.py를 분석해줘" })
Agent({ description: "파일B 분석", prompt: "src/b.py를 분석해줘" })

핵심은 의존성이 없는 작업만 병렬로 묶는 것입니다. "이 작업의 결과가 저 작업에 필요한가?"를 기준으로 판단하면 됩니다.

💡 팁

판단이 애매하다면 순차 실행으로 두는 것이 안전합니다. 병렬화에서 얻는 시간보다 디버깅에 쓰는 시간이 더 길어지면 의미가 없으니까요.

 

컨텍스트 초과 문제는 서브에이전트의 응답 길이를 제한하면 완화됩니다. 프롬프트에 "200자 이내로 요약해서 보고해줘"라는 지시를 추가하면 메인 에이전트의 부담이 줄어듭니다.

💡 팁

서브에이전트가 상세한 분석 결과를 파일로 저장하고, 메인 에이전트에게는 "완료" 한 줄만 반환하는 패턴도 효과적이에요.

병렬 실행 결과 검증과 안정적인 확장 전략

⚠️ 주의

병렬 실행이 끝났다고 바로 다음 단계로 넘어가면 안 됩니다. 모든 서브에이전트가 정상 완료되었는지 확인하는 검증 단계가 필수입니다. 병렬 실행에서는 한 에이전트가 조용히 실패해도 나머지는 계속 진행되기 때문에, 명시적으로 결과를 점검해야 합니다.

검증 체크리스트는 다음과 같습니다.

1 예상한 출력 파일이 모두 존재하는지 확인합니다.
2 각 파일의 크기가 0바이트가 아닌지 검사합니다.
3 파일 내용이 다른 에이전트의 결과와 뒤섞이지 않았는지 확인합니다.
# 출력 파일 존재 여부 확인 스크립트
for i in 1 2 3; do
  if [ -f "output/agent_${i}/result.md" ]; then
    echo "agent_${i}: 정상"
  else
    echo "agent_${i}: 누락!"
  fi
done

위 스크립트를 실행하면 누락된 결과를 즉시 발견할 수 있습니다. 누락이 확인되면 해당 에이전트만 다시 실행하면 됩니다. 자동화 파이프라인에서는 이 검증을 코드로 넣어두는 것이 좋습니다. 수동으로 매번 확인하면 실수가 생기고, 병렬 실행의 장점이 사라집니다.

 

검증을 통과했다면, 이제 병렬 실행을 점진적으로 확장할 차례입니다. 처음부터 모든 작업을 병렬로 바꾸려고 하면 실패 확률이 높아집니다. 2개부터 시작해서 점진적으로 늘리는 방식이 안전합니다.

병렬 확장 시 지켜야 할 실전 규칙을 정리하겠습니다.

1 먼저 순차 실행으로 전체 파이프라인이 정상 동작하는지 확인합니다.
2 독립적인 작업 2개를 골라 병렬로 전환합니다.
3 문제가 없으면 3~4개로 확장하고, 충돌이 생기면 원인을 분석합니다.

동시 실행 개수에도 현실적인 한계가 있습니다. Claude Code에서 서브에이전트를 5개 이상 동시에 돌리면 API 호출 제한(rate limit)에 걸릴 수 있습니다.

🔍 rate limit이란?

일정 시간 내에 허용되는 요청 횟수의 상한선으로, 이를 초과하면 요청이 거부되거나 지연됩니다.

실무에서 권장하는 병렬 수는 동시 3~4개입니다. 이 정도면 속도 향상과 안정성 사이의 균형이 잘 맞습니다.

실패한 에이전트만 자동으로 재실행하는 로직도 함께 준비해 두면 좋습니다.

# 실패한 에이전트만 재실행하는 구조
for i in 1 2 3; do
  if [ ! -f "output/agent_${i}/result.md" ]; then
    claude -p "파일 ${i} 재분석" --output "output/agent_${i}/result.md"
  fi
done

✍️ 마치며

병렬 자동화는 한 번 구조를 잡아두면 다양한 작업에 재활용할 수 있습니다. 파일 분석, 코드 리뷰, 문서 생성 등 독립적인 단위 작업이라면 거의 다 적용 가능합니다.

"분리 → 병렬 실행 → 검증 → 재시도"라는 패턴을 기억해 두면, 어떤 자동화 시나리오에서든 응용할 수 있어요.

#클로드코드 #ClaudeCode #서브에이전트 #병렬실행 #AI자동화 #개발생산성 #에이전트오케스트레이션 #파일충돌 #컨텍스트윈도우 #자동화파이프라인