TL;DR — 라우팅은 입력을 분석해 적절한 처리 경로(에이전트·도구·워크플로우)로 동적 분기시키는 패턴입니다. 모든 입력이 같은 경로를 타는 체이닝과 달리, 하나의 분류 단계가 전문 핸들러로 보냅니다. 실무에선 규칙→임베딩→LLM 하이브리드 3계층이 정석이며, 응답 시간 87%↓·정확도 95%·잘못된 배정 80%↓를 달성합니다.
1. 왜 라우팅인가 — 체이닝만으로는 부족하다
프롬프트 체이닝(1편)은 모든 입력을 같은 순서로 처리합니다. 하지만 현실의 요청은 제각각입니다. “환불해줘”, “사용법 알려줘”, “오류가 나요”를 같은 파이프라인에 넣으면 비효율적이고 정확도가 떨어집니다.
라우팅은 입력을 먼저 분류해서 각기 다른 전문 경로로 보냅니다. 요청 유형이 3가지 이상이면 도입을 고려하고, 5가지 이상이면 사실상 필수입니다.
2. 라우팅이란
라우팅(Routing)은 입력을 분석하여 적절한 처리 경로로 동적으로 분배하는 의사결정 패턴입니다. 체이닝이 선형 흐름(A→B→C)이라면, 라우팅은 분기 흐름(A→B₁ | B₂ | B₃)으로 런타임에 경로를 결정합니다.
라우팅의 4대 핵심 가치
- 적응성(Adaptability) — 입력 특성에 따라 경로를 동적으로 결정
- 효율성(Efficiency) — 전문화된 에이전트/핸들러에 분배해 처리 품질↑
- 확장성(Scalability) — 새 경로 추가 시 기존 경로 영향 최소
- 견고성(Robustness) — 분류 실패 시 Fallback으로 안전하게 처리
라우팅이 일어나는 4가지 시점
- Entry Routing — 최초 요청 분류 (가장 흔함)
- Intermediate Routing — 처리 중 다음 단계 결정
- Tool Selection — 작업에 맞는 도구 선택
- Escalation Routing — 상위 레벨/사람으로 에스컬레이션
3. 라우터의 동작 — 분류 · 신뢰도 · Fallback
라우터는 입력을 받아 의도를 분류하고, 각 분류에 신뢰도(confidence)를 매깁니다. 신뢰도가 임계값보다 낮으면 억지로 보내지 않고 Fallback 경로(되묻기·사람 상담·기본 처리)로 넘깁니다.
4. 라우팅을 구현하는 3가지 방식
라우팅 로직은 크게 세 가지로 구현합니다. 속도·비용·정확도의 트레이드오프가 다릅니다.
| 방식 | 지연 | 비용 | 정확도/특징 |
|---|---|---|---|
| 규칙 기반(키워드·정규식) | <10ms |
매우 낮음 | 결정적·투명 / 유연성↓ |
| 임베딩(Semantic Router) | 10~100ms | 중간 | 의미 인식·초고속 / 임베딩 관리 |
| LLM 기반(프롬프트 분류) | 1~3초 | 높음 | 문맥 이해·유연 / 비용·지연 |
5. 구현 ① LangChain RunnableBranch
RunnableBranch는 (조건 함수, 실행 체인) 튜플을 순서대로 평가해 첫 True의 체인을 실행하고, 마지막 인자는 기본(default) 체인입니다. 먼저 router_chain이 입력을 카테고리로 분류합니다.
6. 구현 ② LangGraph add_conditional_edges
LangGraph는 라우팅 함수가 노드 이름을 반환하고, 매핑 딕셔너리로 다음 노드를 정합니다. with_structured_output로 카테고리를 Literal 타입으로 제한하면 라우팅 오류를 사전에 막습니다.
get_graph().draw_ascii()로 분기 구조를 시각화할 수 있고, 조건 함수가 자기 노드명을 반환하면 재시도 루프(순환)도 구현됩니다.
7. 구현 ③ Google ADK 자동 위임(Auto-Flow)
Google ADK는 명시적 라우팅 로직이 필요 없습니다. sub_agents 리스트만 정의하면 코디네이터 LLM이 각 에이전트의 description을 읽고 자동으로 위임합니다(Auto-Flow). 따라서 description을 구체적으로 쓰는 것이 곧 라우팅 품질입니다.
8. 구현 ④ Semantic Router — 임베딩 기반
Semantic Router는 LLM 호출 없이 라우팅합니다. Route별 대표 발화(utterances)를 임베딩으로 미리 벡터화해 두고, 입력 쿼리도 같은 인코더로 임베딩해 코사인 유사도가 가장 높은 Route를 고릅니다. 밀리초 단위로 빠르고 저렴합니다.
네 가지 구현 한눈에 비교
| 프레임워크 | 라우팅 메커니즘 | 특징 |
|---|---|---|
| LangChain RunnableBranch | (조건, 체인) 튜플 + default | LCEL 선언적 분기, LLM 분류 |
| LangGraph conditional_edges | 라우팅 함수→노드명 매핑 | 상태그래프, 순환·시각화 |
| Google ADK Auto-Flow | sub_agents + description |
위임 자동화, 로직 불필요 |
| Semantic Router | 임베딩 코사인 유사도 | ms 단위 초고속, LLM 불필요 |
9. 실전 — 하이브리드 3계층 라우팅
한 방식만 쓰면 속도(규칙)나 정확도(LLM) 중 하나를 포기해야 합니다. 실무 정석은 빠르고 싼 것부터 시도하는 폭포수입니다.
요청의 90% 이상을 Layer 1·2에서 빠르고 저렴하게 처리하고, 애매한 10%만 LLM에 맡겨 LLM 비용을 최대 68% 절감하면서 정확도를 지킵니다.
10. 엔터프라이즈 적용 — CRM · ERP · Groupware
라우팅은 “요청 유형이 많고 전문 처리가 갈리는” 엔터프라이즈 업무에 특히 강력합니다.
적용 전략 문서 기준 연간 효과 약 5.6억원(분류 인력 1.8억 + 오류 처리 5,000만 + 컴플라이언스 3,000만 + 생산성 2억), 초기 투자 1.1억원 회수 기간 약 3개월, 1년차 ROI 389% / 2년차 2,445%로 추정됩니다.
11. 케이스 스터디
① 고객 문의 라우팅
고객 문의(100%)를 의도 분류기로 분기한 실측 분포입니다. 평균 응답 시간을 선형 처리 120초 → 35초로 줄이고 라우팅 정확도 95%+를 달성했습니다.
| 경로 | 비중 | 처리 |
|---|---|---|
| 제품 정보 | 35% | 제품 카탈로그 검색 |
| 주문 상태 조회 | 25% | 주문 DB 조회 |
| 기술 지원 | 25% | 문제해결 가이드 실행 |
| 에스컬레이션 | 15% | 담당자 연결 |
② ERP 결재 라우팅 (금액·권한 기반 규칙층)
금액·권한은 규칙층에서 결정적으로 처리하고, 문서 유형은 임베딩층, 이상 거래만 LLM층이 맡는 3계층 구조입니다.
이 방식으로 이상 거래 탐지율 45%→92%(104%↑), 규정 위반 월 15건→2건(87%↓)을 달성했습니다.
12. 베스트 프랙티스 & 트레이드오프
반드시 모니터링할 지표
- 라우팅 정확도 — 정확히 분류된 비율
- Fallback 비율 — 15% 초과 시 카테고리 재설계 신호
- 오분류율 / P95 지연 — P95 5초 초과 시 알림
- 카테고리별 트래픽 분포 & LLM 비용
에스컬레이션 규칙 (예시)
① 3회 이상 재분류 ② 신뢰도 0.3 미만 ③ VIP 고객 ④ 금액 100만원 초과 → AI Agent → 더 강력한 AI → 인간 상담원 → 관리자 4단계로 자동 상향.
체크리스트
- ✅ 카테고리는 MECE(상호 배타·완전 포괄), 이상적으로 각 10~30% 분포
- ✅ 기본/Fallback 경로는 필수 — 분류 안 되는 요청은 반드시 생긴다
- ✅ 빠르고 싼 것부터: 규칙 → 임베딩 → LLM 하이브리드
- ✅ LLM 분류엔 구조화 출력(Literal/Pydantic)으로 라우팅 오류 차단
- ✅ 오분류 사례를 모아 피드백 루프(utterance 보강·프롬프트 수정)로 개선
체이닝(1편)이 “순서대로 쪼개기”였다면, 라우팅은 “입력에 따라 길을 나누기”입니다. 둘을 결합하면 — 라우팅으로 분기한 뒤 각 경로에서 체이닝으로 처리 — 대부분의 실무 에이전트 워크플로우가 완성됩니다. 다음 편에서는 여러 경로를 동시에 실행하는 병렬화(Parallelization)를 다룹니다.
'Agentic AI Design Patterns' 카테고리의 다른 글
| CH06-스스로 길을 그리는 AI — 플래닝(Planning) 패턴 완벽 정리 (0) | 2026.06.03 |
|---|---|
| CH05-AI 에이전트 도구 사용 입문 | @tool·ReAct·FunctionTool로 외부 API·DB 연동하기 (0) | 2026.06.03 |
| CH04-스스로 고쳐 쓰는 AI — 리플렉션(Reflection) 패턴 완벽 정리 (0) | 2026.06.02 |
| CH03-AI 에이전트 병렬화 입문 | RunnableParallel·LangGraph·ParallelAgent·asyncio로 동시 실행 구현하기 (0) | 2026.06.01 |
| CH01-프롬프트 체이닝 입문 | 단일 프롬프트의 한계부터 LangChain·LangGraph·Google ADK 구현까지 (0) | 2026.05.31 |