LangGraph — AI 흐름이 꼬이지 않으려면 그래프가 필요하다
RoundPrep 제13화. 플로우 차트는 그려졌는데 코드에는 if 지옥만 쌓인다. 분기·재시도·체크포인트를 한 언어로 쓰고 싶다는 이유로 그래프를 본다.
한줄 요약
LangGraph는 AI 워크플로우를 흐름도처럼 설계하는 도구다. 어느 단계에서 멈춰도 그 단계부터 재개할 수 있고, 조건에 따라 경로가 달라질 수 있다.
테제
그래프는 멋이 아니라, 무한 루프와 분기를 끊어내기 위한 구조다.
스테이크
에이전트 데모가 현장에서 같은 툴을 열 번 부르면, 그날로 신뢰는 끝이다.
전환점 — RoundPrep 메모
AgentExecutor만 쓰다 로그에 어느 분기를 탔는지 안 남아 박과장이 감사 질문을 못 넘긴다.
본문
무한 루프 사고로 탄생한 도구
2023년 초, LangChain을 쓰던 개발팀들 사이에서 비슷한 불만이 터져나왔다.
“에이전트가 같은 툴을 계속 반복 호출하다가 멈추지 않는다.”
당시 LangChain의 AgentExecutor는 에이전트가 “다음 뭘 할지”를 매번 LLM에게 물어보는 방식이었다. 문제는 LLM이 “아직 정보가 부족하다”고 판단해서 같은 검색을 반복 실행하거나, 루프 탈출 조건 없이 계속 돌아가는 케이스가 잦았다는 것이다. 로그를 보지 않으면 에이전트가 지금 뭘 하고 있는지도 알 수 없었다.
LangChain 팀은 이 문제를 해결하기 위해 아예 새로운 레이어를 만들었다. 에이전트의 흐름을 미리 명확하게 그려두는 것. 이것이 2024년 초 공개된 LangGraph다.
수술실 체크리스트와 같은 구조
외과 의사라면 수술 전 체크리스트가 익숙할 것이다. WHO 수술 안전 체크리스트는 세 구간으로 나뉜다:
- Sign In: 마취 전 — 환자 확인, 알레르기 확인, 동의서 확인
- Time Out: 절개 전 — 팀 전원 소개, 예상 소요 시간, 항생제 투여 여부
- Sign Out: 봉합 전 — 기구 카운트, 검체 라벨 확인, 주요 우려사항 공유
각 단계는 순서가 있고, 이전 단계가 완료돼야 다음 단계로 넘어간다. 중간에 이상이 있으면 분기가 생긴다(수술 취소, 추가 확인 등).
LangGraph는 AI 워크플로우를 이와 동일한 방식으로 설계한다.
- 노드(Node) = 체크리스트의 각 항목. AI 호출 하나 또는 도구 실행 하나.
- 엣지(Edge) = 항목 간 연결. 단순 연결이거나 조건부 분기.
- 상태(State) = 수술 기록지. 모든 단계에서 공유되며 업데이트된다.
가장 중요한 기능: 체크포인트
수술 도중 환자 상태가 급변해서 잠시 중단했다가 재개한다면, 처음 단계부터 다시 시작하지 않는다. 중단된 그 단계부터 이어간다.
LangGraph의 체크포인트(Checkpoint) 가 이 역할이다.
AI 작업이 10단계짜리인데 7단계에서 외부 API 오류가 났다면, 오류를 수정한 뒤 7단계부터 재시도한다. 1단계부터 다시 실행할 필요가 없다.
의료 현장에서 더 중요한 케이스가 있다. 사람의 승인을 기다리는 경우다.
예를 들어 AI가 오전 7시에 회진 요약을 준비해뒀는데, 주치의가 10시에 검토하고 “추가 검사가 필요하다”고 응답했다면, AI는 그 응답을 받아 다음 단계(추가 검사 오더 제안)를 실행한다. 3시간 동안 대기하는 것이 자연스럽다. 체크포인트가 없으면 이 대기가 불가능하다.
조건부 흐름: 진단에 따라 경로가 달라진다
일반 파이프라인은 경로가 고정이다. A → B → C.
그런데 실제 임상은 다르다. 혈압이 정상이면 퇴원 절차로 가고, 이상이면 추가 모니터링으로 분기한다.
LangGraph는 조건부 엣지(Conditional Edge) 로 이걸 표현한다.
[활력징후 분석]
↓
{결과 분류}
├─ 정상 → [퇴원 체크리스트]
├─ 경계 → [6시간 후 재측정] ──→ 다시 [활력징후 분석]으로 루프
└─ 위험 → [응급 프로토콜]
이 분기 로직은 코드로 짜는 게 아니라 그래프에 그리는 것이다. 나중에 흐름을 수정할 때도 그래프를 고치면 된다. 코드 전체를 뒤질 필요가 없다.
LangGraph가 필요한 순간과 필요 없는 순간
LangGraph가 힘을 발휘하는 경우:
- 흐름에 분기가 있다 (조건에 따라 다른 경로)
- 루프가 있다 (특정 조건이 될 때까지 반복)
- 사람의 개입 대기가 있다 (Human-in-the-Loop)
- 긴 작업을 중단했다가 재개해야 한다
반대로, 단순한 순차 작업이라면 오히려 복잡성만 늘어난다. “환자 메모 요약해줘” 같은 단일 AI 호출은 LangGraph 없이 충분하다.
LangGraph vs 기존 방식
| 항목 | 기존 AgentExecutor | LangGraph |
|---|---|---|
| 흐름 제어 | LLM이 매번 결정 | 설계자가 그래프로 정의 |
| 루프 방지 | 취약 | 명시적 종료 조건 |
| 중간 재개 | 불가 | 체크포인트로 가능 |
| 디버깅 | 어려움 | 각 노드별 상태 추적 |
| 사람 개입 | 구현 어려움 | 기본 기능으로 지원 |
이 글에서 나온 “사람 개입 대기” 기능을 실전에서 어떻게 설계하는지 → Human-in-the-Loop
역할 기반으로 AI 팀을 꾸리는 다른 접근법 → CrewAI 입문
다음 회의 한 줄
혜준: “RoundPrep v0.2는 노드와 엣지가 있는 그림부터 커밋합니다.”
다음 화
그래프 안에서 에이전트가 서로 말로 협상하게 두려면 — AutoGen 입문
편집 초안(cu2604021138). 프레임워크·API·임상 규정은 발행일 이후 바뀔 수 있으니 공식 문서와 병원 정책을 기준으로 확인한다.
더 알고 싶다면
🔗 관련 글