실무 Multi-Agent 오케스트레이션 18장 · 그래프 기반 워크플로우 5 / 6 ← 이전목차다음 → TechLead Cro

18장. 그래프 기반 워크플로우

정리와 체크리스트

18장에서 배운 것

  • 오케스트레이션 — 부품과 에이전트를 엮어 하나의 흐름으로 일하게 만드는 일. STEP 7(18~24장)의 주제입니다.
  • 상태 그래프 — 흐름을 상태·노드·엣지로 선언한 구조. LangGraph로 만듭니다.
  • 상태(State) — 흐름이 함께 보는 데이터. TypedDict로 칸을 선언합니다.
  • 노드(Node) — 상태를 받아 바뀐 칸만 돌려주는 함수.
  • 엣지(Edge) — 노드 사이의 길. START에서 시작해 END에서 끝납니다.
  • 덮어쓰기 — 반환값을 상태에 합치는 기본 규칙. 쌓을 칸은 이어 붙여 돌려줍니다.
  • compile / invoke — 그래프를 실행할 수 있게 굳히는 것 / 처음 상태를 넣어 실행하는 것.
  • 체크포인트 — 실행 상태를 저장해 두었다가 이어 가는 기능. 23장에서 씁니다.

한눈에 보는 핵심

class CSState(TypedDict):                      # 1. 상태: 함께 보는 데이터
    question: str
    answer: str
    log: list[str]

def answer_node(state: CSState) -> dict:       # 2. 노드: 바뀐 칸만 돌려준다
    return {"answer": "...", "log": state["log"] + ["응답 생성 완료"]}

builder = StateGraph(CSState)                  # 3. 조립: 등록하고 잇는다
builder.add_node("answer", answer_node)
builder.add_edge(START, "answer")
builder.add_edge("answer", END)

graph = builder.compile()                      # 4. 굳히고
result = graph.invoke({"question": "...", "answer": "", "log": []})   # 5. 돌린다
if문으로 엮은 흐름 상태 그래프
흐름을 알려면 코드를 처음부터 읽는다 엣지 선언을 본다. 그림으로 뽑는다
한 단계만 시험하려면 떼어 내기 어렵다 노드는 함수다. 딕셔너리를 넣어 부른다
한 단계를 바꾸려면 다른 갈래에 영향이 없는지 확인해야 한다 그 이름에 다른 함수를 등록한다
코드의 길이 짧다 선언하는 줄이 더 든다

체크리스트

  • [ ] if문으로 엮은 흐름의 문제 세 가지를 말할 수 있다.
  • [ ] 상태·노드·엣지가 각각 무엇인지 순서도에 빗대어 설명할 수 있다.
  • [ ] 노드가 상태 전체가 아니라 바뀐 칸만 돌려주는 이유를 설명할 수 있다.
  • [ ] log를 state["log"] + [...]로 돌려주는 이유를 덮어쓰기 규칙으로 설명할 수 있다.
  • [ ] compile() 없이 실행할 수 없다는 것, invoke()에 무엇을 넣는지 안다.
  • [ ] 그래프 그림의 화살표와 add_edge 선언을 하나씩 맞춰 볼 수 있다.
  • [ ] 이번 실행의 금액이 어느 노드에서 무엇을 근거로 나왔는지, 답하는 방식을 바꾸려면 무엇을 교체하는지 말할 수 있다.
  • [ ] 이번 장의 코드가 4장의 어느 파일에 기대고 있는지 안다.
  • [ ] 흐름이 단순할 때와 복잡할 때, if문과 그래프 가운데 무엇을 고를지 말할 수 있다.

한 줄 핵심

그래프는 답을 똑똑하게 만드는 도구가 아닙니다. 흐름을 눈에 보이게 하고, 바꿀 곳을 노드 하나로 좁혀 주는 구조입니다.

← 이전 절따라하기 — 첫 상태 그래프다음 절 →실습문제와 해답
오명운 · macro@prag-ai.com