베스트 AI 아키텍처 | 구글이 제안하는 멀티 에이전트 8대 디자인 패턴

2026.01.06 / JUN

LLM 시대에 이어서 AI 에이전트 시대가 열리고 있습니다. AI 에이전트 시대에 꼭 해봐야할 실험 중 하나가 ‘멀티 에이전트 기반 애플리케이션과 서비스’ 구현이 아닐까 생각합니다. 마침 구글이 이해하기 쉬우면서도 모범적인 멀티 에이전트 아키텍처 가이드를 제시했고요, 저도 이 중 몇 가지 패턴을 적용해서 멀티 에이전트 애플리케이션을 만들 계획입니다.

이 포스트의 핵심 내용

구글은 모놀리식(monolithic) AI 에이전트의 한계를 극복하기 위한 멀티 에이전트 시스템(MAS) 구현을 위해 에이전트 개발 키트(ADK) 기반의 8대 핵심 설계 패턴을 제안합니다.

패턴 이름설명
순차 파이프라인 패턴 (Sequential Pipeline Pattern)한 에이전트의 작업 결과가 다음 에이전트로 직접 전달되는 선형적인 조립라인 방식의 워크플로우입니다.
코디네이터/디스패처 패턴 (Coordinator/Dispatcher Pattern)중앙 에이전트가 사용자의 의도를 분석하여 적절한 전문 에이전트에게 작업을 할당하는 방식입니다.
병렬 팬아웃/개더 패턴 (Parallel Fan-Out/Gather Pattern)상호 의존성이 없는 여러 작업을 동시에 실행하여 속도를 높이고 결과를 최종 에이전트가 취합하는 방식입니다.
계층적 분해 패턴 (Hierarchical decomposition Pattern)상위 에이전트가 복잡한 목표를 하위 작업으로 나누어 전문 하위 에이전트에게 위임하고 결과를 기다리는 구조입니다.
제너레이터와 크리틱 패턴 (Generator and Critic Pattern)콘텐츠 생성(제너레이터)과 검증(크리틱) 역할을 분리하여, 검증을 통과할 때까지 반복 수정하는 패턴입니다.
반복적 개선 패턴 (Iterative refinement Pattern)초안을 생성한 후 지속적인 비평과 수정을 거쳐 품질 임계치에 도달할 때까지 점진적으로 개선하는 방식입니다.
인간 개입 패턴 (Human-in-the-loop Pattern)에이전트가 기초 작업을 수행하되, 되돌릴 수 없거나 중대한 결정은 인간의 승인을 거치도록 하는 안전망 설계입니다.
복합 패턴 (Composite patterns)현업의 복잡한 요구사항을 해결하기 위해 위 7가지 패턴들을 필요에 따라 혼합하여 사용하는 설계 방식입니다.
구글이 제안하는 멀티 에이전트 8대 디자인 패턴 요약

단일 에이전트는 복잡성이 증가할수록 성능 저하, 오류율 증가(“환각” 현상), 디버깅 비용 상승 등의 문제에 노출될 수 있으며, 이에 대한 해결책으로 제시된 멀티 에이전트 시스템은 마이크로서비스 아키텍처와 유사하게, 특정 역할을 맡은 여러 에이전트(예: 파서, 비평가, 디스패처)로 시스템을 분산시켜 모듈성, 테스트 용이성, 신뢰성을 향상시킵니다.

이번 포스트는 데이터 처리 파이프라인부터 인간의 개입이 필요한 워크플로우에 이르기까지, 프로덕션 등급의 에이전트 팀을 구축하는 데 필요한 8가지 필수 패턴을 구체적인 사용 사례를 설명합니다. 또한, 성공적인 멀티 에이전트 개발을 위한 상태 관리의 중요성, 명확한 에이전트 설명 작성법, 점진적인 복잡도 증가와 같은 핵심 개발 팁을 제공합니다.


서론: 효율적인 멀티 에이전트 시스템 구현 방법의 필요성

AI 멀티 에이전트 구현 접근법: 에이전트의 분산화와 전문화

소프트웨어 개발 분야에서는 모놀리식 애플리케이션이 확장성에 한계를 가진다는 것이 이미 입증된 사실입니다. 이는 AI 에이전트 개발에도 동일하게 적용됩니다. 너무 많은 책임을 맡은 단일 에이전트는 “모든 것을 잘하지만, 어느 것 하나 제대로 하지 못하는” 상태가 되기 쉽습니다. 지시의 복잡성이 커질수록 특정 규칙 준수율이 떨어지고 오류율이 복합적으로 증가하여 “환각” 현상이 빈번해집니다.

