서론
Azure에서 AI 기반 애플리케이션을 구축할 때 가장 중요한 결정 중 하나는 어떤 모델을 사용할지가 아니라, 애플리케이션이 런타임에 모델을 선택하는 방법입니다. **Microsoft Foundry 모델 라우터**는 Microsoft Foundry를 통해 사용할 수 있으며, 프롬프트 복잡성, 지연 시간 목표 및 비용 효율성을 기반으로 추론 요청을 가장 적합한 모델로 자동 라우팅합니다. 하지만 실제로 올바르게 라우팅되고 있는지 어떻게 알 수 있을까요? 그리고 여러 API 경로에서 모델 라우터의 동작을 어떻게 비교할 수 있을까요?
이것이 바로 **RouteLens**가 해결하는 문제입니다. RouteLens는 구성 가능한 프롬프트를 두 가지 별개의 Azure AI 런타임 경로를 통해 전송하고, 라우팅 결정, 지연 시간 프로필, 신뢰성 지표에 대한 자세한 비교 결과를 제공하는 오픈 소스 Node.js CLI 및 웹 기반 테스트 도구입니다.
이 게시물에서는 모델 라우터가 무엇을 하는지, 왜 중요한지, 검증 도구를 사용하는 방법, 그리고 지능형 모델 라우팅을 최대한 활용하는 애플리케이션 설계 모범 사례에 대해 설명합니다.
Microsoft Foundry 모델 라우터란?
Microsoft Foundry 모델 라우터는 Microsoft Foundry의 배포 옵션으로, 애플리케이션과 AI 모델 풀 사이에 위치합니다. gpt-4o 또는 gpt-4o-mini와 같은 특정 모델을 하드코딩하는 대신, **모델 라우터 엔드포인트**를 배포하고 Azure가 각 요청에 어떤 기본 모델을 제공할지 결정하도록 합니다.
작동 방식
- 애플리케이션은 모델 라우터 배포에 추론 요청을 보냅니다.
- 모델 라우터는 요청(프롬프트 복잡성, 토큰 수, 필요한 기능)을 분석합니다.
- 사용 가능한 풀에서 가장 적합한 모델을 선택합니다.
- 응답은 투명하게 반환되며 — 애플리케이션 코드는 변경되지 않습니다.
이것이 중요한 이유
- 비용 최적화 — 간단한 프롬프트는 더 작고 저렴한 모델로 라우팅됩니다. 복잡한 프롬프트는 더 유능하고(그리고 비싼) 모델로 전달됩니다.
- 지연 시간 감소 — 가벼운 프롬프트는 무거운 모델이 필요 없을 때 더 빠르게 완료됩니다.
- 복원력 — 한 모델이 높은 부하 또는 조절을 겪고 있는 경우, 트래픽을 다른 대안으로 전환할 수 있습니다.
- 간소화된 애플리케이션 코드 — 자체 모델 선택 로직을 구축할 필요가 없습니다.
두 가지 런타임 경로
Microsoft Foundry는 모델 라우터에 접근하기 위한 두 가지 고유한 엔드포인트 구성을 제공합니다. 둘 다 Chat Completions API를 사용하지만, 라우팅 동작이 다를 수 있습니다.
| 경로 | SDK | 엔드포인트 |
|---|---|---|
| AOAI + Chat Completions | OpenAI JS SDK | https://.cognitiveservices.azure.com/openai/deployments/ |
| Foundry Project + Chat Completions | OpenAI JS SDK (별도 클라이언트) | https://.cognitiveservices.azure.com/openai/deployments/ |
이 두 경로가 동일한 라우팅 결정을 내리는지 이해하는 것은 프로덕션 애플리케이션에 매우 중요합니다. 사용하는 엔드포인트에 따라 동일한 프롬프트가 다른 모델로 라우팅된다면, 이는 조사가 필요한 신호입니다.
RouteLens 소개
RouteLens는 이러한 비교를 자동화하는 Node.js 도구입니다. 이 도구는 다음과 같은 기능을 제공합니다:
- 구성 가능한 프롬프트 세트를 전송합니다 — (에코, 요약, 코드, 추론) 카테고리 전반에 걸쳐 두 경로를 통해 전송합니다.
- 모든 응답을 로깅합니다 — 사후 분석을 위해 구조화된 JSONL 파일로 로깅합니다.
- 통계를 계산합니다 — p50/p95 지연 시간, 오류율 및 모델 선택 분포를 포함합니다.
- 라우팅 차이를 강조합니다 — 동일한 프롬프트가 경로별로 다른 모델에 의해 처리된 경우를 강조 표시합니다.
- 웹 대시보드를 제공합니다 — 대화형 테스트 및 실시간 결과 시각화를 위한 웹 대시보드를 제공합니다.
웹 대시보드
내장된 웹 UI를 통해 로그 파일을 파싱할 필요 없이 쉽게 테스트를 실행하고 결과를 탐색할 수 있습니다:

