Multi-Agent 소프트웨어 개발은 분산 시스템 문제다 (AGI도 구해줄 수 없다)
Multi-Agentic Software Development Is a Distributed Systems Problem
TL;DR Highlight
여러 LLM 에이전트가 협력해 소프트웨어를 만드는 문제는 본질적으로 분산 합의(distributed consensus) 문제이며, 모델이 더 똑똑해진다고 해서 이 근본적인 한계가 사라지지 않는다는 주장.
Who Should Read
멀티 에이전트 파이프라인을 설계하거나 운영 중인 개발자, 또는 LLM 기반 자동화 시스템의 안정성과 일관성 문제를 고민하는 AI 엔지니어.
Core Mechanics
- '모델이 더 좋아지면 에이전트 조율 문제도 해결된다'는 시각이 업계에 만연한데, 저자는 이걸 정면으로 반박한다. 분산 시스템 이론에는 모델 능력과 무관하게 성립하는 불가능성 정리(impossibility results)들이 이미 존재하기 때문이다.
- 자연어 프롬프트는 본질적으로 underspecified(불완전 명세)다. 즉, 하나의 프롬프트 P에 대해 일관된 프로그램이 여러 개 존재할 수 있으며, LLM은 그 중 하나를 '선택'하는 셈이다.
- 멀티 에이전트 개발에서 각 에이전트 A1~An이 서로 다른 컴포넌트 φ1~φn을 구현할 때, 최종 결과물이 하나의 일관된 해석을 공유해야 한다는 조건은 수학적으로 분산 합의(distributed consensus) 문제와 동일하다.
- 한 에이전트의 설계 결정이 다른 에이전트의 선택지를 제약한다. 예를 들어 네트워크 담당 에이전트가 콜백 기반 비동기 API 라이브러리를 선택하면, 통합 담당 에이전트는 그 결정에 맞춰 인프라를 구성해야 한다.
- FLP 불가능성 정리(비동기 분산 시스템에서 결정론적 합의가 불가능하다는 고전 결과)가 이 문제에도 적용된다고 주장한다. 단, 댓글에서는 LLM 에이전트가 확률적 존재이므로 FLP가 직접 적용되지 않을 수 있다는 반론도 제기됐다.
- Byzantine fault(참가자가 잘못된 정보를 보내는 오류 유형)를 crash fault(참가자가 그냥 멈추는 오류 유형)로 변환하는 핵심 메커니즘으로 외부 검증(테스트, 컴파일, lint 등)을 강조한다. 테스트가 없으면 에이전트가 잘못된 해석을 했는지 탐지조차 할 수 없다.
- 저자는 이 문제를 다루기 위해 안무 언어(choreographic language, 분산 참가자들의 상호작용을 전체 관점에서 기술하는 형식 언어)와 게임 이론을 결합한 새로운 형식 언어를 연구 중이라고 밝혔다.
- 부분 동기화 모델(Partial Synchrony, 메시지 지연에 상한이 있다고 가정하는 분산 시스템 모델)이 FLP를 우회하는 현실적 탈출구로 언급되며, 이는 반복적 개선 루프(iteration loop)로 구현 가능하다고 본다.
Evidence
- 실제로 멀티 에이전트 파이프라인을 운영해본 개발자는 plan→design→code 순의 순차적 스테이지와 각 단계마다 컴파일/lint 같은 결정론적 검증 게이트를 두는 방식으로 같은 결론에 도달했다고 공유했다. 결정론적 게이트는 보장의 하한선을, 에이전트 리뷰어는 확률적 상한선을 제공한다는 실용적 프레임워크를 제시했다.
- FLP 불가능성 정리 적용에 대한 기술적 반론이 있었다. FLP는 결정론적 합의에 관한 것인데 LLM 에이전트는 확률 분포, 즉 본질적으로 확률적 존재다. Ben-Or(1983)의 무작위 합의 알고리즘처럼 '막히면 동전 던지기' 전략이 FLP를 우회하듯, 에이전트 시스템도 무작위 합의의 프레임으로 봐야 한다는 주장이다.
- LLM 에이전트들이 같은 가중치와 학습 데이터를 공유하기 때문에 Byzantine fault 가정(참가자들이 독립적으로 오류를 냄)이 성립하지 않는다는 지적이 나왔다. 프롬프트가 모호할 때 에이전트들이 서로 다른 방향으로 오류를 내는 게 아니라 같은 방향으로 편향되는데, 이건 다수결 투표로 잡히지 않아 오히려 더 위험하다는 의견이다.
- Temporal 같은 워크플로 엔진의 bounded timeout이 DLS(Dwork-Lynch-Stockmeyer) 부분 동기화 모델의 메시지 지연 상한과 매핑된다는 실용적 연결고리가 제시됐다. 하지만 인프라 레벨의 재시도가 성공해도 LLM을 재호출하면 다른 출력이 나오는 '의미적 idempotency' 문제는 여전히 미해결이라는 지적도 함께 나왔다.
- 수학적 결과가 인간 에이전트에게도 똑같이 적용되는데 Linux 같은 거대한 코드베이스가 인간에 의해 만들어졌다는 반론이 있었다. 즉 수학이 AI가 못 한다는 걸 증명하진 못하며, Conway's Law처럼 아키텍트 역할이 핵심이라는 시각도 제시됐다.
- 3~4개 에이전트로 실제 팀을 운영해본 개발자는 하나의 에이전트를 supervisor로 두어 PR 리뷰와 충돌 해결을 맡겼더니 이 규모에서는 잘 작동했다고 공유했다. 단, supervisor가 단일 조율 병목점이 되어 인간 테크 리드와 똑같은 문제가 생겼다고도 덧붙였다.
How to Apply
- 멀티 에이전트 파이프라인을 설계할 때 각 에이전트 간 경계마다 컴파일, lint, 타입 체크 같은 결정론적 검증 게이트를 반드시 배치하라. 이렇게 하면 한 에이전트의 잘못된 해석이 다음 에이전트에게 전파되기 전에 탐지 가능한 실패로 변환되어, Byzantine fault를 더 단순한 crash fault로 격하시킬 수 있다.
- 에이전트가 병렬로 작업하는 구조라면 공유 설계 결정(API 스타일, 데이터 타입, 라이브러리 선택 등)을 먼저 하나의 에이전트가 확정하고 명시적 아티팩트(스펙 문서, 인터페이스 정의)로 남긴 다음 다른 에이전트에게 전달하라. 이는 분산 합의 문제에서 '공유 상태'를 명확히 하는 것과 같으며, 에이전트 간 의미적 드리프트를 줄인다.
- Temporal 같은 워크플로 엔진을 사용 중이라면 activity timeout을 명시적으로 설정하는 것만으로도 부분 동기화 모델의 메시지 지연 상한을 구현한 셈이 된다. 단, 재시도 성공 후에도 LLM 출력이 달라질 수 있으므로 재시도 이후에도 검증 게이트를 통과시켜야 실질적인 일관성이 보장된다.
- 에이전트 수가 늘어날수록 supervisor 에이전트 하나가 전체 컨텍스트를 감당하기 어려워진다. 이 경우 계층적 감독 구조(예: 서브팀별 supervisor + 최상위 coordinator)를 도입하되, 각 레벨의 경계에서도 검증 게이트를 두는 방식으로 설계하면 병목을 분산시킬 수 있다.
Terminology
distributed consensus여러 독립적인 참가자들이 하나의 공통된 값에 합의해야 하는 문제. 인터넷으로만 연결된 여러 서버가 '이 트랜잭션이 유효한가'를 동의하는 상황을 떠올리면 된다.
FLP impossibility1985년 Fischer, Lynch, Paterson이 증명한 정리로, 비동기 분산 시스템에서는 참가자 하나만 죽어도 결정론적 합의가 불가능하다는 수학적 결과. 네트워크 지연이 무한할 수 있는 환경에서의 근본적 한계다.
Byzantine fault분산 시스템에서 참가자가 단순히 멈추는 게 아니라 엉뚱하거나 악의적인 메시지를 보내는 오류 유형. 에이전트가 조용히 틀린 코드를 생성하는 상황이 이에 해당한다.
choreographic language분산 시스템에서 각 참가자의 관점이 아닌 전체 상호작용을 한눈에 기술하는 형식 언어. 무용 안무처럼 '누가 누구에게 언제 무엇을 전달한다'를 전체 시나리오로 표현한다.
partial synchrony메시지 전달에 알 수 없는 상한선이 존재한다고 가정하는 분산 시스템 모델. 완전 비동기(FLP의 한계)보다 현실적이고, 이 가정 하에서는 합의 알고리즘을 만들 수 있다.
semantic idempotency같은 작업을 여러 번 실행해도 결과가 동일한 성질. LLM은 같은 프롬프트를 재실행해도 다른 출력을 낼 수 있어 이 성질이 보장되지 않으며, 분산 시스템의 재시도 로직과 충돌한다.