이러한 문제에 대한 해결책은 분산화와 전문화에 있습니다. 멀티 에이전트 시스템(MAS)은 AI 분야의 마이크로서비스 아키텍처와 같은 역할을 합니다. 각 에이전트에게 파서(Parser), 비평가(Critic), 디스패처(Dispatcher)와 같은 특정 역할을 할당함으로써, 시스템은 본질적으로 더 모듈화되고 테스트하기 쉬우며 신뢰성이 높아집니다. 에이전트가 실패하더라도 전체 프롬프트를 해체할 필요 없이 문제의 원인을 쉽게 찾을 수 있습니다.


본론: 구글이 ADK를 통해 제공하는 8대 설계 패턴

구글 에이전트 개발 키트(ADK)는 이러한 멀티 에이전트 시스템을 효과적으로 구축할 수 있도록 다양한 기본 요소를 제공합니다. 다음은 8가지 필수 설계 패턴입니다.

패턴 1. 순차적 파이프라인 패턴 (Sequential Pipeline) – 조립 라인

이 패턴은 가장 기본적인 워크플로우로, 마치 조립 라인처럼 한 에이전트가 작업을 완료하면 다음 에이전트에게 결과를 전달하는 선형적이고 결정적인 구조입니다. 데이터의 출처를 명확하게 추적할 수 있어 디버깅이 매우 용이합니다.

  • 핵심 개념: A 에이전트 → B 에이전트 → C 에이전트로 이어지는 직선적인 작업 흐름.
  • 주요 사용 사례: 원시 문서를 처리하는 데이터 파이프라인. 예를 들어, Parser 에이전트가 PDF에서 텍스트를 추출하고, Extractor 에이전트가 구조화된 데이터를 뽑아낸 뒤, Summarizer 에이전트가 최종 요약문을 생성하는 흐름입니다.
  • ADK 구현: SequentialAgent 기본 요소를 사용하여 여러 하위 에이전트를 순차적으로 조정합니다. 상태 관리는 output_key를 사용하여 공유 session.state에 작업 결과를 기록함으로써 이루어지며, 다음 에이전트는 이 상태를 참조하여 작업을 이어갑니다.

예시 코드 | 순차적 패턴

# ADK Pseudocode
# Step 1: Parse the PDF
parser = LlmAgent(
    name="ParserAgent",
    instruction="Parse raw PDF and extract text.",
    tools=[PDFParser],
    output_key="raw_text" 
)

# Step 2: Extract structured data
extractor = LlmAgent(
    name="ExtractorAgent",
    instruction="Extract structured data from {raw_text}.",
    tools=[RegexExtractor],
    output_key="structured_data"
)

# Step 3: Summarize
summarizer = LlmAgent(
    name="SummarizerAgent",
    instruction="Generate summary from {structured_data}.",
    tools=[SummaryEngine]
)

# Orchestrate the Assembly Line
pipeline = SequentialAgent(
    name="PDFProcessingPipeline",
    sub_agents=[parser, extractor, summarizer]
)

패턴 2. 코디네이터/디스패처 패턴 (Coordinator/Dispatcher) – 컨시어지

이 패턴에서는 중앙의 지능형 에이전트가 ‘디스패처’ 역할을 수행하여 사용자의 의도를 분석하고 가장 적합한 전문 에이전트에게 요청을 라우팅합니다.

  • 핵심 개념: 중앙 에이전트가 의사 결정을 내려 작업을 전문 에이전트에게 위임.
  • 주요 사용 사례: 복잡한 고객 서비스 봇. 예를 들어, 청구 관련 문의는 ‘결제 전문가’에게, 기술적 버그는 ‘기술 지원 전문가’에게 라우팅하는 경우입니다.
  • ADK 구현: 부모 CoordinatorAgent를 정의하고 전문가 역할을 하는 sub_agents 목록을 제공합니다. ADK의 AutoFlow 메커니즘이 하위 에이전트의 description 필드를 기반으로 LLM 주도 위임을 자동으로 처리합니다. 따라서 라우팅 로직의 정확도를 위해 description을 명확하게 작성하는 것이 중요합니다.

예시 코드 | 코드네이터 패턴

# ADK Pseudocode
billing_specialist = LlmAgent(
    name="BillingSpecialist", 
    description="Handles billing inquiries and invoices.",
    tools=[BillingSystemDB]
)

tech_support = LlmAgent(
    name="TechSupportSpecialist", 
    description="Troubleshoots technical issues.",
    tools=[DiagnosticTool]
)

# The Coordinator (Dispatcher)
coordinator = LlmAgent(
    name="CoordinatorAgent",
    # The instructions guide the routing logic
    instruction="Analyze user intent. Route billing issues to BillingSpecialist and bugs to TechSupportSpecialist.",
    sub_agents=[billing_specialist, tech_support]
)

패턴 3. 병렬 분산/수집 패턴 (Parallel Fan-Out/Gather) – 문어

서로 의존성이 없는 작업들을 동시에 실행하여 지연 시간을 줄이거나 다양한 관점을 얻는 데 사용되는 패턴입니다. 여러 에이전트의 작업 결과는 최종적으로 ‘통합’ 에이전트에 의해 수집 및 종합됩니다.

  • 핵심 개념: 여러 작업을 동시에 실행(Fan-Out)한 후, 그 결과들을 하나로 모음(Gather).
  • 주요 사용 사례: 자동화된 코드 리뷰. ‘보안 감사’, ‘스타일 검사’, ‘성능 분석’ 에이전트가 풀 리퀘스트를 동시에 검토하고, ‘통합’ 에이전트가 이들의 피드백을 합쳐 하나의 리뷰 코멘트를 작성합니다.
  • ADK 구현: ParallelAgent를 사용하여 하위 에이전트들을 동시에 실행합니다. 에이전트들은 별도의 실행 스레드에서 작동하지만 session.state를 공유하므로, 각 에이전트가 고유한 키에 데이터를 쓰도록 하여 경쟁 상태(race condition)를 방지해야 합니다.

예시 코드 | 병렬 분산후 수집 패턴

# ADK Pseudocode

# Define parallel workers
security_scanner = LlmAgent(
    name="SecurityAuditor", 
    instruction="Check for vulnerabilities like injection attacks.",
    output_key="security_report"
)

style_checker = LlmAgent(
    name="StyleEnforcer", 
    instruction="Check for PEP8 compliance and formatting issues.",
    output_key="style_report"
)

complexity_analyzer = LlmAgent(
    name="PerformanceAnalyst", 
    instruction="Analyze time complexity and resource usage.",
    output_key="performance_report"
)

# Fan-out (The Swarm)
parallel_reviews = ParallelAgent(
    name="CodeReviewSwarm",
    sub_agents=[security_scanner, style_checker, complexity_analyzer]
)

# Gather/Synthesize
pr_summarizer = LlmAgent(
    name="PRSummarizer",
    instruction="Create a consolidated Pull Request review using {security_report}, {style_report}, and {performance_report}."
)

# Wrap in a sequence
workflow = SequentialAgent(sub_agents=[parallel_reviews, pr_summarizer])

패턴 4. 계층적 분해 패턴 (Hierarchical Decomposition) – 러시아 인형

단일 에이전트의 컨텍스트 창으로 처리하기에는 너무 큰 작업을 하위 작업으로 분해하고 위임하는 방식입니다. 상위 에이전트는 작업의 일부를 하위 에이전트에게 위임하고 그 결과를 기다렸다가 자신의 추론을 계속 이어갈 수 있습니다.

  • 핵심 개념: 상위 에이전트가 복잡한 목표를 하위 작업으로 나누어 하위 에이전트에게 위임.
  • 주요 사용 사례: 보고서 작성. ReportWriter 에이전트가 직접 조사를 수행하는 대신 ResearchAssistant에게 정보 수집을 위임하고, ResearchAssistant는 다시 WebSearchSummarizer 도구를 관리하는 구조입니다.
  • ADK 구현: 하위 에이전트를 AgentTool로 래핑하여 상위 에이전트의 ‘도구’처럼 사용할 수 있습니다. 이를 통해 상위 에이전트는 하위 에이전트의 전체 워크플로우를 단일 함수 호출처럼 명시적으로 호출할 수 있습니다.

예시 코드 | 계층적 패턴

# ADK Pseudocode
# Level 3: Tool Agents
web_searcher = LlmAgent(name="WebSearchAgent", description="Searches web for facts.")
summarizer = LlmAgent(name="SummarizerAgent", description="Condenses text.")

# Level 2: Coordinator Agent
research_assistant = LlmAgent(
    name="ResearchAssistant",
    description="Finds and summarizes info.",
    # Coordinator manages the tool agents
    sub_agents=[web_searcher, summarizer] 
)

# Level 1: Top-Level Agent
report_writer = LlmAgent(
    name="ReportWriter",
    instruction="Write a comprehensive report on AI trends. Use the ResearchAssistant to gather info.",
    # Wrap the sub-agent hierarchy as a tool for the parent
    tools=[AgentTool(research_assistant)] 
)

패턴 5. 생성자-비평가 패턴 (Generator and Critic) – 편집자 데스크

콘텐츠 생성과 검증을 분리하여 결과물의 품질과 신뢰성을 높이는 패턴입니다. Generator 에이전트가 초안을 만들면 Critic 에이전트가 사전에 정의된 기준이나 논리적 검사에 따라 이를 검토합니다.

  • 핵심 개념: 생성과 검증의 분리 및 조건부 반복. 검토를 통과하면 루프가 종료되고, 실패하면 피드백이 Generator에게 전달되어 수정을 거칩니다.
  • 주요 사용 사례: 구문 검사가 필요한 코드 생성이나 규정 준수 검토가 필요한 콘텐츠 생성.
  • ADK 구현: SequentialAgent가 초안 작성 및 검토 상호작용을 관리하고, 부모 LoopAgentexit_condition(예: feedback 키의 값이 ‘PASS’일 때)을 설정하여 품질 게이트를 강제합니다.

예시 코드 | 생성 대 비평 패턴

# ADK Pseudocode

# The Generator 
generator = LlmAgent(
    name="Generator",
    instruction="Generate a SQL query. If you receive {feedback}, fix the errors and generate again.",
    output_key="draft"
)

# The Critic 
critic = LlmAgent(
    name="Critic",
    instruction="Check if {draft} is valid SQL. If correct, output 'PASS'. If not, output error details.",
    output_key="feedback"
)

# The Loop 
loop = LoopAgent(
    name="ValidationLoop",
    sub_agents=[generator, critic],
    condition_key="feedback",
    exit_condition="PASS" 
)

패턴 6. 반복적 개선 패턴 (Iterative Refinement) – 조각가

이 패턴은 에이전트가 생성, 비평, 개선의 순환 과정을 거쳐 결과물이 특정 품질 기준에 도달할 때까지 점진적으로 다듬어 나가는 방식입니다. ‘생성자-비평가’ 패턴이 통과/실패의 정확성에 초점을 맞춘다면, 이 패턴은 질적 향상에 중점을 둡니다.

  • 핵심 개념: 초안 생성 → 최적화 피드백 제공 → 피드백 기반 수정의 순환을 통해 결과물의 품질을 점진적으로 향상.
  • 주요 사용 사례: 초안을 작성한 후 성능이나 효율성을 높이기 위해 여러 번 수정하는 작업.
  • ADK 구현: LoopAgent를 사용하여 구현하며, max_iterations로 최대 반복 횟수를 제한할 수 있습니다. 또한, 에이전트가 EventActions 내에서 escalate=True 신호를 보내 최대 반복 횟수에 도달하기 전에 루프를 조기 종료시킬 수도 있습니다.

예시 코드 | 반복 개선 패턴

# ADK Pseudocode

# Generator
generator = LlmAgent(
    name="Generator",
    instruction="Generate an initial rough draft.",
    output_key="current_draft"
)

# Critique Agent 
critic = LlmAgent(
    name="Critic",
    instruction="Review {current_draft}. List ways to optimize it for performance.",
    output_key="critique_notes"
)

# Refiner Agent 
refiner = LlmAgent(
    name="Refiner",
    instruction="Read {current_draft} and {critique_notes}. Rewrite the draft to be more efficient.",
    output_key="current_draft" # Overwrites the draft with better version
)

# The Loop (Critique -> Refine)
loop = LoopAgent(
    name="RefinementLoop",
    max_iterations=3, 
    sub_agents=[critic, refiner]
)

# Complete Workflow
workflow = SequentialAgent(sub_agents=[generator, loop])

