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