LangChain과 LangGraph는 둘 다 LLM 애플리케이션을 만들기 위한 오픈소스 프레임워크다. 이름도 비슷하고 LangGraph는 LangChain 생태계 안에 있다. 그런데 왜 둘로 나뉘어 있고, 언제 무엇을 써야 할까? 핵심은 실행 구조의 차이다. LangChain은 체인(chain), LangGraph는 그래프(graph)로 워크플로를 표현한다.
1. LangChain — 체인으로 LLM 앱 만들기
LangChain의 핵심은 여러 함수를 사슬(chain)처럼 순서대로 실행해 LLM 앱을 만드는 것이다. 예를 들어 "웹에서 데이터를 가져와(retrieve) → 요약하고(summarize) → 사용자 질문에 답한다(answer)"는 앱을 생각해 보자.
- retrieve — document loader로 여러 소스에서 콘텐츠를 불러오고, 문서가 크면 text splitter로 의미 단위의 작은 청크로 나눈다.
- summarize — chain이 요약 과정을 조율한다. prompt로 LLM에 지시하고 LLM 컴포넌트로 모델에 요청을 넘긴다.
- answer — 또 다른 chain을 구성한다. memory로 대화 맥락을 저장하고, prompt와 LLM으로 요약·맥락 기반 답변을 생성한다.
이처럼 LangChain은 document loader, text splitter, chain, prompt, memory, LLM, agent 같은 고수준 컴포넌트를 조합해 워크플로를 만든다. 각 단계에서 서로 다른 LLM을 써도 된다. 단, 실행 구조는 DAG(방향성 비순환 그래프), 즉 정해진 순서대로 앞으로만 진행한다.

2. LangGraph — 그래프로 상태 기반 워크플로 만들기
LangGraph는 LangChain 생태계 안의 상태 기반(stateful) 다중 에이전트 전용 라이브러리다. 체인으로는 표현하기 어려운 비선형·복잡한 워크플로를 다룬다. 예를 들어 "작업 관리 어시스턴트"를 만든다고 하자. 사용자 입력을 처리하고, 작업을 추가하고, 완료하고, 요약하는 기능이 필요하다.
LangGraph는 이를 그래프로 만든다. 각 동작(작업 추가·완료·요약)이 노드(Node)가 되고, 노드 사이의 전이가 엣지(Edge)가 된다. 중심에는 입력 처리(process input) 노드가 있어, LLM으로 사용자 의도를 파악하고 알맞은 동작 노드로 라우팅한다. 그리고 상태(State) 컴포넌트가 작업 목록을 전체 상호작용에 걸쳐 유지한다.
- Node — 실제 계산을 수행하는 단계/함수 (예: 작업 추가, 완료, 요약).
- Edge — 실행이 한 노드에서 다음 노드로 흐르는 경로.
- State — 모든 노드가 읽고 수정하는 공유 메모리 (예: 현재 작업 목록).
모든 노드가 상태에 접근·수정할 수 있어 맥락을 유지한 상호작용이 가능하다. 동작이 끝나면 다시 입력 처리 노드로 돌아오므로, 사용자의 다양한 요청을 어떤 순서로든 처리할 수 있다.

3. LangGraph가 주는 기능
그래프 구조 덕분에 LangGraph는 체인이 못 하는 것들을 할 수 있다.
- 루핑·분기(Looping & Branching) — 진행 중에 상태를 보고 동적으로 다음 경로를 결정한다.
- 상태 지속성(State Persistence) — 아주 긴 상호작용에서도 맥락을 유지한다.
- Human-in-the-loop(HITL) — 필요할 때 실행을 멈추고 사람이 직접 개입한다.
- 타임 트래블(Time Travel) — 이전 상태로 되감아 디버깅을 쉽게 한다.
"그냥 for 루프나 if 문을 쓰면 되지 않나?" 싶지만, 전통적 루프·조건문은 선형적이라 복잡한 상태 기반 워크플로에 필요한 유연성이 부족하다. 반면 LangGraph는 명시적 상태 관리, 실행 시점의 조건부 전이(분기), 노드 단위의 모듈성, 실행 경로를 들여다보는 관찰 가능성을 제공한다. 그래프는 Mermaid 다이어그램으로 시각화해 구조를 직관적으로 이해할 수도 있다.
4. 정면 비교


5. 언제 무엇을 쓰나
- LangChain을 쓸 때 — 필요한 단계의 순서가 명확한 순차적 작업. 예: 데이터를 가져와 처리하고 결과를 내보내는 파이프라인. (agent 기능으로 비순차 작업도 어느 정도 가능)
- LangGraph를 쓸 때 — 진행 상황에 따라 다음 단계가 달라지고, 긴 맥락 유지·동적 분기·루프·사람 개입이 필요한 복잡한 시스템. 예: 오랜 대화의 맥락을 유지하며 다양한 요청을 처리하는 가상 어시스턴트.

다음 글에서는 LangGraph의 State·Node·Edge를 실제 코드로 만들어 본다. TypedDict로 상태를 정의하고, 노드 함수를 연결하고, 조건부 엣지(conditional edge)로 루프를 도는 간단한 워크플로를 직접 구성한다.
'AI > Agent' 카테고리의 다른 글
| Reflexion: 도구와 인용으로 스스로 검증하는 에이전트 (0) | 2026.07.01 |
|---|---|
| Reflection: 스스로 비평하고 고치는 에이전트 (0) | 2026.07.01 |
| ReAct: 추론과 행동을 결합한 에이전트 (0) | 2026.07.01 |
| LangGraph: State·Node·Edge로 워크플로 만들기 (0) | 2026.07.01 |
| Generative AI vs Agentic AI (0) | 2026.07.01 |