대시보드에는 다음이 포함됩니다:
- KPI 대시보드 — 성공률, 평균 TPS, 생성 TPS, 최고 TPS, 가장 빠른 응답, p50/p95 지연 시간, 가장 신뢰할 수 있는 경로, 총 토큰 등 핵심 지표를 한눈에 볼 수 있습니다.
- 요약 보기 — 경로/카테고리별 통계(성공률, TPS, 지연 시간 포함)
- 모델 비교 — 각 경로에서 어떤 모델이 선택되었는지 나란히 보여주는 보기
- 지연 시간 차트 — p50 및 p95 지연 시간을 비교하는 시각적 막대 차트
- 오류 분석 — 오류 분포 및 자세한 오류 메시지
- 라이브 피드 — 실시간으로 들어오는 결과 스트리밍
- 로그 뷰어 — 기록 JSONL 로그 파일을 찾아보고 검사
모델 비교 — 각 프롬프트에 대해 각 라우팅 경로가 어떤 모델을 선택했는지 확인:

라이브 피드 — 실시간으로 들어오는 결과 스트리밍:

로그 뷰어 — 파싱된 테이블 보기로 기록 JSONL 로그 파일을 찾아보고 검사:

모바일 반응형 — UI는 작은 화면에 맞게 조정됩니다:
 width="400" />
시작하기
전제 조건
- Node.js 18+ (LTS 권장)
- Foundry 프로젝트가 있는 Azure 구독
- Foundry 프로젝트에 배포된 모델 라우터
- Azure OpenAI / Foundry 리소스의 API 키
- API 버전 (예:
2024-05-01-preview)
설치
엔드포인트 구성
cp .env.example .env
Azure 엔드포인트로 .env 파일 편집 (아래 참조)
구성
.env 파일에는 다음 핵심 설정이 필요합니다:
Azure OpenAI / Foundry 리소스의 API 키
AOAI_API_KEY=your-api-key-here
Azure OpenAI API 버전
AOAI_API_VERSION=2024-05-01-preview
테스트 실행
408 타임아웃 진단 — 응답 경로 타임아웃 문제에 중점
npm run run:repro408
웹 UI — 대화형 대시보드
npm run ui
그런 다음 http://localhost:3002 (또는 UI_PORT에 설정된 포트)를 엽니다.
결과 이해
지연 시간 비교
지연 시간 차트는 각 경로 및 프롬프트 카테고리별 p50(중앙값) 및 p95(꼬리) 지연 시간을 보여줍니다:

주목해야 할 주요 사항:
- 경로 간의 큰 p50 차이는 한 경로가 지속적으로 더 높은 오버헤드를 가짐을 시사합니다.
- 높은 p95 값은 꼬리 지연 시간 문제를 나타냅니다 — 아마도 타임아웃 또는 재시도일 수 있습니다.
- 카테고리별 패턴 — 코드 프롬프트가 한 경로에서는 느리지만 다른 경로에서는 빠르다면, 이는 조사할 가치가 있는 라우팅 차이입니다.
모델 비교
모델 비교 보기에서는 각 프롬프트에 대해 어떤 모델이 선택되었는지 보여줍니다:

두 경로가 동일한 모델을 선택하면 녹색 "일치(Match)" 표시가 나타납니다. 다를 경우 빨간색으로 표시됩니다 — 이러한 경우가 바로 조사해야 할 사례입니다.
오류 분석
오류 보기는 신뢰성 문제를 진단하는 데 도움이 됩니다:

일반적인 오류 패턴:
- 408 타임아웃 — 응답 경로는 특정 프롬프트 카테고리에 대해 더 오래 걸릴 수 있습니다.
- 401 인증되지 않음 — 인증 구성 문제
- 429 속도 제한 — 처리량 한도에 도달함
- 500 내부 서버 오류 — 백엔드 모델 문제
모델 라우터를 사용한 애플리케이션 설계를 위한 모범 사례
1. 라우팅을 고려하여 프롬프트 설계
모델 라우터는 프롬프트 특성을 기반으로 결정을 내립니다. 최상의 라우팅을 얻으려면:
- 프롬프트를 집중적으로 유지하십시오 — 명확하고 단일 목적의 프롬프트는 여러 복잡도 수준에 걸쳐 있는 다중 부분 프롬프트보다 라우터가 분류하기 쉽습니다.
- 시스템 메시지를 효과적으로 사용하십시오 — 잘 구성된 시스템 메시지는 라우터가 작업 복잡도를 이해하는 데 도움이 됩니다.
- 복잡한 체인을 분리하십시오 — 다단계 워크플로가 있는 경우, 각 단계를 하나의 거대한 프롬프트 대신 별도의 API 호출로 만드십시오. 이렇게 하면 라우터가 간단한 단계에 더 저렴한 모델을 사용할 수 있습니다.
2. 적절한 타임아웃 설정
모델마다 다른 지연 시간 프로필을 가지고 있습니다. 타임아웃 설정은 라우터가 선택할 수 있는 가장 느린 모델을 고려해야 합니다:
// 더 나음 — 모델 변동을 위한 여유 공간 허용 const TIMEOUT = 30000; // 30초
// 최상 — 예상되는 복잡성에 따라 다른 타임아웃 사용 function getTimeout(category) { switch (category) { case 'echo': return 10000; case 'summarize': return 20000; case 'code': return 45000; case 'reasoning': return 60000; default: return 30000; } }
3. 견고한 재시도 로직 구현
라우터가 재시도 시 다른 모델을 선택할 수 있으므로, 일시적인 오류는 스스로 해결될 수 있습니다:
4. 프로덕션에서 모델 선택 모니터링
각 요청에 대해 어떤 모델이 선택되었는지 로깅하여 시간 경과에 따른 라우팅 패턴을 추적할 수 있습니다:
// 응답의 model 필드는 실제로 사용된 모델을 알려줍니다.
console.log(라우팅된 모델: ${response.model});
console.log(토큰 수: ${response.usage.total_tokens});
5. 사용 사례에 맞는 API 경로 사용
RouteLens를 사용한 테스트를 기반으로 다음을 고려하십시오:
- Chat Completions 경로 — 채팅 스타일 상호 작용을 위한 표준 경로입니다.
openaiSDK를 직접 사용합니다. - Foundry Project 경로 — 동일한 Chat Completions API를 사용하지만 Foundry 프로젝트 엔드포인트를 통해 사용합니다. 다양한 엔드포인트 구성에 걸쳐 라우팅 동작을 비교하는 데 유용합니다.
참고: Responses API (/responses)는 현재cognitiveservices.azure.com모델 라우터 배포에서 사용할 수 없습니다. RouteLens의 두 경로 모두 Chat Completions를 사용합니다.
6. 배포 전에 테스트
프로덕션 전 유효성 검사 과정의 일부로 RouteLens를 실행하십시오:
이렇게 하면 다음과 같은 이점을 얻을 수 있습니다:
- Azure가 모델 풀을 업데이트할 때 라우팅 회귀를 감지합니다.
- 프롬프트 변경이 예기치 않은 모델 선택 변경을 일으키지 않는지 확인합니다.
- 경고를 위한 지연 시간 기준을 설정합니다.
아키텍처 개요
RouteLens는 구성 가능한 프롬프트를 두 가지 별개의 Azure AI 런타임 경로를 통해 전송하고, 라우팅 결정, 지연 시간 및 신뢰성을 비교합니다. 매트릭스 러너는 프롬프트를 Chat Completions 클라이언트(OpenAI JS SDK → AOAI 엔드포인트)와 프로젝트 응답 클라이언트(azure/ai-projects → Foundry 엔드포인트) 모두로 보냅니다. 두 경로는 Azure 모델 라우터로 수렴되며, 이는 최적의 백엔드 모델을 지능적으로 선택합니다. 결과는 JSONL 파일로 기록되고 웹 대시보드에 렌더링됩니다.
모델 라우터의 주요 이점
| 이점 | 설명 |
|---|---|
| 비용 절감 | 간단한 프롬프트를 더 저렴한 모델로 자동 라우팅하여, 일반적인 워크로드에서 비용을 30-50% 절감합니다. |
| 낮은 지연 시간 | 간단한 프롬프트는 경량 모델에서 더 빠르게 완료됩니다. |
| 코드 변경 없음 | 표준 모델 배포와 동일한 API 계약 — 배포 이름만 변경하면 됩니다. |
| 미래 보장 | Azure가 모델 풀에 새 모델을 추가하면 애플리케이션이 자동으로 이점을 얻습니다. |
| 내장된 복원력 | 라우팅은 모델 가용성 및 부하 조건에 따라 적응합니다. |
결론
Azure 모델 라우터는 "모델 선택"에서 "작업을 설명하고 플랫폼이 결정하도록 함"으로의 전환을 의미합니다. 이는 AI 애플리케이션의 자연스러운 진화입니다. 클라우드 플랫폼이 서버 선택을 추상화하듯이, 모델 라우터는 모델 선택을 추상화합니다.
RouteLens는 이러한 추상화를 신뢰할 수 있는 가시성을 제공합니다. API 경로 및 프롬프트 카테고리 전반에 걸쳐 라우팅 동작을 체계적으로 비교함으로써, Model Router를 자신 있게 배포하고 사용자가 문제를 겪기 전에 문제를 파악할 수 있습니다.
이 도구는 MIT 라이선스 하에 오픈 소스입니다. 사용해 보고, 문제를 보고하고, 개선에 기여해 주세요: