본문으로 건너뛰기
r/LocalLLaMA조회 2

LLM 에이전트를 위한 분산 작업 프레임워크 'Shadows' 공개: Cron과 Heartbeat 방식의 한계 극복

기존 에이전트 프레임워크의 비효율적인 스케줄링 방식을 비판하며, Redis 기반의 고성능 분산 작업 프레임워크 'Shadows'를 오픈소스로 공개했다.

실용적 조언

  • 반복되는 에이전트 작업에는 단순 루프 대신 Shadows의 Perpetual Task를 사용하여 안정성을 확보하라.
  • 동일 머신에서 실행되는 작업은 직렬화 과정을 생략하여 오버헤드를 마이크로초 단위로 줄여라.
  • uv pip install shadow-task 명령어로 즉시 설치하여 기존 프로젝트에 적용 가능하다.

섹션별 상세

01
OpenClaw와 Hermes 같은 기존 에이전트 프레임워크가 HEARTBEAT.md 파일을 폴링하거나 자연어 cron 래퍼를 사용하는 등 비효율적인 스케줄링 계층을 가지고 있다고 비판했다. 엔지니어링 관점에서 이러한 방식은 대규모 엔터프라이즈 환경에서 유지보수와 확장이 어렵다는 점을 강조했다.
02
Shadows는 Redis Streams를 기반으로 구축되어 분산 환경에서 작업을 관리하며 FastAPI 스타일의 의존성 주입을 지원한다. 모든 작업은 결정론적이고 수명 주기가 관리되며, Redis를 통해 작업 상태가 유지되므로 워커가 중단되어도 마지막 지점부터 재개할 수 있다.
03
Perpetual Tasks 패턴을 도입하여 무한 반복되는 작업을 안정적으로 처리한다. Perpetual 클래스를 사용해 작업 간격을 설정하면 성공 여부와 관계없이 스스로 재스케줄링되며, 이는 단순한 루프나 cron보다 높은 신뢰성을 보장한다.
python
async def sync_document_queue(
    perpetual: Perpetual = Perpetual(every=timedelta(minutes=2))
) -> None:
    pending = await fetch_pending_documents()
    for doc in pending:
        await shadows.add(process_document)(doc.id)

성공/실패 여부와 관계없이 2분마다 자동으로 재스케줄링되는 Perpetual Task 예시

04
인자별 동시성 제한(Concurrency Limit) 기능을 통해 특정 팀이나 사용자가 자원을 독점하는 문제를 해결했다. Redis 레벨에서 강제되는 이 제한은 여러 머신의 워커에 걸쳐 적용되어, 대규모 코드 수집 작업이 다른 팀의 음성 엔진이나 문서 생성 파이프라인을 방해하지 않도록 보호한다.
python
async def ingest_document(
    doc_id: str, 
    team_id: str, 
    concurrency: ConcurrencyLimit = ConcurrencyLimit("team_id", max_concurrent=5)
) -> None:
    await process_and_embed(doc_id)

특정 인자(team_id)를 기준으로 동시 실행 작업 수를 제한하는 예시

05
동일 머신 내 작업에 대해 로컬 큐 라우팅을 적용하여 직렬화 오버헤드를 극적으로 줄였다. 기존 400-2500µs였던 오버헤드를 0.5-5µs 수준으로 단축함으로써 초당 작업 처리량(TPS)을 2,000에서 20,000으로 10배 향상시켰다.
python
await shadows.strike(ingest_document, "team_id", "==", "sales-team-3")
// ...수정 후
await shadows.restore(ingest_document, "team_id", "==", "sales-team-3")

특정 조건에 해당하는 작업을 즉시 중단하거나 재개하는 Strike/Restore 기능

용어 해설

레디스 스트림(Redis Streams)
Redis에서 제공하는 로그 형태의 데이터 구조로, 메시지 큐와 유사하게 데이터를 순차적으로 저장하고 여러 소비자에게 분산 전달하는 기능을 수행한다. 분산 시스템에서 작업의 순서를 보장하고 유실을 방지하는 핵심 인프라 역할을 한다.
의존성 주입(Dependency Injection)
객체가 필요로 하는 의존성을 외부에서 주입해주는 디자인 패턴으로, Shadows에서는 FastAPI와 유사한 방식으로 작업에 필요한 자원을 할당한다. 이를 통해 코드의 결합도를 낮추고 테스트와 유지보수를 용이하게 만든다.
동시성 제한(Concurrency Limit)
시스템에서 동시에 실행될 수 있는 작업의 최대 개수를 제한하는 메커니즘이다. 특정 작업이 시스템 자원을 모두 점유하여 다른 작업이 지연되는 현상을 방지하고 전체 시스템의 안정성을 유지하는 데 필수적이다.
직렬화(Serialization)
메모리 상의 객체를 네트워크 전송이나 저장이 가능한 바이트 스트림 형태로 변환하는 과정이다. Shadows는 로컬 작업 시 이 과정을 생략하는 최적화를 통해 오버헤드를 마이크로초 단위로 줄였다.

언급된 도구

Shadows추천

분산 백그라운드 작업 프레임워크

Bodega추천

Apple Silicon용 로컬 AI 운영체제

OpenClaw비추천

에이전트 프레임워크 (스케줄링 방식 비판 대상)

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 03. 31.수집 2026. 03. 31.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.