-
LangGraph 기초에이전트 2025. 5. 19. 09:10728x90SMALL
1. LangGraph란 무엇인가?
LangGraph는 LLM(대규모 언어 모델)을 핵심으로 하는 AI 에이전트의 내부 동작 과정을 ‘그래프’ 형태로 구조화하여 개발, 운영, 유지보수를 돕는 프레임워크입니다. 단순히 LLM에게 질문하고 답변을 얻는 방식에서 벗어나, 복잡한 워크플로우를 갖춘 에이전트를 구성할 때 필수적으로 등장하는 문제는 “어떤 순서로 어떤 기능(LLM 호출, 데이터 검색, 외부 API 연동, 논리적 분기)들을 연결할 것인가?”라는 점입니다.
LangGraph는 이러한 문제를 그래프(노드와 엣지)로 표현함으로써 직관적이고 체계적인 접근을 가능하게 합니다. 노드는 각 기능을 수행하는 단위로, 예를 들어 LLM 호출 노드, 도구 호출 노드, 메모리 접근 노드, 조건 분기 노드 등이 있습니다. 엣지는 노드와 노드를 이어주는 연결선으로, 프로세스의 흐름(“어떤 노드 다음에 어떤 노드를 실행할 것인가?”)을 정의합니다.
이렇게 정의된 그래프를 통해 개발자는 에이전트가 문제를 해결하는 과정을 한눈에 파악할 수 있고, 복잡한 로직을 체계적으로 관리할 수 있습니다. 이로써 LLM 기반 에이전트의 확장성, 유지보수성, 협업 편의성, 디버깅 용이성 등이 크게 향상됩니다.
2. LangGraph 등장 배경
초기 LLM 활용은 간단한 Q&A나 텍스트 생성에 국한되었습니다. 하지만 시간이 흐르면서 LLM은 점점 더 복잡한 업무나 의사결정을 지원하게 되었습니다. 예를 들어, 특정 정보를 찾기 위해 외부 데이터베이스를 참조하거나, 사용자 입력을 분석한 뒤 적합한 툴을 호출하고, 결과를 종합해 의사결정을 내리는 등의 과정을 자동화하고자 하는 요구가 늘어났습니다.
이때 문제는 이러한 일련의 과정을 코드상에서 절차적으로 관리하면 쉽게 스파게티 코드가 되거나, 변경에 취약한 구조가 된다는 점입니다. 또한 서로 다른 팀원이 협업하기 어렵고, 새로운 기능을 추가하기 위해서는 기존 코드를 대폭 수정하는 번거로움이 발생합니다.
LangGraph는 이러한 복잡성을 해결하기 위한 솔루션으로 등장했습니다. 프로세스를 그래프로 시각화하고, 각 단계(노드)의 역할을 명확히 분리함으로써, 기존 LLM 애플리케이션 개발보다 훨씬 직관적이고 안정적인 방식으로 에이전트를 구성할 수 있습니다. 이로써 개발 초기부터 구조를 명확히 하고, 이후 변경이나 확장에도 유연하게 대응할 수 있게 됩니다.
3. LangGraph의 장점
LangGraph를 활용하면 다음과 같은 구체적 장점을 얻을 수 있습니다.
1. 명확한 구조:
코드를 읽지 않고도 그래프만 봐도 에이전트의 전체 동작 흐름을 파악할 수 있습니다. 이는 신규 팀원이 프로젝트에 합류하거나, 다른 부서와 협업할 때 이해도를 높입니다.2. 유연한 확장:
새로운 기능을 추가하고 싶을 때, 해당 기능을 수행하는 노드를 만들어 그래프에 연결하면 됩니다. 기존 코드에 큰 변화를 주지 않고도 확장할 수 있어, 빠른 프로토타이핑과 점진적 개선에 적합합니다.3. 쉽고 직관적인 디버깅:
어느 단계에서 오류가 발생했는지 쉽게 파악하고 해당 노드만 수정하면 되므로, 문제 해결 시간이 단축됩니다. 또한 단계별 로그를 남기면 어느 노드가 어떤 입력을 받았고 어떤 출력을 내놨는지 추적하기가 용이합니다.4. 지속적 개선 및 최적화 용이:
그래프 구조 상에서 특정 노드 성능 개선, 프롬프트 튜닝, 다른 LLM이나 툴 교체 등을 자유롭게 할 수 있어, 운영 중인 에이전트를 쉽게 개선할 수 있습니다.4. LangGraph의 핵심 개념
LangGraph의 핵심은 ‘그래프’라는 추상화에 있습니다. 이 그래프는 노드(Node), 엣지(Edge), 그리고 상태(State)라는 구성 요소로 이루어지며, 각 요소는 에이전트 워크플로우를 명확하고 유연하게 표현하는 데 기여합니다.
1. 노드(Node):
각 노드는 특정 기능을 수행하는 “단일 책임”을 가진 블록입니다. 예를 들어:• LLM 노드: 텍스트 입력을 받아 LLM 응답을 생성
• Tool 노드: 외부 API 호출을 통해 데이터 검색, 명령 실행
• Memory 노드: 과거 대화나 지식(장기·단기 메모리)을 관리하고 필요할 때 검색
• Logic 노드: 조건 분기, 반복, 예외 처리 등 제어 로직을 담아 워크플로우 흐름을 동적으로 결정
노드는 필요한 정보(입력)와 처리 결과(출력)를 명확히 정의함으로써, 복잡한 시스템을 잘게 분해하고 재사용 가능하게 만듭니다.
엣지(Edge):
엣지는 노드 간의 연결을 나타내며, 한 노드의 결과를 다른 노드의 입력으로 전달합니다. 이를 통해 프로세스 흐름을 정의합니다.
예를 들어, LLM 노드에서 “사용자 의도 분석” 결과를 Tool 노드로 전달해 해당 의도에 맞는 자료를 검색할 수 있으며, 조건에 따라 다른 노드로 전환하는 등 유연한 경로 설정이 가능합니다.
엣지를 통해 전체 그래프 상에서 정보와 제어 신호가 흐르며, 이 흐름이 에이전트의 동작 순서와 경로를 결정합니다.상태(State):
상태는 그래프 실행 과정에서 노드들이 주고받는 데이터, 메모리에 축적된 정보, 그리고 현재 진행 상황을 포괄적으로 나타내는 개념입니다.• 전역 상태(Global State): 그래프 전반에 걸쳐 유지되는 정보로, 장기 메모리에 저장된 지식이나 에이전트의 현재 목표 등이 여기에 해당할 수 있습니다.
• 지역 상태(Local State): 특정 노드나 노드 그룹 내에서만 유효한 중간 계산 결과, 최근 대화 맥락, 임시 변수 등.
• 상태 전이(State Transition): 노드 실행 전후로 상태가 변화(새로운 정보 추가, 조건 만족 여부 변경)하며, 이로 인해 그래프 내 경로가 달라질 수 있습니다.
상태를 명확히 관리함으로써 에이전트는 단순한 “입력→출력” 패턴에서 벗어나, 과거 맥락이나 비즈니스 로직 기반의 동적인 의사결정을 내릴 수 있습니다. 즉, 상태는 LangGraph가 단발성 응답이 아닌 지속적 상호작용과 학습, 적응이 가능한 에이전트를 구현하는 데 중요한 역할을 합니다.
이러한 노드(Node), 엣지(Edge), 상태(State) 개념을 통해 LangGraph는 복잡한 로직을 모듈화하고, 각 모듈 간 관계와 실행 흐름, 그리고 실행 과정에서 변화하는 맥락(상태)을 명확히 표현합니다. 이는 대규모 프로젝트나 장기적 유지보수, 유연한 확장, 협업 효율성에 있어 큰 이점을 제공합니다.
5. LangGraph 워크플로우 예제
간단한 예로 “사용자 질문에 대한 답변 생성” 프로세스를 살펴봅시다:
1. Input Node: 사용자의 질의(“이 제품은 언제 출시되었나요?”)를 입력받습니다.
2. LLM Node(분석): 질의를 LLM에 전달해 의도 파악 및 필요한 정보 유형 결정. 예를 들어 “출시 날짜” 정보가 필요하다는 결론을 얻습니다.
3. Tool Node(검색): 내부 DB나 검색 API를 호출해 해당 제품 출시일을 조회합니다.
4. LLM Node(응답 생성): 검색 결과를 토대로 최종 사용자 응답을 생성합니다.
5. Output Node: 사용자에게 완성된 답변(“이 제품은 2020년 5월 3일에 출시되었습니다.”)을 반환합니다.
이 전체 흐름을 그래프로 표현하면, 각 노드가 어떤 역할을 하고, 어떤 순서로 실행되는지 명확히 확인할 수 있습니다. 필요하다면 Logic Node를 추가해 “검색 결과 없음” 시 대체 경로를 구현하거나, Memory Node로 과거 기록을 참조하는 흐름을 추가할 수도 있습니다.
728x90'에이전트' 카테고리의 다른 글
Google ADK를 이용한 MCP 클라이언트 구축 (Building an MCP Client with Google ADK) (0) 2025.05.20 Google ADK 및 MCP를 활용한 효율적인 MCP 서버 및 클라이언트 구축 가이드 (1) 2025.05.20 Langgraph 기반 시스템 개발 베스트 프랙티스 (0) 2025.05.14 Langgraph 외 다른 플랫폼 (1) 2025.05.10 Langsmith 소개 및 Langgraph와의 연계 (0) 2025.05.06