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이후 판단에 쓰는 기억이라는 기능적 개념
StoreThread 밖 장기 정보 저장에 쓰는 저장 계층

비유

Checkpoint는 게임의 자동 저장 파일입니다. 그 순간의 상태를 그대로 담습니다.

memory"기억한다"는 기능 자체입니다. 저장 파일로 구현할 수도 있고 다른 방법으로 구현할 수도 있습니다.

Store는 게임을 껐다 켜도 남는 계정 정보입니다. 이번 판이 끝나도 사라지지 않습니다.

"memory 는 대화문 전체를 프롬프트에 붙이는 것"이라는 오해가 흔한데, 그것은 여러 구현 방법 중 하나일 뿐입니다.

checkpoint 저장과 interrupt 를 통한 사람 승인이 이어지는 흐름도
Persistence 와 HITL 의 관계. 출처: 학습팩 자체 제작 개념도 (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번 트랙에 있으며, 그 차시에는 무엇을 어떻게 확인했는지 따로 적어 두었습니다.

이해도 확인

문항을 불러오는 중입니다.