콘텐츠로 이동

LangChain vs LangGraph: 제어 흐름과 복잡도의 차이

**LangChain**과 **LangGraph**는 모두 LLM 애플리케이션을 구축하기 위한 도구이지만, **제어 흐름(Control Flow)**을 다루는 방식과 **복잡도**에서 결정적인 차이가 있습니다.

한마디로 요약하면:

  • LangChain: 선형적인 파이프라인(DAG) 구축에 최적화됨. (A → B → C)
  • LangGraph: **순환(Loop)과 상태(State)**가 있는 복잡한 에이전트 구축에 최적화됨. (A ↔ B)

1. LangChain (The Foundation)

LangChain은 LLM 애플리케이션의 기본 빌딩 블록을 제공하는 오케스트레이션 프레임워크입니다.

  • 구조: 주로 DAG(Directed Acyclic Graph, 방향성 비순환 그래프) 구조를 따릅니다. 즉, 데이터가 입력에서 출력으로 한 방향으로 흐르는 '체인(Chain)' 형태입니다.
  • 특징: PromptLLMOutput Parser와 같이 정해진 순서대로 작업이 실행됩니다.
  • 한계: 에이전트가 스스로 판단하여 이전 단계로 돌아가거나(Loop), 작업을 반복 수정하는 복잡한 로직을 구현하기 어렵습니다 (기존 AgentExecutor는 블랙박스 형태라 커스텀이 난해함).

2. LangGraph (The Extension)

LangGraph는 LangChain 위에서 동작하는 라이브러리로, 순환(Cycle) 기능과 정교한 **상태 관리(State Management)**를 추가한 것입니다.

  • 구조: 그래프(Graph) 구조를 따릅니다. 노드(Node)와 엣지(Edge)로 흐름을 정의하며, 특정 조건에 따라 이전 노드로 되돌아가는 **루프(Loop)**가 가능합니다.
  • 핵심 개념:
    • State (상태): 그래프 내의 모든 노드가 공유하고 업데이트하는 메모리 객체입니다.
    • Nodes (노드): 실제 작업을 수행하는 함수(LLM 호출, 툴 실행 등)입니다.
    • Edges (엣지): 노드 간의 제어 흐름입니다. (조건부 분기 포함)
  • 용도: 멀티 에이전트 시스템, Human-in-the-loop(중간에 사람이 개입), 자기 성찰(Reflection) 등 복잡한 워크플로우.

3. 주요 차이점 비교

특징 LangChain (LCEL) LangGraph
핵심 구조 Chain (사슬) State Machine (상태 머신)
데이터 흐름 선형적 (Linear / DAG) 순환적 (Cyclic / Loops)
제어 권한 하드코딩된 시퀀스 중심 LLM의 판단에 따른 동적 라우팅 중심
상태 관리 단계별로 데이터 전달 (Pass-through) 전역 상태(State)를 지속적으로 갱신
주요 사용처 단순 RAG, 챗봇, 데이터 추출 자율 에이전트, 멀티 에이전트, 복잡한 RAG
Agent 구현 AgentExecutor (레거시, 커스텀 어려움) 그래프로 직접 흐름 설계 (유연함, 투명함)

4. 언제 무엇을 써야 할까?

LangChain을 쓰세요:

  • 입력 → 처리 → 출력의 흐름이 명확하고 고정된 경우.
  • 단순한 RAG(검색 증강 생성) 파이프라인을 구축할 때.
  • 복잡한 판단 없이 한 번의 호출로 끝나는 작업.

LangGraph를 쓰세요:

  • **반복(Loop)**이 필요한 경우 (예: 코드를 짤 때까지 반복 수정, 문서 품질이 만족스러울 때까지 검색 반복).
  • 멀티 에이전트 협업이 필요한 경우 (예: 연구원 에이전트가 조사하고, 작가 에이전트가 글을 쓰는 구조).
  • **상태 유지**가 중요하고, 실행 중간에 사람의 승인(Human-in-the-loop)을 받아야 하는 경우.

요약

개발자 관점에서 본다면, **LangGraph**는 LangChain의 컴포넌트들을 사용하여 **유한 상태 기계(Finite State Machine)**를 쉽게 만들 수 있게 해주는 프레임워크라고 이해하시면 가장 정확합니다.

간단한 RAG에서 시작해서 스스로 오류를 수정하는 에이전트로 고도화할 계획이라면, 처음부터 LangGraph 구조를 고려하는 것이 좋습니다.