2. LangGraph 기본기
멈췄다가 이어서 하려면
이 차시를 마치면
checkpoint·memory·store 를 구분하고, 저장이 왜 기능의 전제인지 설명합니다.
Checkpoint, memory, Store — 이 셋이 자주 뒤섞입니다. 구분하고 나면 "멈췄다 이어 하기"가 왜 저장 위에서만 되는지 보입니다.
Persistence 가 하는 일
LangGraph 의 Persistence 는 graph State 를 Checkpoint 로 저장하는 계층입니다. 이 계층이 있어서 아래 다섯 가지가 가능해집니다.
- Human-in-the-loop — 멈췄다가 사람 입력을 받고 이어서 실행
- 대화와 작업 memory
- time-travel 과 디버깅
- fault tolerance
- 실패 후 resume
Checkpoint · memory · Store, 무엇이 다른가
이 셋을 섞어 쓰면 설계가 어긋납니다.
| 용어 | 정확한 의미 |
|---|---|
| Checkpoint | 실행 상태 snapshot |
| memory | 이후 판단에 쓰는 기억이라는 기능적 개념 |
| Store | Thread 밖 장기 정보 저장에 쓰는 저장 계층 |
비유
Checkpoint는 게임의 자동 저장 파일입니다. 그 순간의 상태를 그대로 담습니다.
memory는 "기억한다"는 기능 자체입니다. 저장 파일로 구현할 수도 있고 다른 방법으로 구현할 수도 있습니다.
Store는 게임을 껐다 켜도 남는 계정 정보입니다. 이번 판이 끝나도 사라지지 않습니다.
"memory 는 대화문 전체를 프롬프트에 붙이는 것"이라는 오해가 흔한데, 그것은 여러 구현 방법 중 하나일 뿐입니다.
raw/03_IMAGES/README_이미지출처.md)thread_id 가 하는 일
Checkpointer 를 쓸 때 thread_id 가 같은 실행은 같은 Thread 의 State history 와 연결됩니다. 즉 어느 작업 건의 이야기인지를 가리키는 번호입니다.
from langgraph.checkpoint.memory import InMemorySaver
graph = builder.compile(checkpointer=InMemorySaver())
config = {"configurable": {"thread_id": "case-2026-0815-001"}}
graph.invoke(first_input, config)
# 같은 thread_id 로 다시 부르면 앞의 상태에서 이어집니다
graph.invoke(second_input, config)
짧게 남는 기억과 오래 남는 기억
| 구분 | 범위 |
|---|---|
| short-term memory | 보통 Thread 수준의 State 와 Checkpoint 로 유지되는 현재 대화와 작업 기억 |
| long-term memory | 여러 Thread 와 session 을 넘어 사용자 또는 application 수준에서 유지해야 하는 정보 |
운영에서 주의할 점
InMemorySaver 는 학습과 테스트에는 편하지만 프로세스 종료 후 복원 용도로는 적합하지 않습니다. 운영에서는 durable backend 를 씁니다.
이 점을 놓치면 서버를 다시 켰을 때 진행 중이던 승인 대기 건이 모두 사라집니다. 승인 절차를 만들어 두고도 승인 자체가 유실되는 상황입니다. 분석
Persistence 를 제거하면 중단과 재개 기능 자체가 깨집니다. 그래서 HITL 을 쓰는 그래프에서 Checkpointer 는 선택이 아니라 전제 조건입니다.
이 차시의 파이썬 코드는 개념을 보이려고 떼어 놓은 예시 조각입니다. 문법 검사는 통과하지만 그대로 돌려서 결과를 확인한 코드는 아닙니다. 실행까지 검증한 코드는 4번과 6번 트랙에 있으며, 그 차시에는 무엇을 어떻게 확인했는지 따로 적어 두었습니다.