멀티 에이전트, 실전 에서 — *에이전트 를 늘리는 것* 과 *일 이 되게 하는 것* 은 다르다
“에이전트 하나 로 되는데 왜 여러 개 를 쓰나?” — 반대로 물어보자. 회사 는 왜 한 사람 이 아니라 팀 으로 일 하는가. 컨텍스트(기억) 의 한계, 관점 의 한계, 병렬성 의 필요. 멀티 에이전트 는 정확히 그 문제 를 푸는 구조 다. 다만 — 팀 이 늘 좋은 게 아니듯, 에이전트 도 늘린다고 좋아지지 않는다.
이 글 은 이론 이 아니라 내 맥 과 클러스터 에서 실제 로 돌아가는 멀티 에이전트 이야기 다.
1. 내가 돌리는 멀티 에이전트 — 세 층
① 병렬 세션 — 같은 에이전트 여러 개
맥 에 Claude Code 세션 4개 가 상시 로 떠 있다 (tgbot1~4). 같은 알림 에 각자 독립 으로 반응 한다. 장점 은 처리량 — 단점 은 곧바로 드러났다: 어느 날 두 세션 이 같은 서버 에 동시 SSH 작업 을 하다 fail2ban 을 건드려 서로 를 잠갔다. 조율 없는 병렬 은 경쟁 상태(race) 를 만든다.
해법 은 코드 로: coordinator hook — 셸 명령 실행 전에 훅 이 가로채서, 다른 세션 이 같은 자원(SSH 대상·kubectl write·helm) 을 만지는 중이면 차단 한다. 60초 TTL 락. 사실상 에이전트 판 분산 락 이다. 분산 시스템 에서 배운 그 문제 가, 에이전트 를 여러 개 띄우는 순간 그대로 돌아온다.
② 역할 분담 — 서브에이전트 (오케스트레이터-워커)
Claude Code 안 에는 역할 별 커스텀 에이전트 를 정의 해 뒀다:
settlement-outbox-reviewer— Outbox 패턴 변경 시 자동 검토settlement-idempotency-checker— 3단 멱등 스택 검증hexagonal-enforcer— 의존 방향·계층 누수 감시theology-reviewer,mental-health-safety— 도메인 특화 게이트 (lemuel-xr)
핵심 은 각 에이전트 가 좁고 깊다 는 것. 범용 에이전트 하나 에게 “다 봐줘” 하는 것 보다, 관점 이 고정 된 검토자 여럿 이 각자 의 렌즈 로 보는 쪽 이 놓치는 게 적다. 코드리뷰 에서 사람 리뷰어 를 나누는 이유 와 같다.
③ 이종 에이전트 — 어젯밤 설치 한 Hermes
어젯밤 Hermes Agent(Nous Research, 오픈소스) 를 맥 에 설치 했다. Claude Code 와 같은 카테고리 지만 완전 로컬·영속 메모리 지향. 흥미 로운 건 설치 해 보니 구조 가 닮았다는 것 — SOUL.md(정체성), memories/, skills/. 에이전트 아키텍처 가 수렴 하고 있다: 정체성 + 기억 + 도구 + 스킬. 이종 에이전트 를 섞는 가치 는 벤더 독립성 과, 민감 데이터 를 로컬 에이전트 에게 만 맡기는 신뢰 경계 분리 다.
2. 멀티 에이전트 의 네 가지 패턴 (내 사용 기준)
| 패턴 | 구조 | 언제 |
|---|---|---|
| 파이프라인 | A→B→C 순차, 각자 전문 단계 | 단계 가 명확한 제작 흐름 (PM→설계→구현→QA→배포) |
| 오케스트레이터-워커 | 지휘자 1 + 병렬 워커 N | 넓은 탐색·대량 반복 (코드베이스 전수 조사, 마이그레이션) |
| 패널/심판 | 독립 시도 N개 + 심사 | 정답 이 불확실 할 때 (설계 대안 비교, 버그 검증) |
| 감시자/게이트 | 본 작업 + 자동 검토자 | 위험한 변경 의 상시 검문 (멱등성·아키텍처 규칙) |
경험칙 하나: “독립 이면 병렬, 의존 이면 파이프라인, 불확실 이면 패널.” 그리고 어떤 패턴 이든 마지막 엔 종합(synthesis) 단계 가 있어야 한다 — 종합 없는 팬아웃 은 보고서 더미 만 남긴다.
3. 어제 의 실전 — 사람 + 에이전트 도 멀티 에이전트 다
어제 새벽 CI 가 비결정적 으로 멈추는 문제 를 쫓았다. 나는 진단 장치(테스트 타임아웃 + 시작 로그) 를 심어 범인 테스트 를 특정 했고 — 같은 시각 사용자(사람) 는 코드 를 보다가 같은 교착 을 독립 으로 수정 해 머지 했다. 두 갈래 가 서로 모른 채 같은 지점 에서 만났다.
이게 멀티 에이전트 의 본질 이다. 독립 된 관점 두 개 가 같은 결론 에 도달 하면, 그 결론 의 신뢰도 는 곱 으로 오른다. 사람-에이전트 조합 도 예외 가 아니다. 에이전트 는 로그·아티팩트 를 지치지 않고 파고, 사람 은 코드 의 의도 를 직관 으로 잡는다 — 겹치는 결론 이 정답 이었다.
4. 멀티 에이전트 가 망하는 방식
늘리기 전 에 알아야 할 실패 모드 들:
- 경쟁 상태 — 조율 없는 병렬 세션 이 같은 자원 을 만짐 (fail2ban 사건). → 락/코디네이터 필수.
- 비용 폭발 — 에이전트 N개 = 토큰 N배. 패널 5개 로 얻는 신뢰도 상승 이 5배 비용 을 정당화 하는가 를 매번 물어야 한다.
- 책임 소멸 — “누가 결정 했나” 가 흐려짐. 종합·결정 은 반드시 한 지점(오케스트레이터 든 사람 이든) 으로 모아라.
- 동조 오염 — 에이전트 들 이 서로 의 출력 을 보면 독립성 이 깨진다. 패널 은 서로 모르게 돌려야 의미 가 있다.
- 조율 오버헤드 > 병렬 이득 — 작은 일 에 팀 회의 를 소집 하는 꼴. 단일 에이전트 로 30분 이면 끝날 일 에 오케스트레이션 을 깔지 마라.
MSA 글 에서 했던 말 그대로 다 — “쪼갤 수 있다” 와 “쪼개야 한다” 는 다르다. 에이전트 도 서비스 도, 분리 는 신호 가 켜졌을 때 만.
5. 설계 원칙 — 분산 시스템 에서 다 배운 것들
멀티 에이전트 설계 를 하다 보면 기시감 이 든다. 전부 분산 시스템 교과서 에 있던 문제 다:
- 에이전트 간 자원 경합 → 분산 락 (coordinator hook)
- 에이전트 실패 → 타임아웃·재시도·멱등성 (같은 지시 두 번 받아도 안전 하게)
- 결과 취합 → 팬아웃/팬인, 종합 단계
- 신뢰도 → 정족수(quorum) — 패널 3개 중 2개 동의
- 관측 → 로그·추적 없는 에이전트 군단 은 디버깅 불가
그래서 백엔드 엔지니어 는 멀티 에이전트 시대 에 유리 하다. CS 기초 글 의 논지 그대로 — 새 물건 처럼 보이는 것 의 바닥 에는 오래된 원리 가 깔려 있다.
맺으며
멀티 에이전트 는 마법 이 아니라 조직 설계 다. 좋은 팀 이 그렇듯:
- 역할 은 좁고 깊게 (전문 검토자)
- 독립 은 지키고 (동조 오염 방지)
- 자원 은 조율 하고 (락·코디네이터)
- 결정 은 한 곳 으로 (종합 단계)
- 그리고 — 필요 없으면 팀 을 만들지 마라
에이전트 하나 가 팀 이 되는 순간, 당신 의 역할 은 코더 에서 조직 설계자 로 바뀐다. 그게 이 시대 개발자 에게 열리는 새 자리 라고 생각 한다.
관련: MSA 의 기준 · AX 시대 의 문제정의 · K8s·Java 운영 하루 의 회고