통신 프로토콜(메시지 버스)
메시지 버스(Redis, NATS, Kafka)로 에이전트를 분리하여 독립적으로 확장하고 장애를 처리하게 해보세요.
통신 프로토콜(메시지 버스)은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Agents 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
프로세스 내부 대화를 넘어서
소규모 시스템에서는 에이전트가 프로세스 내부에서 서로 호출합니다. 대규모 시스템에서는 Redis, NATS 또는 Kafka를 메시지 버스로 사용해 에이전트를 분리하십시오.
분리해야 하는 이유
- 에이전트를 독립적으로 확장할 수 있습니다
- 에이전트별로 장애를 격리할 수 있습니다
- 비동기 워크플로를 사용할 수 있습니다(느린 에이전트를 인라인으로 기다릴 필요가 없습니다)
- 디버깅을 위해 메시지를 재생할 수 있습니다
- 언어 간 연동이 가능합니다. Python 에이전트와 Go 에이전트가 모두 구독할 수 있습니다
Simple Bus: Redis Pub/Sub
import redis
r = redis.Redis()
# Publisher
r.publish('agent.research.task', json.dumps({'task_id': 'abc', 'query': '...'}))
# Subscriber
p = r.pubsub()
p.subscribe('agent.research.task')
for msg in p.listen():
if msg['type'] == 'message':
handle_task(json.loads(msg['data']))발행/구독을 통한 브로드캐스팅
여러 에이전트가 이벤트에 관한 알림을 받아야 할 때 사용하십시오(예: "user-question-received").
작업 분배를 위한 큐
각 작업을 정확히 하나의 작업자가 처리해야 할 때 큐(Redis BLPOP, RabbitMQ)를 사용하십시오:
import json, queue
r = queue.Queue()
# Producer
r.put(json.dumps({'task_id': 'abc', 'kind': 'research'}))
def process(task):
print('processing', task)
# Worker
while not r.empty():
raw = r.get()
task = json.loads(raw)
process(task)
속도를 위한 NATS
NATS는 마이크로서비스를 위해 설계된 경량 메시지 브로커입니다. 밀리초 미만의 지연 시간과 내장된 요청/응답 기능을 제공합니다:
import nats
nc = await nats.connect('nats://localhost:4222')
await nc.publish('agent.research', json.dumps(task).encode())
# Request/reply
response = await nc.request('agent.research', payload, timeout=10)내구성을 위한 Kafka
Kafka는 내구성이 있고 재생 가능한 로그를 추가합니다. 감사와 재생에 적합합니다:
from confluent_kafka import Producer, Consumer
producer.produce('agent-events', key=task_id, value=json.dumps(task))
producer.flush()이벤트 스키마
모든 메시지의 구조를 Pydantic 또는 Protobuf로 정의하십시오. 스키마가 없으면 버스가 엉망이 됩니다:
class ResearchTask(BaseModel):
task_id: str
user_id: str
query: str
deadline: datetime
class ResearchResult(BaseModel):
task_id: str
findings: list[str]
duration_ms: int상관관계 식별자
관련된 모든 메시지에 같은 상관관계 식별자를 포함하면 서비스 전체에서 작업을 추적할 수 있습니다:
record = {'correlation_id': 'abc', 'task_id': 'def', 'span': 'llm_call'}
print(record)
멱등성 핸들러
메시지는 두 번 이상 전달될 수 있습니다(최소 한 번 전달 보장). 핸들러를 멱등성으로 만들어 같은 작업 식별자가 한 번만 처리되도록 하십시오.
배달 불능 큐
핸들러가 반복해서 실패하면 무한히 반복하는 대신 사람의 검토를 위해 메시지를 DLQ에 저장하십시오:
if attempts > MAX_RETRIES:
r.rpush('queue:research:dlq', raw)
log.error('Sent to DLQ', extra={'task_id': task_id})관찰 가능성
모든 메시지를 추적하십시오:
- 추적 식별자가 버스를 통해 전달됩니다
- 로그에 작업 식별자와 상관관계 식별자가 포함됩니다
- 측정 항목: 주제별 처리량, 지연 시간, 오류율
도입 시점
간단하게 시작하십시오. 프로세스 내부 에이전트부터 시작하고, 다음 조건이 있을 때만 버스로 옮기십시오:
- 프로덕션 환경에 에이전트가 5개 이상 있습니다
- 에이전트를 독립적으로 확장해야 합니다
- 여러 서비스에 걸친 워크플로가 있습니다
최소 한 번 전달이란
"최소 한 번 전달"은 핸들러에 무엇을 요구할까요?
복습
간단한 경우에는 Redis, 지연 시간이 중요한 경우에는 NATS, 내구성이 필요한 경우에는 Kafka를 사용해 분리하십시오. 스키마, 상관관계 식별자, 멱등성 핸들러, DLQ를 사용하십시오.
자주 묻는 질문
“통신 프로토콜(메시지 버스)” 강의는 무료인가요?
네 — “통신 프로토콜(메시지 버스)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.
“통신 프로토콜(메시지 버스)”에서 뭘 배우나요?
메시지 버스(Redis, NATS, Kafka)로 에이전트를 분리하여 독립적으로 확장하고 장애를 처리하게 해보세요. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Agents을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“통신 프로토콜(메시지 버스)” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 대화 기반 다중 에이전트(AutoGen)
- 계층형 감독자(오케스트레이터 + 작업자)
- 에이전트 역할 및 전문화
- 통신 프로토콜(메시지 버스)