글 / LangGraph·MCP

LangGraph의 상태·노드·엣지

상태는 모든 노드가 공통으로 읽는 데이터, 노드는 변경할 키만 반환하는 함수, 엣지는 다음 노드를 결정하는 연결이다.

작성일 · 읽는 시간 2분 · LangGraph 1.2 기준

구성 요소

여러 단계를 하나의 함수에 연속해서 작성하면 어느 단계가 무엇을 변경했는지 불분명해진다. LangGraph는 작업을 상태, 노드, 엣지로 분리하여 그래프로 기술하게 한다.

  • 상태(state): 모든 노드가 공통으로 읽는 데이터이다. 일반적으로 TypedDict로 키와 타입을 정의한다.
  • 노드(node): 상태를 입력받아 작업을 처리하는 함수이다. 변경할 키만 dict로 반환한다.
  • 엣지(edge): 한 노드가 끝난 뒤 다음에 실행할 노드를 결정한다.

상태를 읽고 변경할 키만 반환하는 노드와 엣지의 구조

최소 예제

pythongraph.py
from typing import TypedDict

from langgraph.graph import END, START, StateGraph


class State(TypedDict):
    raw: str
    cleaned: str
    length: int


def clean(state: State):
    # 바꿀 키만 돌려준다
    return {"cleaned": state["raw"].strip().lower()}


def measure(state: State):
    return {"length": len(state["cleaned"])}


builder = StateGraph(State)
builder.add_node("clean", clean)
builder.add_node("measure", measure)
builder.add_edge(START, "clean")
builder.add_edge("clean", "measure")
builder.add_edge("measure", END)

graph = builder.compile()
print(graph.invoke({"raw": "  Pump-A  "}))
# {'raw': '  Pump-A  ', 'cleaned': 'pump-a', 'length': 6}

clean과 measure를 거치며 상태가 갱신되는 과정

예제 해설

  • START, END: 입력이 전달되는 지점과 실행이 종료되는 지점을 나타내는 특수 노드이다.
  • 반환한 dict: 같은 키의 값을 덮어쓴다. 값을 병합하려면 해당 키에 reducer(병합 함수)를 Annotated로 지정한다.
  • compile(): 실행 가능한 그래프로 변환한다. 연결되지 않은 노드가 없는지 등 기본 검사도 이 단계에서 이루어진다. compile 전에는 실행할 수 없다.
  • invoke(): 초기 상태를 입력받아 끝까지 실행하고 최종 상태를 반환한다.