일타 저스틴의 책 읽기 – Agentic Design Patterns – 2장. Routing
자, 여러분 반갑습니다! 대한민국 최고의 일타 강사, 저스틴입니다!
오늘 강의도 힘차게 시작해 봅시다. 칠판에 집중! 오늘 우리는 ‘Chapter 2: Routing’을 기반으로, AI 에이전트를 한 단계 더 똑똑하게 만드는 아주 중요한 비밀을 파헤쳐 볼 겁니다. 그냥 시키는 일만 순서대로 하는 AI가 아니라, 스스로 상황을 판단해서 최적의 길을 찾아가는 AI를 만드는 핵심 기술! 바로 ‘라우팅(Routing)’에 대한 내용입니다. 정신 바짝 차리고 따라오세요!
AI의 교통경찰, ‘라우팅’ 완벽 해부!
왜 ‘라우팅’이 필요한가?
자, 여러분. 우리가 지금까지 배운 ‘프롬프트 체이닝’ 같은 기술은 AI에게 일을 순서대로 시키는, 아주 기본적인 방식이었어요. 1번 끝나면 2번 하고, 2번 끝나면 3번 하는 거죠. 마치 기찻길이 하나뿐인 기차처럼요. 그런데 현실 세계의 문제들은 그렇게 단순하지가 않죠? 고객의 질문이 예약 문의일 수도 있고, 상품 정보 질문일 수도, 아니면 기술 지원 요청일 수도 있잖아요. 이 모든 걸 하나의 기찻길로 처리할 수 있을까요? 당연히 안되겠죠!
이 글의 저자는 바로 이 지점을 지적하고 있습니다. 실제 세상의 에이전트 시스템은 주어진 상황, 사용자 입력, 이전 작업의 결과 같은 변수에 따라 여러 가지 행동 중 하나를 ‘선택’해야만 합니다. 이렇게 동적으로 의사결정을 내리고, 상황에 맞는 전문가(함수, 도구, 하위 프로세스)에게 일을 보내주는 흐름 제어 메커니즘이 바로 라우팅(Routing) 입니다.
쉽게 비유해볼까요? 라우팅은 AI 시스템의 ‘교통경찰’ 또는 ‘스마트 내비게이션’이라고 생각하면 됩니다. 사거리에서 자동차(사용자 요청)가 오면, 교통경찰이 어느 길로 가야 할지 수신호를 보내주잖아요? 바로 그 역할입니다!
라우팅의 모든 것
1. 라우팅이란 무엇인가?
원본 텍스트에서는 라우팅을 “에이전트의 운영 프레임워크에 조건부 논리를 도입하는 것”이라고 설명합니다. 말이 좀 어렵죠? 쉽게 풀어줄게요. 정해진 길로만 가는 게 아니라, ‘만약 ~라면 A로 가고, 만약 ~가 아니라면 B로 가라’는 식의 ‘조건’에 따라 움직이는 똑똑한 시스템을 만드는 겁니다.
예를 들어, 고객센터 AI 에이전트가 있다고 칩시다. 라우팅 기능이 있다면 이렇게 작동하겠죠.
- 사용자 질문 분석: 먼저 고객이 뭘 원하는지 파악합니다.
- 의도에 따른 경로 설정 (라우팅):
- “주문 상태 확인해주세요” -> 주문 데이터베이스를 다루는 하위 에이전트에게 연결!
- “이 제품 기능 좀 알려주세요” -> 상품 카탈로그를 검색하는 하위 에이전트에게 연결!
- “이거 어떻게 고치나요?” -> 문제 해결 가이드를 찾아보거나 인간 상담사에게 연결!
- 무슨 말인지 모르겠다 -> “질문을 조금 더 명확하게 해주시겠어요?”라고 되묻는 에이전트에게 연결!
보이죠? 하나의 입구로 들어온 각기 다른 요청들을 가장 잘 처리할 수 있는 전문가에게 정확히 보내주는 것. 자, 이 부분은 별표 세 개! 라우팅의 핵심은 바로 이 ‘분류와 배분‘에 있습니다.
2. 라우팅은 어떻게 구현할까? (4가지 핵심 방법)
그렇다면 이 똑똑한 교통경찰, 즉 라우팅 메커니즘은 어떻게 만들 수 있을까요? 이 글의 저자는 네 가지 주요 방법을 제시합니다.
- LLM 기반 라우팅: 거대 언어 모델(LLM) 자체를 라우터로 쓰는 겁니다. LLM에게 “이 사용자 질문을 분석해서 ‘주문 상태’, ‘상품 정보’, ‘기술 지원’, ‘기타’ 중 하나로만 분류해줘” 라고 요청하는 거죠. 그럼 LLM이 딱지를 붙여주고, 시스템은 그 딱지를 보고 해당 전문가에게 요청을 전달합니다. 가장 유연한 방식이죠.
- 임베딩 기반 라우팅: 이건 ‘키워드’가 아니라 ‘의미’로 길을 찾는 방식입니다. 사용자 질문을 벡터 임베딩(숫자로 된 좌표값)으로 변환해요. 그리고 ‘주문’, ‘정보’, ‘지원’ 같은 각 경로도 미리 임베딩으로 만들어 둡니다. 그 다음, 사용자 질문의 좌표값과 가장 가까운 경로의 좌표값을 찾아서 그쪽으로 보내주는 거죠. 의미적으로 가장 유사한 곳으로 안내하는 똑똑한 방식입니다.
- 규칙 기반 라우팅: 가장 단순하고 고전적인 방법입니다.
if-else
문 같은 정해진 규칙을 사용하는 거죠. “만약 질문에 ‘예약’이라는 단어가 포함되면, 예약 처리 부서로 보내” 와 같은 식입니다. 속도는 빠르지만, 예상치 못한 새로운 유형의 질문에는 대처하기 어렵다는 단점이 있습니다. - 머신러닝 모델 기반 라우팅: 이건 특정 라우팅 작업에 특화된 분류기 같은 모델을 학습시켜서 사용하는 겁니다. LLM 기반과 비슷해 보이지만, 결정적인 차이가 있어요. LLM 기반은 그때그때 프롬프트를 통해 결정을 내리는 생성 모델을 쓰는 반면, 이 방식은 라우팅 결정 로직 자체가 학습된 모델의 가중치 안에 인코딩되어 있습니다. 비유하자면, 모든 걸 아는 박사님(LLM)에게 물어보는 게 아니라, 수년간 우편물 분류만 전문적으로 훈련받은 베테랑 집배원에게 일을 맡기는 것과 같습니다.
이 글의 저자는 이런 라우팅 메커니즘을 구현하는 데 도움을 주는 프레임워크로 LangChain, LangGraph, 그리고 구글의 Agent Developer Kit (ADK) 등을 언급하고 있습니다. 이런 도구들을 사용하면 개발자들이 복잡한 조건부 로직을 더 쉽게 설계하고 관리할 수 있다는 거죠.
저스틴) ReAct가 LLM 기반 라우팅으로 보이네요.
3. 라우팅의 실제 적용 사례
이런 라우팅 패턴은 어디에 쓰일까요? 사실상 거의 모든 지능형 시스템에 사용됩니다.
- 인간-컴퓨터 상호작용: AI 튜터가 학생의 정답률에 따라 다음 학습 모듈을 추천하거나, 가상 비서가 사용자의 의도를 파악해 정보 검색, 알람 설정 등 적절한 기능을 호출할 때 쓰입니다.
- 자동화된 데이터 처리: 회사로 쏟아져 들어오는 이메일, 고객 지원 티켓 등을 내용에 따라 자동으로 분류해서 영업팀, 기술 지원팀 등으로 분배하는 파이프라인에 활용됩니다.
- 다중 에이전트 시스템: 검색 전문 에이전트, 요약 전문 에이전트, 분석 전문 에이전트가 협업하는 시스템에서, 대장 에이전트(라우터)가 현재 목표에 가장 적합한 전문가에게 작업을 할당하는 역할을 합니다.
결론적으로 라우팅이 정적인 시스템을 동적인 시스템으로 바꾸는 핵심적인 ‘논리적 중재’ 능력을 제공한다고 말합니다.
4. 코드 예제 훑어보기
자, 이제 저자가 제공한 코드를 보면서 개념을 확실히 다져봅시다. 코드가 길다고 겁먹지 마세요. 핵심만 짚어줄 테니까요.
- LangChain 예제: 이 코드는 ‘Coordinator(조정자)’라는 에이전트를 만들어서 사용자의 요청을 ‘booking_handler(예약 담당)’, ‘info_handler(정보 담당)’, ‘unclear_handler(불명확 담당)’ 중 하나로 보내는 걸 보여줍니다. 여기서
coordinator_router_chain
부분이 바로 LLM을 이용한 라우터, 즉 교통경찰 역할을 하는 부분입니다. 사용자의 요청을 보고 ‘booker’, ‘info’, ‘unclear’라는 딱지를 붙여주면,RunnableBranch
라는 녀석이 그 딱지에 맞는 담당자에게 일을 넘겨주는 구조죠. - Google ADK 예제: 구글의 ADK를 사용한 예제는 조금 다른 접근법을 보여줍니다. 여기서는 아예 ‘Booker’와 ‘Info’라는 전문 하위 에이전트들을 만들어 둡니다. 그리고 이들을 총괄하는 ‘Coordinator’라는 부모 에이전트에게 명확한 지침을 내리죠. “너는 직접 대답하지 말고, 예약 관련 문의는 Booker에게, 정보 관련 문의는 Info에게 넘겨주기만 해라”라고요. ADK 프레임워크가 이 지침을 이해하고 알아서 적절한 하위 에이전트에게 일을 위임(라우팅)하는 방식입니다.
강의 마무리: 핵심 요약 및 저자의 메시지
자, 오늘 정말 중요한 내용을 배웠습니다. 머릿속에 쏙쏙 정리해 봅시다.
- What (무엇): AI 시스템이 단 하나의 정해진 순서가 아니라, 상황에 따라 여러 경로 중 하나를 선택해야 할 때가 많습니다. 이때 필요한 것이 바로 ‘라우팅’입니다.
- Why (왜): 라우팅은 조건부 논리를 통해 시스템이 사용자의 의도나 상황을 분석하고, 가장 적절한 도구나 전문가에게 작업을 동적으로 전달하게 해줍니다. 이를 통해 AI 에이전트는 훨씬 더 유연하고, 똑똑하고, 상황에 맞게 대처할 수 있게 됩니다.
- Rule of Thumb (언제 쓸까): 자, 이건 시험에 나옵니다! 사용자의 입력이나 현재 상태에 따라 여러 개의 뚜렷하게 구분되는 워크플로우, 도구, 하위 에이전트 중에서 하나를 ‘결정’해야 할 때 라우팅 패턴을 사용하세요. 고객 지원 봇이 판매 문의, 기술 지원, 계정 관리 질문을 분류해야 하는 경우가 대표적인 예시입니다.
핵심 정리 (Key Takeaways):
- 라우팅은 에이전트가 조건에 따라 동적으로 다음 단계를 결정하게 해준다.
- 에이전트는 라우팅을 통해 고정된 순차적 실행에서 벗어나 다양한 입력에 적응할 수 있다.
- 라우팅은 LLM, 규칙 기반, 임베딩 등 다양한 방식으로 구현할 수 있다.
- LangGraph나 Google ADK 같은 프레임워크는 이런 라우팅 구조를 만드는 데 도움을 준다.
이 글의 저자가 최종적으로 강조하는 메시지는 이것입니다. “라우팅 패턴을 마스터하는 것은 진정으로 동적이고 반응성이 뛰어난 에이전트 시스템을 구축하는 데 필수적이다.” 단순히 시키는 일만 하는 에이전트를 넘어, 스스로 생각하고 최적의 길을 찾아가는 지능형 에이전트를 만들고 싶다면, 이 ‘라우팅’이라는 개념을 반드시 여러분의 것으로 만들어야 합니다.