LangGraph

LangGraph 7강

[영속성] 체크포인터 & 메모리

지금까지의 그래프는 실행이 끝나면 상태를 잊는다. 체크포인터(checkpointer)를 붙이면 매 단계 State가 저장되고, thread_id로 같은 대화를 다시 이어갈 수 있다. 이것이 LangGraph 메모리의 정체다. 이 영속성은 단순 대화 기억뿐 아니라 사람 개입(8강)·타임 트래블(11강)의 토대가 된다.

LangGraph 7강 구성도

이 강의 목표는 체크포인터로 대화를 기억하는 그래프를 만드는 것이다.

1. 체크포인터 붙이기

compile에 체크포인터를 넘기면 끝이다.

from langgraph.checkpoint.memory import MemorySaver
app = g.compile(checkpointer=MemorySaver())

2. thread_id 로 대화 잇기

실행 때 configurable.thread_id를 주면, 같은 값이면 이전 상태를 복원해 이어간다.

cfg = {"configurable": {"thread_id": "user-1"}}
app.invoke({"messages": [("user", "내 이름은 리야")]}, cfg)
r = app.invoke({"messages": [("user", "내 이름 뭐였지?")]}, cfg)
print(r["messages"][-1].content)   # "리"라고 기억한다

thread_id를 바꾸면 완전히 새로운 대화가 시작된다. 여러 사용자를 thread_id로 격리한다.

3. 체크포인터 종류

체크포인터 용도
MemorySaver 인메모리, 실험·테스트용
SqliteSaver 로컬 파일(SQLite) 영속
PostgresSaver 운영 환경 영속 저장
Async 계열 async 그래프용 비동기 버전

핵심 명령·용어

이름
checkpointer 상태 저장기
thread_id 대화 세션 식별자
MemorySaver 인메모리 체크포인터
configurable 실행별 설정 dict

예제

# 운영: Postgres 로 영속 저장
from langgraph.checkpoint.postgres import PostgresSaver
with PostgresSaver.from_conn_string("postgresql://...") as cp:
    cp.setup()
    app = g.compile(checkpointer=cp)
    app.invoke(inp, {"configurable": {"thread_id": "u1"}})

해설) 체크포인터만 바꾸면 같은 그래프가 실험에서 운영으로 넘어간다. thread_id 설계(사용자별·세션별)가 멀티유저 서비스의 핵심이다.

댓글 0