런타임·프레임워크·하네스 (Runtimes, Frameworks, and Harnesses)
런타임·프레임워크·하네스 (Runtimes, Frameworks, and Harnesses)
LangChain, LangGraph, 그리고 Deep Agents가 어떻게 다른지, 각각 언제 써야 하는지 이해하기
LangChain은 에이전트를 만들 때 쓰는 오픈소스 패키지를 여럿 관리하고 있어요. 그런데 이 패키지들이 에이전트 개발 스택에서 각자 맡은 자리가 달라요. 에이전트 프레임워크(agent frameworks), 에이전트 런타임(agent runtimes), **에이전트 하네스(agent harnesses)**의 차이를 이해하면, 내 상황에 맞는 도구를 고를 수 있어요.
| 런타임 (Runtime) | 프레임워크 (Framework) | 하네스 (Harness) | |
|---|---|---|---|
| 가치 (Value add) | 내구성 있는 실행(Durable execution), 스트리밍, HITL, 영속성(Persistence) | 추상화(Abstractions), 통합(Integrations) | 사전 정의된 도구, 프롬프트, 서브에이전트 |
| 언제 쓰나 (When to use) | 세밀한 제어, 오래 실행되는 상태 기반 워크플로와 에이전트 | 빠르게 시작하고 싶을 때, 팀의 빌드 방식을 표준화할 때 | 더 자율적인 에이전트, 복잡하고 비결정적인 작업을 마주한 에이전트 |
| 선택지 (Options) | LangGraph, Temporal, Inngest | LangChain, Vercel의 AI SDK, CrewAI, OpenAI Agents SDK, Google ADK, LlamaIndex | Deep Agents SDK, Claude Agent SDK, Manus |
에이전트 프레임워크 (예: LangChain)
에이전트 프레임워크는 LLM으로 뭔가를 만들 때 시작을 쉽게 해 주는 추상화를 제공해요.
LangChain은 구조화된 콘텐츠 블록, 에이전트 루프, 미들웨어 같은 추상화를 제공하는 에이전트 프레임워크예요.
LangChain의 추상화는 처음 시작하기는 쉽게 하면서도, 고급 사용 사례에 필요한 유연성은 그대로 갖추도록 설계됐어요.
LangChain이 LangGraph 위에 built 되어 있긴 하지만, LangChain을 쓰는 데 LangGraph를 알 필요는 없어요.
에이전트 프레임워크의 다른 예로는 Vercel의 AI SDK, CrewAI, OpenAI Agents SDK, Google ADK, LlamaIndex 등이 있어요.
LangChain은 언제 쓰나요
이런 경우에 LangChain을 써요.
- 에이전트와 자율 애플리케이션을 빠르게 만들고 싶을 때
- 모델, 도구, 에이전트 루프에 대한 표준 추상화가 필요할 때
- 쓰기 쉽지만 유연성도 갖춘 프레임워크를 원할 때
- 복잡한 오케스트레이션이 필요 없는 단순한 에이전트 애플리케이션을 만들 때
에이전트 런타임 (예: LangGraph)
에이전트 런타임은 에이전트를 프로덕션에서 실행하기 위한 도구를 제공해요. 지원되는 도구는 다음과 같아요.
- 내구성 있는 실행(Durable execution): 에이전트가 실패에도 견디고, 오랫동안 실행되며 중단된 지점부터 이어서 진행해요.
- 스트리밍(Streaming): 워크플로와 응답을 스트리밍하는 기능.
- 휴먼-인-더-루프(Human-in-the-loop): 에이전트 상태를 검사하고 수정해서 사람의 감독을 결합하는 기능.
- 영속성(Persistence): 상태 관리를 위한 스레드 수준·스레드 간 영속성.
- 낮은 수준의 제어(Low-level control): 높은 수준의 추상화 없이 에이전트 오케스트레이션을 직접 제어하는 기능.
LangGraph는 오래 실행되는 상태 기반 에이전트를 만들고, 관리하고, 배포하기 위한 저수준 오케스트레이션 프레임워크이자 런타임이에요.
에이전트 프레임워크는 일반적으로 더 높은 수준이고, 에이전트 런타임 위에서 실행돼요. 예를 들어 LangChain 1.0은 LangGraph 위에 built 되어 있어요.
에이전트 런타임의 다른 예로는 Temporal, Inngest 그리고 그 외 내구성 있는 실행 엔진들이 있어요.
LangGraph는 언제 쓰나요
이런 경우에 LangGraph를 써요.
- 에이전트 오케스트레이션을 세밀하고 낮은 수준으로 제어해야 할 때
- 오래 실행되는 상태 기반 에이전트를 위한 내구성 있는 실행이 필요할 때
- 결정적 단계와 에이전트 단계를 섞어 쓰는 복잡한 워크플로를 만들 때
- 에이전트 배포를 위한 프로덕션급 인프라가 필요할 때
에이전트 하네스 (예: Deep Agents SDK)
에이전트 하네스는 의견을 분명히 담고, batteries-included(필요한 게 다 들어 있는) 프레임워크예요. 정교하고 오래 실행되는 에이전트를 만드는 데 필요한 도구와 기능이 내장돼 있어요. 지원되는 도구는 다음과 같아요.
- 계획 능력(Planning capabilities): 할 일 목록으로 여러 작업을 추적하기.
- 작업 위임(Task delegation): 서브에이전트로 작업을 위임하고 컨텍스트를 깔끔하게 유지하기.
- 파일 시스템(File system): 서로 다른 플러그형 스토리지 백엔드에 있는 파일에 대한 읽기·쓰기 접근.
- 토큰 관리(Token management): 대화 히스토리 요약과 대용량 도구 결과 제거(eviction).
Deep Agents SDK는 LangGraph 위에 built 되어 있고, 계획 능력, 컨텍스트 관리를 위한 파일 시스템, 서브에이전트를 생성하는 능력 등을 더해요. Deep Agents는 **계획과 분해(decomposition)**가 필요한 복잡하고 다단계 작업을 위해 설계됐어요.
예시 작업에는 상태 안의 검색 결과, 스크립트, 그 외 산출물과 함께 작업하는 경우가 있어요.
에이전트 하네스의 다른 예로는 Claude Agent SDK, Manus, 그리고 그 외 코딩 CLI들이 있어요.
Deep Agents SDK는 언제 쓰나요
이런 경우에 Deep Agents SDK를 써요.
- 오랜 시간 동안 실행되는 에이전트를 만들 때
- 복잡하고 다단계인 작업을 처리해야 하는 에이전트를 만들 때
- 파일시스템 연산, bash 실행, 자동 컨텍스트 엔지니어링 같은 사전 정의된 도구를 쓰고 싶을 때
- 사전 정의된 프롬프트와 서브에이전트를 쓰고 싶을 때
기능 비교
LangChain, LangGraph, Deep Agents로 비슷한 작업을 할 수는 있어요. 하지만 통합하는 수준이 달라요.
| 기능 | LangGraph | LangChain | Deep Agents |
|---|---|---|---|
| 단기 기억 (Short-term memory) | Short-term memory | Short-term memory | StateBackend |
| 장기 기억 (Long-term memory) | Long-term memory | Long-term memory | Long-term memory |
| 스킬 (Skills) | - | Multi-agent skills | Skills |
| 서브에이전트 (Subagents) | Subgraphs | Multi-agent subagents | Subagents |
| 휴먼-인-더-루프 (Human-in-the-loop) | Interrupts | Human-in-the-loop middleware | interrupt_on 파라미터 |
| 스트리밍 (Streaming) | Streaming | Agent Streaming | Streaming |