LangGraph LLM 기반 상태 유지형 멀티 에이전트 오케스트레이션 (2024-01-17)
2025-12-07, G30DR
1. 서론: 결정론적 체인에서 자율적 그래프로의 패러다임 전환
인공지능 애플리케이션 개발의 역사는 거대 언어 모델(LLM)의 등장과 함께 급격한 진화를 거듭해왔다. 초기 LLM 애플리케이션은 단순한 프롬프트 엔지니어링을 통해 모델의 텍스트 생성 능력을 활용하는 데 그쳤으나, 점차 외부 데이터를 검색하여 답변을 생성하는 RAG(Retrieval-Augmented Generation) 시스템으로 발전했다. 이 과정에서 LangChain과 같은 프레임워크는 데이터 로딩, 처리, 모델 호출을 연결하는 파이프라인 구축의 표준으로 자리 잡았다. LangChain의 핵심 철학은 ’체인(Chain)’으로, 이는 입력에서 출력으로 데이터가 단방향으로 흐르는 방향성 비순환 그래프(DAG, Directed Acyclic Graph) 구조를 따른다.1
그러나 AI 시스템이 단순한 정보 제공을 넘어 복잡한 작업을 수행하는 ‘에이전트(Agent)’ 단계로 진입하면서, 기존의 선형적 DAG 구조는 근본적인 한계에 봉착했다. 인간의 문제 해결 과정은 직선적이지 않다. 우리는 계획을 수립하고, 실행하고, 결과를 평가하며, 오류가 발생하면 이전 단계로 돌아가 수정하거나 새로운 전략을 수립하는 반복적(Iterative) 사고 과정을 거친다. 코딩 에이전트가 코드를 작성하고 테스트한 뒤 버그를 수정하는 루프(Loop), 검색 에이전트가 결과가 불충분할 때 쿼리를 수정하여 다시 검색하는 피드백 루프 등은 모두 순환(Cycle) 구조를 필요로 한다.2
LangGraph는 이러한 요구에 부응하여 등장한 로우레벨(Low-level) 오케스트레이션 프레임워크이다. LangChain Inc.에 의해 개발되었으나 LangChain과는 독립적으로 사용될 수 있으며, Google의 대규모 그래프 처리 시스템인 Pregel과 데이터 처리 모델인 Apache Beam에서 영감을 받아 설계되었다.3 LangGraph의 핵심 가치는 상태(State)를 명시적으로 관리하고, 에이전트 간의 복잡한 협업과 순환적 흐름을 제어 가능한(Controllable) 형태로 구현하는 데 있다.5 본 보고서는 LangGraph의 아키텍처, 상태 관리 메커니즘, 영속성 시스템, Human-in-the-Loop 기능, 그리고 다양한 멀티 에이전트 디자인 패턴을 심층적으로 분석하여, 엔터프라이즈급 AI 에이전트 시스템 구축을 위한 기술적 통찰을 제공한다.
2. 아키텍처 및 핵심 원리
LangGraph의 아키텍처는 에이전트 워크플로우를 그래프로 모델링하는 수학적 접근 방식을 취한다. 이는 복잡한 비즈니스 로직을 노드(Node)와 엣지(Edge)의 집합으로 환원하여 시각화 및 관리가 용이하게 만든다.
2.1 그래프 이론 기반의 워크플로우 모델링
LangGraph 시스템의 근간을 이루는 것은 그래프 이론이다. 여기서 그래프는 상태(State), 노드(Node), 엣지(Edge)라는 세 가지 핵심 요소로 구성된다.3
- 상태(State): 애플리케이션의 현재 스냅샷을 나타내는 공유 데이터 구조이다. 이는 그래프 내의 모든 구성 요소가 접근하고 수정할 수 있는 메모리 역할을 한다. LangGraph의 상태는 단순한 키-값 저장소가 아니라, 엄격한 스키마(Schema)에 의해 정의되고 리듀서(Reducer) 함수에 의해 업데이트되는 관리형 데이터 구조이다.3
- 노드(Node): 실제 연산(Compute)이나 부수 효과(Side-effect)를 수행하는 함수이다. 에이전트의 ’행동’에 해당하며, 현재 상태를 입력받아 로직을 수행하고, 변경된 상태의 일부(Diff)를 반환한다. 노드는 LLM 호출, 데이터베이스 쿼리, 외부 API 요청 등 모든 형태의 작업을 포함할 수 있다.3
- 엣지(Edge): 노드 간의 제어 흐름을 정의한다. 한 노드의 실행이 완료된 후 다음 실행될 노드를 결정하는 전이(Transition) 규칙이다. 엣지는 고정된 경로를 따르는 정적 엣지와 상태에 따라 경로가 바뀌는 조건부 엣지로 나뉜다.3
이러한 구조는 NetworkX와 같은 그래프 라이브러리의 인터페이스와 유사하여 개발자에게 친숙함을 제공한다.4
2.2 메시지 패싱과 슈퍼스텝(Super-step) 실행 모델
LangGraph의 실행 모델은 Google의 Pregel 시스템에서 착안한 벌크 동기식 병렬(Bulk Synchronous Parallel) 모델의 변형인 메시지 패싱(Message Passing) 방식을 채택하고 있다.3 그래프의 실행은 연속적인 ’슈퍼스텝(Super-step)’으로 이루어진다.
- 비활성 상태: 그래프 실행 초기에는 모든 노드가 비활성(Inactive) 상태이다.
- 메시지 수신 및 활성화: 특정 노드가 입력 엣지(채널)를 통해 새로운 메시지(상태 업데이트)를 수신하면 활성(Active) 상태로 전환된다.
- 실행 및 업데이트: 활성화된 노드는 자신의 함수를 실행하고, 그 결과로 상태 업데이트를 생성한다.
- 메시지 전송: 생성된 업데이트는 엣지를 통해 다음 단계의 노드들에게 메시지로 전달된다.
- 동기화 및 종료: 하나의 슈퍼스텝 내에서 병렬로 실행 가능한 모든 노드의 작업이 완료되면, 시스템은 다음 슈퍼스텝으로 넘어간다. 더 이상 처리할 메시지가 없고 활성화된 노드가 없으면 그래프 실행은 종료된다.3
이러한 이산적인 단계(Discrete Steps) 구조는 실행 과정을 예측 가능하게 만들고, 각 단계마다 상태를 저장(Checkpointing)할 수 있게 하여 디버깅과 영속성 관리를 용이하게 한다.
2.3 LangChain(DAG) vs. LangGraph(Cyclic) 비교 분석
LangChain과 LangGraph는 상호 보완적인 관계이지만, 설계 철학에서는 명확한 차이를 보인다. 다음 표는 두 프레임워크의 구조적, 기능적 차이를 상세히 비교한 것이다.
| 비교 항목 | LangChain | LangGraph |
|---|---|---|
| 기본 구조 | DAG (방향성 비순환 그래프) | Cyclic Graph (순환 그래프) |
| 실행 흐름 | 선형적 파이프라인 (Step A → B → C) | 비선형적, 루프 및 조건부 분기 (A ↔ B → C) |
| 상태 관리 | 암시적, 단계 간 데이터 전달(Pass-through) 중심 | 명시적, 공유 스키마 및 리듀서를 통한 상태 유지 |
| 복잡성 제어 | 단순한 연쇄 작업에 최적화 | 복잡한 의사결정, 에러 복구, 반복 작업에 최적화 |
| 메모리 지속성 | 실행 간 메모리 유지에 추가 설정 필요 | 체크포인터를 통한 내장된 영속성 및 상태 복원 지원 |
| 주요 사용 사례 | 단순 RAG, 일회성 챗봇, 데이터 전처리 | 자율 에이전트, 멀티 에이전트 시스템, 장기 실행 작업 |
LangChain은 조립 라인(Assembly Line)과 같아서 예측 가능한 선형 작업에 효율적이다. 반면 LangGraph는 전문가들이 협업하는 워크숍(Workshop)과 같아서, 작업을 주고받으며 완성도를 높이는 복잡한 프로세스에 적합하다.1
3. 고도화된 상태 관리 시스템 (State Management System)
LangGraph의 가장 강력한 특징은 상태(State)를 다루는 방식에 있다. 상태는 단순한 변수들의 집합이 아니라, 그래프의 흐름을 제어하고 에이전트 간의 통신을 매개하는 프로토콜이다.
3.1 상태 스키마(State Schema)와 타입 안정성
엔터프라이즈 애플리케이션에서 데이터 구조의 명확성은 매우 중요하다. LangGraph는 Python의 TypedDict 또는 Pydantic 모델을 사용하여 상태의 스키마를 정의한다.3 이는 런타임에 발생할 수 있는 데이터 타입 오류를 방지하고, 개발자가 상태 객체의 구조를 명확히 인지할 수 있도록 돕는다.
Python
from typing import TypedDict, Annotated, List, Union
import operator
class AgentState(TypedDict):
messages: Annotated[List[str], operator.add]
current_plan: str
tool_outputs: dict
iteration_count: int
위의 코드 예시에서 AgentState는 그래프 전체에서 공유되는 데이터의 청사진이다. messages 필드에 적용된 Annotated와 operator.add는 LangGraph의 독특한 상태 업데이트 메커니즘인 ’리듀서(Reducer)’를 정의한다.8
3.2 리듀서(Reducer)와 채널(Channel)의 작동 원리
LangGraph에서 노드가 상태를 반환할 때, 이 값은 기존 상태를 무조건 덮어쓰지 않는다. 각 필드(채널)마다 정의된 리듀서 함수가 새로운 값과 기존 값을 어떻게 병합할지 결정한다.8
- 기본 동작 (Overwrite): 리듀서가 명시되지 않은 필드는 노드가 반환한 새로운 값이 기존 값을 완전히 대체한다. 예를 들어,
current_plan필드는 에이전트가 계획을 수정할 때마다 최신 계획으로 덮어씌워져야 하므로 기본 동작을 따른다. - 병합 동작 (Append/Merge):
messages와 같은 대화 기록은 이전 대화를 보존하면서 새로운 메시지를 추가해야 한다. 이때operator.add리듀서를 사용하면, 노드가 반환한 새 메시지 리스트가 기존 리스트 뒤에 연결(Concatenate)된다.9
이러한 메커니즘은 병렬 실행 환경에서도 데이터 무결성을 유지하는 데 핵심적인 역할을 한다. 예를 들어, 두 개의 노드가 동시에 tool_outputs 딕셔너리에 데이터를 쓴다면, 적절한 리듀서를 통해 두 결과를 모두 보존하고 병합할 수 있다.
3.3 메시지 상태(MessagesState)의 표준화
대화형 AI 구축의 편의를 위해 LangGraph는 MessagesState라는 사전 정의된 상태 타입을 제공한다. 이는 대화 기록(messages)을 관리하고, 새로운 메시지를 자동으로 추가(append)하는 리듀서가 내장되어 있어, 챗봇 개발 시 보일러플레이트 코드를 줄여준다.9 또한 llm_calls와 같은 메타데이터를 추적하여 무한 루프를 방지하는 등의 제어 로직을 쉽게 구현할 수 있다.
4. 제어 흐름 및 라우팅 전략 (Control Flow & Routing)
그래프의 지능은 엣지(Edge)에서 나온다. LangGraph는 정적 엣지뿐만 아니라, 런타임 데이터에 기반한 동적 라우팅을 지원하여 유연한 에이전트 행동을 구현한다.
4.1 조건부 엣지 (Conditional Edges)
조건부 엣지는 현재 상태를 분석하여 다음에 실행할 노드를 결정하는 함수이다. 이는 에이전트의 ’판단’을 구현하는 핵심 요소이다.3
Python
def router(state: AgentState):
if state['iteration_count'] > 5:
return "end"
if "error" in state['tool_outputs']:
return "debugger"
return "planner"
graph.add_conditional_edges("executor", router)
이 예시에서 router 함수는 실행 횟수, 오류 발생 여부 등을 검사하여 흐름을 종료할지, 디버깅 노드로 보낼지, 계획 수립 노드로 보낼지를 결정한다. 이러한 분기 로직은 컴파일 시점이 아닌 런타임에 평가되므로 매우 동적인 대응이 가능하다.
4.2 맵-리듀스(Map-Reduce) 패턴과 Send 객체
일반적인 그래프 구조는 노드와 엣지가 사전에 정의되어야 하지만, 실행 시점에 처리해야 할 작업의 수가 결정되는 경우가 있다. 예를 들어, 검색된 10개의 문서를 각각 별도의 요약 에이전트에게 맡겨 병렬로 처리한 뒤 합쳐야 하는 경우이다. LangGraph는 Send 객체를 통해 이러한 맵-리듀스 패턴을 지원한다.3
조건부 엣지 함수에서 단일 노드 이름 대신 Send("node_name", input_state) 객체의 리스트를 반환하면, LangGraph는 해당 노드의 인스턴스를 동적으로 여러 개 생성하여 병렬로 실행한다. 각 인스턴스는 서로 다른 입력 상태(예: 각각 다른 문서)를 가지며 독립적으로 작동한다. 이는 대규모 데이터 처리나 병렬 에이전트 작업에 필수적인 기능이다.
4.3 Command 객체를 이용한 노드 내 제어 (In-Node Control)
최신 LangGraph 버전은 노드와 엣지의 구분을 유연하게 만드는 Command 객체를 도입했다.3 기존에는 노드는 상태만 업데이트하고 엣지가 경로를 결정했지만, Command 객체를 사용하면 노드 내부에서 상태 업데이트와 경로 제어를 동시에 수행할 수 있다.
Python
return Command(
update={"status": "review_required"},
goto="human_review_node"
)
이는 복잡한 조건부 엣지 로직을 작성하는 대신, 노드 함수 내의 비즈니스 로직에 흐름 제어를 통합할 수 있게 해준다. 특히 “엣지 없는 라우팅(Edgeless Routing)“을 가능하게 하여, 예외 상황 처리나 즉각적인 경로 변경이 필요한 동적 워크플로우에서 코드의 가독성과 응집력을 높인다.10
5. 영속성(Persistence)과 메모리 아키텍처
실제 서비스되는 에이전트는 상태를 기억해야 한다. 사용자와의 대화 맥락을 유지하고, 서버가 재시작되어도 작업이 중단되지 않아야 하며, 과거의 상태를 조회할 수 있어야 한다. LangGraph는 이를 위해 강력한 영속성 계층을 내장하고 있다.
5.1 체크포인터(Checkpointer)와 스레드(Thread) 모델
LangGraph의 영속성은 ‘체크포인터’ 시스템을 통해 구현된다. 그래프의 각 슈퍼스텝이 완료될 때마다, 시스템은 현재 상태의 전체 스냅샷(Checkpoint)을 저장소에 기록한다.11
- 스레드(Thread): 상태는
thread_id를 기준으로 격리되어 저장된다. 이는 웹 브라우저의 각 탭이나 채팅 앱의 각 대화방처럼 독립적인 세션을 의미한다. 개발자는config={"configurable": {"thread_id": "user_123"}}와 같이 스레드 ID를 지정하여 그래프를 실행함으로써, 해당 사용자의 이전 상태를 불러와 대화를 이어나갈 수 있다.12 - 체크포인트 내용: 각 체크포인트에는 노드 실행 결과, 채널의 값, 다음 실행 예정인 노드, 그리고 실행 당시의 설정(Config) 정보가 포함된다. 이는 단순한 데이터 저장을 넘어, 실행 컨텍스트 전체를 저장하는 것이다.13
5.2 스토리지 백엔드와 확장성
LangGraph는 개발 단계부터 프로덕션 단계까지 유연하게 대응할 수 있도록 다양한 체크포인터 구현체를 제공한다.
- MemorySaver: 데이터를 메모리(RAM)에 저장한다. 속도가 빠르지만 프로세스가 종료되면 데이터가 사라지므로 테스트나 디버깅 용도로 적합하다.14
- PostgresSaver / SqliteSaver: 관계형 데이터베이스(RDBMS)를 백엔드로 사용한다. 대용량 데이터를 안정적으로 저장할 수 있으며, 실제 서비스 운영 시 필수적이다. 비동기(Async) 처리를 지원하는
AsyncPostgresSaver등을 통해 고성능 논블로킹 I/O를 구현할 수 있다.15 - Redis/Custom: Redis와 같은 인메모리 데이터 저장소를 사용하여 고속 세션 관리를 구현하거나, 사용자의 인프라에 맞게 커스텀 체크포인터를 구현할 수도 있다.16
5.3 단기 메모리와 장기 메모리 전략
LangGraph의 메모리는 크게 단기 메모리와 장기 메모리로 구분된다.
- 단기 메모리(Short-term Memory): 스레드 내에서 유지되는 상태이다. 대화의 흐름이나 현재 수행 중인 작업의 컨텍스트를 저장한다. LLM의 컨텍스트 윈도우 한계를 극복하기 위해, 오래된 메시지를 요약(Summarization)하거나 삭제(Trimming)하는 전략을 그래프 노드로 구현하여 관리한다.14
- 장기 메모리(Long-term Memory): 스레드 간에 공유되거나 영구적으로 보존해야 할 정보(사용자 프로필, 선호도, 사실 정보)이다. LangGraph는 이를 위해 별도의
Store인터페이스를 제공하거나, 에이전트가 데이터베이스에 직접 접근하여 정보를 읽고 쓰도록 설계할 수 있다. 이는 에이전트가 “기억“을 형성하고 개인화된 경험을 제공하는 기반이 된다.11
6. Human-in-the-Loop (HITL) 및 디버깅
AI 에이전트의 자율성은 양날의 검이다. 복잡한 작업을 스스로 수행할 수 있지만, 동시에 예상치 못한 오류를 범할 위험도 있다. LangGraph는 인간이 에이전트의 실행 과정에 개입하여 감시하고, 수정하고, 승인할 수 있는 Human-in-the-Loop(HITL) 기능을 아키텍처 수준에서 지원한다.
6.1 중단점(Breakpoints) 설정과 승인 워크플로우
개발자는 그래프를 컴파일할 때 interrupt_before 또는 interrupt_after 옵션을 사용하여 특정 노드의 실행 전후에 워크플로우를 일시 정지시킬 수 있다.17
- 승인(Approval) 패턴: 예를 들어, ‘이메일 발송’ 노드 앞에 중단점을 설정한다. 에이전트가 이메일 초안을 작성하고 ‘이메일 발송’ 노드로 진입하려 하면, 그래프는 실행을 멈추고 대기한다. 사용자가 내용을 확인하고 승인(Resume) 신호를 보내면 그제야 실제 발송이 이루어진다.19
- 거부 및 피드백: 사용자가 에이전트의 작업 결과가 마음에 들지 않으면, 실행을 재개하는 대신 피드백을 담아 상태를 업데이트할 수 있다. 그러면 에이전트는 피드백을 반영하여 작업을 다시 수행한다.
6.2 상태 검사 및 수동 업데이트 (State Inspection & Modification)
그래프가 중단된 상태에서 개발자는 get_state 메서드를 통해 현재의 모든 변수와 에이전트의 내부 상태를 조회할 수 있다. 더 나아가 update_state 메서드를 사용하면 상태를 임의로 조작할 수 있다.20
이 기능은 매우 강력하다. 에이전트가 잘못된 도구를 선택했거나, 생성한 텍스트에 오류가 있을 때, 인간이 직접 상태 값을 올바르게 수정(“Hacking the state”)한 뒤 실행을 재개할 수 있다. 이는 에이전트를 올바른 방향으로 유도(Steering)하는 데 필수적이다.
6.3 시간 여행(Time Travel): 과거 상태의 재생과 분기
LangGraph의 체크포인터는 과거의 모든 스냅샷을 보존하므로, 소위 ’시간 여행’이 가능하다.12
- Replay (재생): 과거의 특정 시점(Checkpoint ID)으로 돌아가서 당시의 상태를 확인하거나, 동일한 입력으로 다시 실행하여 에이전트의 행동을 디버깅할 수 있다.
- Forking (분기): 과거의 특정 시점으로 돌아가서, 상태의 일부를 수정한 뒤 실행을 재개하면 새로운 실행 분기(Fork)가 생성된다.22 이는 “만약 그때 다른 검색 결과를 얻었다면?” 또는 “만약 사용자가 다르게 응답했다면?“과 같은 가정법적 시나리오(Counterfactuals)를 테스트하는 데 유용하다. 기존의 실행 기록은 보존되므로 안전하게 다양한 실험을 할 수 있다.23
7. 멀티 에이전트 디자인 패턴 (Multi-Agent Patterns)
LangGraph는 단일 에이전트를 넘어, 여러 전문화된 에이전트가 협업하는 시스템을 구축하는 데 최적화되어 있다. 각 에이전트를 그래프의 노드로 표현하고, 이들 간의 통신을 엣지로 정의함으로써 복잡한 조직 구조를 시뮬레이션할 수 있다.
7.1 슈퍼바이저(Supervisor) 아키텍처
가장 널리 사용되는 패턴으로, 중앙의 관리자(Supervisor) 에이전트가 작업을 하위 워커(Worker) 에이전트들에게 분배하는 방식이다.24
- 구조: ‘Supervisor’ 노드는 사용자의 요청을 분석하고, 이를 처리할 수 있는 적절한 전문가(예: 수학 전문가, 코딩 전문가, 검색 전문가)를 선택한다.
- 라우팅: 슈퍼바이저는 LLM의 함수 호출(Function Calling) 기능을 사용하여 다음에 실행할 에이전트의 이름을 출력한다. LangGraph는 이 출력을 바탕으로 제어권을 해당 워커 노드로 넘긴다.
- 종합: 워커 에이전트가 작업을 마치고 결과를 반환하면, 슈퍼바이저는 이를 검토하여 최종 답변을 생성할지 아니면 다른 워커에게 추가 작업을 시킬지 결정한다.26
이 패턴은 책임 소재가 명확하고 확장이 용이하여, 다양한 도구를 사용하는 복합적인 작업 처리에 적합하다.
7.2 계층적(Hierarchical) 팀 구조
조직의 규모가 커지면 단일 슈퍼바이저가 모든 워커를 관리하기 어렵다. LangGraph는 슈퍼바이저 아래에 또 다른 슈퍼바이저를 두는 계층적 구조를 지원한다.25
예를 들어, 최상위 ‘프로젝트 매니저’ 에이전트 아래에 ‘개발 팀장’, ‘디자인 팀장’, ‘QA 팀장’ 에이전트를 두고, 각 팀장 아래에 실무 에이전트들을 배치할 수 있다. 각 팀은 서브그래프(Subgraph)로 구현되어 독립적으로 작동하며, 상위 그래프와 상태를 주고받는다. 이는 시스템의 복잡도를 캡슐화하고 모듈화하는 데 효과적이다.
7.3 네트워크 및 핸드오프(Handoff) 패턴
중앙 관리자 없이 에이전트들이 대등한 관계에서 협업하는 패턴이다.27
- 핸드오프(Handoff): 현재 에이전트가 작업을 수행하다가 자신의 능력을 벗어나거나 다른 전문가의 도움이 필요하다고 판단하면, 명시적으로 다른 에이전트에게 제어권을 넘긴다. 예를 들어, ‘판매 상담’ 에이전트가 기술적인 질문을 받으면 ‘기술 지원’ 에이전트에게 대화 맥락과 함께 제어권을 이양한다.27
- 도구로서의 에이전트: 한 에이전트가 다른 에이전트를 마치 도구(Tool)처럼 호출하여 사용할 수도 있다. 이는 에이전트 간의 유기적인 협력을 가능하게 한다.
8. 고급 인지 아키텍처 (Advanced Cognitive Architectures)
LangGraph의 순환적 특성은 단순한 작업 처리를 넘어, 인간의 사고 과정을 모방한 고급 인지 아키텍처 구현을 가능하게 한다.
8.1 계획 및 실행 (Plan-and-Execute)
전통적인 ReAct(Reasoning and Acting) 방식은 매 단계마다 생각하고 행동하는 방식이지만, 복잡한 작업에서는 전체적인 시야를 잃기 쉽다. 계획 및 실행 패턴은 이를 보완한다.28
- Planner: 사용자의 목표를 달성하기 위한 상세한 단계별 계획을 먼저 수립한다.
- Executor: 수립된 계획의 각 단계를 순차적으로 실행한다. 이때 각 단계는 별도의 하위 에이전트나 도구 호출이 될 수 있다.
- Re-planner: 실행 결과를 바탕으로 계획을 업데이트한다. 이미 완료된 단계는 표시하고, 실행 중 발생한 새로운 정보를 바탕으로 향후 계획을 수정하거나 추가한다.
LangGraph는 Planner와 Executor 사이의 순환 루프를 통해, 계획이 틀어졌을 때 유연하게 대응하는 적응형 시스템을 구축할 수 있게 한다.
8.2 성찰(Reflection / Reflexion)
에이전트가 자신의 결과물을 스스로 평가하고 개선하는 메타 인지 능력이다.30
- Actor (작성자): 초안을 작성하거나 코드를 생성한다.
- Critique (비평가): 생성된 결과물의 품질, 정확성, 안전성 등을 평가하고 구체적인 피드백을 제공한다.
- Refinement Loop: 비평가의 피드백이 긍정적일 때까지 Actor는 결과물을 수정하고 다시 제출한다.
이러한 성찰 루프는 LLM의 할루시네이션을 줄이고 결과물의 품질을 비약적으로 향상시키는 데 기여한다. LangGraph의 상태 관리 기능은 이 반복 과정에서 이전 초안과 피드백 히스토리를 유지하여 점진적인 개선을 가능하게 한다.30
9. 결론 및 도입 전략
9.1 요약 및 시사점
LangGraph는 LLM 애플리케이션 개발의 패러다임을 ’체인’에서 ’그래프’로 전환시켰다. 명시적인 상태 관리, 순환 실행 모델, 강력한 영속성, 그리고 Human-in-the-Loop 기능은 실험실 수준의 토이 프로젝트를 넘어, 실제 비즈니스 환경에서 신뢰할 수 있는 에이전트 시스템을 구축하기 위한 필수적인 요소들이다. 특히 멀티 에이전트 패턴과 고급 인지 아키텍처의 지원은 AI가 단순한 도구를 넘어 조직의 구성원으로서 협업할 수 있는 가능성을 열어주었다.
9.2 도입 가이드라인
LangGraph의 도입을 고려할 때는 프로젝트의 복잡도를 냉정하게 평가해야 한다.
- 단순 파이프라인: 입력에 대해 고정된 절차를 거쳐 출력을 내는 단순한 RAG나 챗봇이라면, LangChain의 LCEL(LangChain Expression Language)이나 기본적인 체인 구조가 더 효율적이고 설정이 간편하다.1
- 복잡한 에이전트 시스템: 에이전트가 스스로 판단하여 경로를 바꾸거나, 작업을 반복하거나, 장기간에 걸쳐 상태를 유지해야 한다면 LangGraph가 필수적이다. 특히 다수의 에이전트가 협업하거나 인간의 승인 절차가 필요한 경우 LangGraph의 아키텍처적 이점이 극대화된다.2
9.3 미래 전망
LangGraph는 LangSmith와 같은 모니터링 및 평가 도구, 그리고 LangGraph Cloud와 같은 배포 플랫폼과 결합하여 완전한 ‘AgentOps’ 생태계를 형성하고 있다.32 향후에는 시각적 도구를 통해 그래프를 설계하고 디버깅하는 ’LangGraph Studio’와 같은 로우코드/노코드 환경이 더욱 발전하여, 에이전트 개발의 진입 장벽을 낮출 것으로 전망된다. 개발자들은 이제 프롬프트 엔지니어링을 넘어, 에이전트의 사고 흐름과 협업 구조를 설계하는 ’인지 아키텍트(Cognitive Architect)’로서의 역량을 갖추어야 할 것이다.
10. 참고 자료
- LangChain vs. LangGraph: A Developer’s Guide to Choosing Your AI Workflow, https://duplocloud.com/blog/langchain-vs-langgraph/
- LangChain vs. LangGraph: What’s the Real Difference? | by Nilupul Manodya - Medium, https://nilupulmanodya.medium.com/langchain-vs-langgraph-whats-the-real-difference-d35fcd5a6c91
- Graph API overview - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/graph-api
- LangGraph overview - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/overview
- LangGraph - LangChain, https://www.langchain.com/langgraph
- A Gentle, Hands-on Introduction to LangGraph | by Sonakshi Arora | Oct, 2025, https://medium.com/@sonakshi.arora02/a-gentle-hands-on-introduction-to-langgraph-7a65f24937b2
- Introduction to LangGraph: Core Concepts and Basic Components - DEV Community, https://dev.to/jamesli/introduction-to-langgraph-core-concepts-and-basic-components-5bak
- LangGraph 101: Understanding the Core Concepts of State, Nodes …, https://medium.com/@barsegyan96armen/langgraph-101-understanding-the-core-concepts-of-state-nodes-and-edges-in-javascript-f91068683d7d
- Quickstart - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/quickstart
- The Command Object in Langgraph - Medium, https://medium.com/@vivekvjnk/the-command-object-in-langgraph-bc29bf57d18f
- Memory overview - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/memory
- Mastering Persistence in LangGraph: Checkpoints, Threads, and Beyond | by Vinod Rane, https://medium.com/@vinodkrane/mastering-persistence-in-langgraph-checkpoints-threads-and-beyond-21e412aaed60
- Persistence - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/persistence
- Memory - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/add-memory
- use timetravel in postgresaver · Issue #5861 · langchain-ai/langgraph - GitHub, https://github.com/langchain-ai/langgraph/issues/5861
- Need guidance on using LangGraph Checkpointer for persisting chatbot sessions - Reddit, https://www.reddit.com/r/LangChain/comments/1on4ym0/need_guidance_on_using_langgraph_checkpointer_for/
- Interrupts - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/interrupts
- LangGraph (Part 4): Human-in-the-Loop for Reliable AI Workflows | by Sitabja Pal | Medium, https://medium.com/@sitabjapal03/langgraph-part-4-human-in-the-loop-for-reliable-ai-workflows-aa4cc175bce4
- LangGraph Breakpoints or Interrupt: How to Add Human-in-the-Loop Control to Your AI Workflows | by Sangeethasaravanan | Medium, https://sangeethasaravanan.medium.com/build-llm-workflows-with-langgraph-breakpoints-and-interrupts-for-human-in-the-loop-control-bb311ce681c3
- Use time-travel - Docs by LangChain, https://docs.langchain.com/oss/javascript/langgraph/use-time-travel
- Use time-travel - Docs by LangChain, https://docs.langchain.com/oss/python/langgraph/use-time-travel
- Time travel using the server API - Docs by LangChain, https://docs.langchain.com/langsmith/human-in-the-loop-time-travel
- How to update graph state while preserving interrupts? - LangGraph - LangChain Forum, https://forum.langchain.com/t/how-to-update-graph-state-while-preserving-interrupts/1655
- Build a supervisor agent - Docs by LangChain, https://docs.langchain.com/oss/python/langchain/supervisor
- langchain-ai/langgraph-supervisor-py - GitHub, https://github.com/langchain-ai/langgraph-supervisor-py
- Building a Supervisor Multi-Agent System with LangGraph Hierarchical Intelligence in Action | by Mani | Oct, 2025 | Medium, https://medium.com/@mnai0377/building-a-supervisor-multi-agent-system-with-langgraph-hierarchical-intelligence-in-action-3e9765af181c
- Multi-agent - Docs by LangChain, https://docs.langchain.com/oss/python/langchain/multi-agent
- Agent Design Patterns - Plan and Execute - Hands-on coding in LangGraph, https://www.youtube.com/watch?v=vpD9kf5Xwo0&vl=en
- Plan-and-Execute Agents - LangChain Blog, https://blog.langchain.com/planning-agents/
- Built with LangGraph! #29: Reflection & Reflexion | by Okan Yenigün | Nov, 2025 | Towards Dev, https://medium.com/towardsdev/built-with-langgraph-29-reflection-reflexion-10cc1cf96f35
- Reflection Agents With LangGraph | Agentic LLM Based Applications | by Prince Krampah | AI monks.io | Medium, https://medium.com/aimonks/reflection-agents-with-langgraph-agentic-llm-based-applications-87e43c27adc7
- langchain-ai/langgraph: Build resilient language agents as graphs. - GitHub, https://github.com/langchain-ai/langgraph