
LLM 프록시에 라이브 대시보드 추가하기: 계측(Instrumentation) 없이 URL 변경만으로 가능
요약
LLM API 할당량 초과 시 Ollama로 자동 전환하는 폴백 프록시 'Trooper'에 라이브 대시보드 기능을 추가했습니다. 별도의 계측 없이 URL 변경만으로 에이전트의 의도, 미결 루프, 완료 단계 등을 실시간 모니터링할 수 있습니다.
핵심 포인트
- Claude API 실패 시 컨텍스트를 보존하며 Ollama로 자동 전환
- URL 변경만으로 즉시 적용 가능한 간편한 통합 방식
- 규칙 기반 분류기를 통한 지연 시간 없는 데이터 추출
- 에이전트의 상태를 시각화하는 실시간 라이브 대시보드 제공
저는 폴백 프록시(fallback proxy)로서 Trooper를 구축했습니다. Claude의 할당량(quota)이 초과되면 → Ollama로 전환됩니다. 유용하지만 수동적(passive)이었죠. Trooper는 배경에서 보이지 않게, 조용히 자신의 일을 수행하며 자리 잡고 있었습니다.
오늘, 그것은 다른 무언가가 되었습니다.
원래의 문제
LLM을 사용하여 개발할 때, 할당량 초과는 피할 수 없습니다. Claude의 무료 티어는 한계에 도달하기 전까지는 관대합니다. 하지만 세션 중간에 발생하는 429 오류는 여러분의 컨텍스트(context), 워크플로우(workflow), 사고의 흐름을 끊어버립니다.
Trooper는 그 문제를 해결했습니다. 앱의 엔드포인트를 Claude API 대신 http://localhost:3000으로 지정하세요. Claude가 실패하면 Trooper가 이를 포착하고, 3단계 압축 시스템(Anchor + SITREP + Tail)을 통해 전체 세션 컨텍스트를 보존하며, 로컬 Ollama에서 작업을 계속합니다. 여러분의 앱은 아무 일도 일어나지 않았다는 것을 전혀 알지 못합니다.
그 기능은 여전히 존재합니다. 하지만 그것은 수동적이었습니다. 문제가 발생했을 때는 유용했지만, 문제가 없을 때는 보이지 않았습니다.
수동적인 방식의 문제점
수동적인 인프라는 채택(adoption)에 문제가 있습니다. 개발자들은 이를 설치하고 잊어버리며, 무언가 고장 났을 때만 이를 인지합니다. 그것은 제품(product)이 아니라 안전망(safety net)에 불과합니다.
제가 계속 스스로에게 던졌던 질문은 이것이었습니다: "Trooper가 단순히 실패했을 때의 가치가 아니라, 매일 사용할 수 있는 가치를 제공하려면 무엇을 해야 하는가?"
그 답은 내내 코드 안에 있었습니다.
이미 존재했던 것들
Trooper는 모든 세션의 모든 메시지를 캡처합니다. 그리고 각 메시지에 대해 분류기(classifier)를 실행하여 의도(intent), 엔티티(entities), 오픈 루프(open loops), 완료된 단계(completed steps), 최근 작업(recent actions)을 추출합니다. 이 모든 과정은 규칙 기반(rule-based)이며, LLM 호출이 전혀 없고, 지연 시간(latency)도 제로입니다.
이것이 폴백 컨텍스트 보존(fallback context preservation)을 구동하는 힘입니다. Claude가 실패하고 Ollama가 작업을 이어받을 때, Ollama는 아무 정보 없이 시작하지 않습니다. 세션이 무엇에 관한 것이었는지, 무엇이 완료되었고 무엇이 아직 미결 상태인지 알려주는 SITREP (Situation Report)를 전달받습니다.
이 데이터는 모든 세션에 대해 존재합니다. 단지 개발자에게 보이지 않았을 뿐입니다.
대시보드
저는 localhost:3000/dashboard에 라이브 대시보드를 추가했습니다.
어떤 에이전트(agent)든 Trooper를 바라보게 하세요. 기본 URL(base URL)만 변경하면 됩니다:
export ANTHROPIC_BASE_URL=http://localhost:3000
# 또는
export OPENAI_BASE_URL=http://localhost:3000
대시보드를 여세요. 에이전트(Agent)가 실행되는 동안 보조 모니터에 띄워 두면 좋습니다.
단 하나의 메시지만으로도 다음 항목들을 이미 보여줍니다:
- 의도 (Intent) — 에이전트가 무엇을 하려고 하는지 자동으로 추출됨
- 미결 루프 (Open Loops) — 에이전트가 막혀 있는 부분, 빨간색으로 강조됨
- 완료된 단계 (Completed Steps) — 완료된 작업, 실시간으로 추적됨
- 엔티티 (Entities) — 참조되고 있는 주요 요소들
- 세션 트랜스크립트 (Session Transcript) — 모든 메시지, 역할별로 색상 구분됨
5초마다 자동 새로고침됩니다. 페이지를 새로고침할 필요가 없습니다.
실제 사용 모습
데이터베이스 디버깅 워크플로우를 시뮬레이션하는 3턴(3-turn) 에이전트 세션을 실행해 보았습니다:
턴 1: "Go API 서버를 구축하고 있습니다. 데이터베이스 연결이 5432 포트에서 연결 거부(connection refused) 오류와 함께 실패하고 있습니다."
턴 2: "설정을 확인했습니다. Postgres가 5432가 아닌 5433 포트에서 실행 중입니다. 지금 연결 문자열(connection string)을 수정하겠습니다."
턴 3: "포트를 수정했습니다. 데이터베이스 연결이 작동합니다. API 서버가 성공적으로 실행 중입니다."
턴 1 이후, 대시보드에는 즉시 다음과 같이 표시되었습니다:
- 의도 (Intent): "building a go api server. the database connection is failing with connection refused errors on port" (신뢰도 100%)
- 엔티티 (Entities): Postgres, network
- 미결 루프 (Open Loops): "fail with connection refused error on port"
턴 3 이후:
- 완료된 단계 (Completed Steps): "successfully fixed the port"
- 미결 루프 (Open loops) 해제됨
계측(Instrumentation)은 전혀 필요 없습니다. SDK도 필요 없습니다. 에이전트의 코드 변경도 필요 없습니다. 오직 URL 변경만으로 충분합니다.
이것이 중요한 이유
모든 관측성(Observability) 도구는 코드에 계측을 요구합니다:
- LangSmith — 에이전트를 LangChain으로 감싸야 함
- Langfuse — 해당 SDK를 추가해야 함
- AgentOps —
@observe데코레이터를 추가해야 함
Trooper는 아무것도 요구하지 않습니다. 당신의 에이전트는 이미 LLM과 HTTP를 통해 통신하고 있습니다. Trooper는 그 경로 사이에 위치하여 모든 것을 자동으로 관찰합니다.
Helicone이 가장 유사했습니다. 프록시 기반(proxy-based)이며 계측(instrumentation)이 필요 없었죠. 하지만 2026년 3월에 유지보수 모드(maintenance mode)로 전환되었고 클라우드 전용(cloud-only)이었습니다. 당신의 데이터는 그들의 서버로 전송되었습니다.
Trooper는 오픈 소스(open source)이며, 로컬 우선(local-first) 방식이고, 영원히 무료입니다. 당신의 데이터는 절대 당신의 기기를 떠나지 않습니다.
세션 엔드포인트 (The Sessions Endpoint)
어떤 세션을 확인해야 할지 모르겠나요? /sessions를 호출하세요:
curl http://localhost:3000/sessions
# {"sessions":["agent-debug-123","agent-debug-456"],"count":2}
localhost:3000/dashboard에 있는 대시보드 홈 페이지에서 아무 세션이나 클릭하여 열 수 있습니다.
복구 엔드포인트 (The Recovery Endpoint)
여전히 존재합니다. 에이전트가 작업 도중 실패했을 때:
curl http://localhost:3000/recovery/{session_id}
무엇이 완료되었고 어디서부터 재개해야 하는지를 정확히 반환합니다. 대시보드는 이를 시각화하여 보여줍니다. 완료된 단계들은 실시간으로 추적됩니다.
피벗 (The Pivot)
Trooper는 다음과 같이 시작되었습니다: _"Claude가 실패했습니다. Trooper가 이를 포착했습니다."
Trooper는 이제 다음과 같습니다: _"당신의 에이전트는 HTTP를 통해 LLM과 통신합니다. Trooper는 이를 관찰(observe)할 수 있습니다."
폴백(fallback)은 하나의 기능일 뿐입니다. 관찰 가능성(Observability)이 바로 제품입니다.
당신의 에이전트는 항상 대화하고 있었습니다. 이제 당신은 그 소리를 들을 수 있습니다.
시작하기
git clone https://github.com/shouvik12/trooper
cd trooper
export CLAUDE_API_KEY=sk-ant-...
...
브라우저에서 http://localhost:3000/dashboard를 여세요.
당신의 에이전트가 Trooper를 바라보게 설정하세요:
export ANTHROPIC_BASE_URL=http://localhost:3000
그게 전부입니다. 의존성(dependencies) 제로. 순수 Go 언어(Pure Go). 60초 이내에 실행됩니다.
GitHub: github.com/shouvik12/trooper
태그: llm, agents, observability, ollama, go, opensource
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기