패턴 7. 인간 참여 루프 패턴 (Human-in-the-Loop) – 인간 안전망

중요한 의사 결정이나 되돌릴 수 없는 작업을 수행하기 전에 인간의 승인을 받도록 하는 안전장치 패턴입니다. 에이전트가 기반 작업을 처리하지만, 최종 결정은 인간이 내립니다.

  • 핵심 개념: 고위험 작업(예: 금융 거래, 프로덕션 배포) 실행 전에 워크플로우를 일시 중지하고 인간의 승인을 요청.
  • 주요 사용 사례: 금융 거래 실행, 프로덕션 환경에 코드 배포, 민감 데이터 기반의 조치 수행 등 안전과 책임이 중요한 영역.
  • ADK 구현: 실행을 일시 중지하고 외부 시스템에 인간의 개입을 요청하는 커스텀 도구(예: ApprovalTool)를 호출하여 구현합니다.

예시 코드 | 인간 참여 루프 패턴

# ADK Pseudocode
transaction_agent = LlmAgent(
    name="TransactionAgent",
    instruction="Handle routine processing. If high stakes, call ApprovalTool.",
    tools=[ApprovalTool] 
)

approval_agent = LlmAgent(
    name="ApprovalToolAgent",
    instruction="Pause execution and request human input."
)

workflow = SequentialAgent(sub_agents=[transaction_agent, approval_agent])

패턴 8. 복합 패턴 (Composite Patterns) – 믹스 앤 매치

실제 엔터프라이즈급 애플리케이션은 단일 패턴만으로 구축되는 경우가 드뭅니다. 여러 패턴을 조합하여 견고하고 복잡한 시스템을 구축할 수 있습니다.

  • 핵심 개념: 앞서 설명된 여러 기본 패턴들을 조합하여 특정 요구사항에 맞는 맞춤형 워크플로우를 설계.
  • 주요 사용 사례: 강력한 고객 지원 시스템. Coordinator가 요청을 라우팅하고, 기술 문제일 경우 Parallel 패턴으로 문서와 사용자 기록을 동시에 검색한 뒤, 최종 답변을 GeneratorCritic 루프를 통해 일관된 톤으로 다듬어 사용자에게 전달하는 구조를 예로 들 수 있습니다.

결론: 멀티 에이전트 개발자를 위한 3대 팁

멀티 에이전트 시스템을 효과적으로 구축하기 위한 몇 가지 전문가 팁은 다음과 같습니다.

설명
1. 상태 관리의 중요성ADK의 session.state는 에이전트 간 정보 공유를 위한 핵심 요소입니다. output_key를 사용할 때 명확하고 서술적인 키 이름을 사용하여, 후속 에이전트가 어떤 데이터를 읽어야 하는지 쉽게 알 수 있도록 해야 합니다.
2. 명확한 에이전트 설명Coordinator/Dispatcher 패턴과 같이 라우팅이 필요한 경우, 하위 에이전트의 description 필드는 LLM을 위한 API 문서 역할을 합니다. 라우팅이 정확하게 이루어지도록 에이전트의 기능을 명확하고 정밀하게 기술해야 합니다.
3. 단순하게 시작하기처음부터 복잡한 중첩 루프 시스템을 구축하려고 시도하지 마십시오. 먼저 간단한 순차적 체인으로 시작하여 디버깅을 완료한 후, 점진적으로 복잡성을 추가하는 것이 좋습니다.

참고자료

ADK가 제공하는 멀티 에이전트 설계 패턴을 활용하면 개발자는 확장 가능하고 신뢰성 높은 AI 애플리케이션을 구축할 수 있습니다. ADK 설명서를 통해 지금 바로 자신만의 에이전트 팀 구축을 시작할 수 있습니다.

Google | Developer’s guide to multi-agent patterns in ADK
https://developers.googleblog.com/developers-guide-to-multi-agent-patterns-in-adk/

NXP 구글 시트 | 구글 멀티 에이전트 설계 패턴 요약 (2026.01.06 / JUN)
https://docs.google.com/spreadsheets/d/12VBrFxOTISrF6djPwrX4seXJmwVCQTEgS5x2pVDzR_4/edit?usp=sharing

InfoQ | Google’s Eight Essential Multi-Agent Design Patterns
https://www.infoq.com/news/2026/01/multi-agent-design-patterns/

Leave a Reply