Vuncloud 블로그
← 개발 노트로 돌아가기

OmniRoute를 처음부터: Claude, GPT, Gemini, DeepSeek를 하나의 무료 AI 게이트웨이로

하나의 /v1 · 내 계정 · 127.0.0.1만약 12분

듀얼 모니터의 코드와 앞쪽 키보드. 로컬 OmniRoute AI 게이트웨이를 세우는 장면

Cursor, Claude Code, Codex, Gemini CLI는 주소와 비밀을 각자 기억합니다. 공급자가 늘면 한도와 “오늘은 429”가 설정마다 흩어집니다. OmniRoute는 그 일을 내 머신의 OpenAI 호환 입구 하나로 모읍니다. 클라이언트가 기억하는 주소는 http://127.0.0.1:20128/v1 입니다. Claude, GPT, Gemini, DeepSeek와 카탈로그의 다른 모델은 대시보드에서 붙입니다. 라이선스는 MIT이고, 이 글이 따르는 릴리스는 release/v3.8.53 입니다. 포트, 명령, 라우팅은 그 README를 기준으로 하고, 공급자 수는 버전에 따라 움직입니다.

「무료」는 게이트웨이 소프트웨어에 사용료가 없다는 뜻입니다. 한도는 연결한 공급자 계정에 있습니다. 공식은 제3자 무료 등급을 /dashboard/free-tiers 추정치로 보여 주고, 그것은 합계이지 OmniRoute가 주는 토큰이 아니라고 적습니다. 이미 내는 구독도 그 계정 절차로 같은 주소를 공유할 수 있습니다. 정가를 보려면 코딩 도구 월 청구와 OpenRouter 요금을 대조하세요. OpenRouter는 호스팅된 라우터이고, OmniRoute는 내 머신의 게이트웨이입니다.

20128
대시보드와 /v1이 같은 로컬 포트
MIT
소프트웨어는 무료. 모델 한도는 공급자 계정
auto
연결됐고 자격이 있는 대상만 고름

게이트웨이가 있는 층

내 머신에서만 도는 변환 소켓으로 보면 됩니다. 업스트림은 그대로 OpenAI, Anthropic, Google, DeepSeek 또는 카탈로그의 다른 공급자입니다. 다운스트림은 OpenAI Chat Completions나 Responses를 말하는 클라이언트입니다. v3.8.53 문서 기준은 공급자 약 375곳, 원본 모델 ID 약 1475개이고, 일부에 무료 등급 발견 표시가 있습니다. 이 숫자는 재검토되므로 옛 스크린샷이 아니라 대시보드 카탈로그를 봅니다.

  • 열쇠는 두 개입니다.공급자 API key나 OAuth는 OmniRoute 안에만 둡니다. Cursor와 스크립트가 쓰는 것은 Dashboard → Endpoints의 게이트웨이 키입니다.
  • 모델 이름은 연결한 뒤에 의미가 있습니다.먼저 /v1/models를 호출하고, 돌아온 ID를 씁니다. README 예는 openai/gpt-5.4, glm/glm-5.2처럼 「공급자/모델」입니다. 목록에 실제로 있는 것을 씁니다.
  • 클라이언트 폭이 넓습니다.Claude Code, Codex, Cursor, Cline, Continue, OpenCode, Copilot, OpenClaw 등이 이름에 있습니다. OpenAI Base URL을 바꿀 수 있으면 주소만 넣으면 됩니다. omniroute run은 CLI 7개를 띄웁니다.
한도는 공급자 쪽에 있습니다

README 문구는 Bring your own provider accounts입니다. 무료 등급은 가입, 심사, 결제 수단이 필요할 수 있고 닫힐 수도 있습니다. tos: avoid 공급자는 기본적으로 auto에 들어가지 않습니다. 계정을 연결해도 이 정책은 자동으로 바뀌지 않습니다.

처음부터 설치: npm과 Docker

머신에 Node.js가 필요합니다. 짧은 경로는 이렇습니다.

npm install -g omniroute
omniroute

npm warn ERESOLVE와 peer 경고는 문서에서 일단 무시해도 된다고 합니다. 뜨면 http://127.0.0.1:20128 이 대시보드이고, API는 http://127.0.0.1:20128/v1 입니다. 대시보드 없이 프록시만 쓰려면 omniroute serve --headless 또는 OMNIROUTE_HEADLESS=1 입니다.

npm 11은 설치 스크립트를 허용해야 함

npm 11은 패키지 생명주기 스크립트를 막을 수 있습니다. OmniRoute의 postinstall이 돌아야 네이티브 런타임 파일이 준비됩니다. 3.8.53 문서의 허용 목록은 다음과 같습니다.

npm install -g --allow-scripts=omniroute,keytar,onnxruntime-node,@parcel/watcher,@swc/core,protobufjs,esbuild omniroute

npm이 다른 이름을 보여 주면 그 경고의 이름을 씁니다. 허용하면 그 패키지의 설치 스크립트가 실행되므로, 출처를 확인한 뒤에 합니다. CI나 느린 머신은 OMNIROUTE_SKIP_POSTINSTALL=1로 네이티브 SQLite 예열만 건너뜁니다. 바이너리 복사는 그대로 돕니다.

코딩 부하에 맞춰 Docker 메모리를 늘림

문서의 이미지 이름은 여전히 diegosouzapw/omniroute 입니다. :latest는 게시된 최고 안정 SemVer를 따르고 git main은 따르지 않습니다. 남겨 둘 환경은 버전을 고정합니다. 공식 예는 루프백에 바인드합니다.

docker run -d --name omniroute --restart unless-stopped --stop-timeout 40 \
  -e OMNIROUTE_MEMORY_MB=8192 --memory=10g \
  -p 127.0.0.1:20128:20128 -v omniroute-data:/app/data diegosouzapw/omniroute:latest

이미지 기본 힙은 1024MB로, 패널과 짧은 대화에 충분합니다. Claude Code와 Codex는 POST /v1/responses를 씁니다. 긴 컨텍스트에는 더 큰 V8 힙이 필요하고, 부족하면 프로세스가 메모리 치명 오류로 죽습니다. 코딩 에이전트 하나는 위 명령의 힙 8192, 컨테이너 최소 10g입니다. 긴 요청이 겹치면 힙 10240–12288, 컨테이너 12–16g입니다. Apple Silicon은 이미지의 arm64를 씁니다. 볼륨 omniroute-data에 비밀이 있으니 백업과 삭제도 기밀로 다룹니다.

두 노트북에서 작업하는 손. Claude, GPT, Gemini, DeepSeek를 하나의 OmniRoute에 연결
클라이언트가 가지는 Base URL은 하나입니다. 공급자 키는 게이트웨이에 남깁니다.

Claude, GPT, Gemini, DeepSeek 연결

대시보드 Providers에서 지금 쓸 자격이 있는 곳을 고르고 API key를 붙이거나 그 계정 절차를 마칩니다. 네 곳의 키는 각 콘솔에서 받습니다. OmniRoute가 대신 개통하지 않습니다.

공급자내가 준비할 것넣는 곳
OpenAI (GPT)platform.openai.com의 API keyProviders → OpenAI
Anthropic (Claude)console.anthropic.com의 key, 또는 이미 내는 Claude 구독의 계정 절차Providers → Anthropic / 해당 OAuth
GeminiGoogle AI Studio의 key, 또는 Gemini CLI OAuthProviders → Gemini
DeepSeekplatform.deepseek.com의 API keyProviders → DeepSeek

무료 등급은 별도 목록이며 이 네 키의 다른 이름이 아닙니다. 첫 실행 마법사에 「무료 공급자 설정」이 나올 수 있고, 그때의 무인증 카탈로그로 목록을 만든 뒤 확인한 것만 연결을 만듭니다. 완료를 눌러도 몰래 추가하지 않습니다. 이름에 오른 적이 있는 것은 Pollinations, Cloudflare AI, SiliconFlow의 DeepSeek 무료 등급 등입니다. 약관, 지역, 아직 있는지는 상대가 정합니다. 옛 「키 없는 Claude」가 tos: avoid이면 기본적으로 auto에 들어가지 않습니다. 쓰기 전에 그날의 Free Tiers에서 자격을 확인합니다.

Gemini Web 같은 쿠키형 공급자는 브라우저 런타임도 필요합니다. npm 패키지에는 Playwright가 있고 Chromium 바이너리는 없습니다. 첫 호출 전에 저장소의 Playwright Chromium 안내를 따르지 않으면 브라우저 층에서 실패합니다.

IDE와 CLI가 주소 하나를 씀

Endpoints에서 게이트웨이 키를 복사한 다음 넣습니다.

Base URL: http://127.0.0.1:20128/v1
API Key:  (Dashboard → Endpoints)
Model:    auto

IDE가 말하기 전에 모델 목록을 확인합니다.

curl http://127.0.0.1:20128/v1/models \
  -H "Authorization: Bearer YOUR_KEY"

curl http://127.0.0.1:20128/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"auto","messages":[{"role":"user","content":"Hello"}]}'

Cursor, Cline, Continue와 OpenAI Base URL을 바꿀 수 있는 플러그인은 이 세 줄이면 됩니다. 사용자 헤더를 못 보내는 클라이언트는 문서의 토큰 호환 주소, 예를 들어 http://127.0.0.1:20128/vscode/YOUR_KEY/chat/completions 를 쓸 수 있습니다. 헤더를 보낼 수 있으면 Authorization: Bearer를 우선합니다.

CLI마다 설정 파일을 손으로 고칠 필요는 없습니다. 공식 한 줄 실행은 그 프로세스에 자격 증명을 넣습니다. Qwen과 Gemini는 일회용 격리 home도 받습니다.

omniroute run claude --model auto
omniroute run codex  --model auto
omniroute run gemini --model auto
omniroute configure codex

omniroute run은 Claude Code, Codex, Aider, Goose, OpenCode, Qwen Code, Gemini CLI를 덮습니다. configure는 그 도구 자신의 설정에 공급자와 모델을 씁니다. 문서의 대상에는 codex, claude, opencode, qwen, aider, goose, gemini, cline, continue, kilo가 있습니다. --dry-run은 쓸 환경 변수와 인자만 보여 줍니다. --api-key-env NAME은 비밀을 환경 변수 이름에 남겨 셸 기록에 넣지 않습니다.

auto, 폴백, 자동 경로에 안 들어가는 쪽

auto는 이미 연결됐고 자격이 있는 연결 중에서 고릅니다. 아무것도 안 붙인 새 설치는 대상이 없어도 정상입니다. 고른 전략, 공급자, 지연은 응답 헤더 X-OmniRoute-Decision으로 돌아옵니다. 클라이언트 로그보다 이 헤더를 먼저 봅니다.

  • 한도를 보는 폴백.한 연결이 한도에 닿으면 아직 여유가 있는 연결로 옮길 수 있습니다. v3.8.53에는 남은 한도로 가중하는 전략이 있고, 같은 대화는 가능하면 원래 연결에 붙잡아 둡니다.
  • 구독 경로는 실패하면 멈출 수 있습니다.문서의 subscription 콤보는 이미 내는 구독 한도만 씁니다. 떨어지면 멈추고, 과금되는 다른 키로 새지 않습니다. 유료 API 키와 구독 키를 「아무 데나 폴백」하는 한 콤보에 넣지 마세요.
  • tos: avoid는 기본적으로 빠집니다.연결 성공이 auto 소속은 아닙니다. 게이트웨이 키를 모델 하나에 고정하려면 그 키의 forcedModel을 쓰고, 클라이언트에 업스트림 주소를 박지 않습니다.

압축은 선택 파이프라인이고 클라이언트에는 투명합니다. 문서는 조합 가능한 엔진으로 설명하고, 실제로 쓴 세트는 X-OmniRoute-Compression에 적힙니다. 얼마나 줄는지는 모델과 요청에 달립니다. README의 구간을 매 요청의 약속으로 보지 마세요. 메모리 기능은 기본적으로 꺼져 있습니다. 자격 증명 마스킹도 선택입니다.

Cloud Mac: 루프백과 SSH

게이트웨이는 켜 둔 Mac에 맞습니다. 20128은 루프백에서 듣고, 노트북은 SSH로 그 포트를 가져옵니다. Cloud Mac은 리전이 고정되고 SSH가 되며, Apple Silicon은 공식 arm64 이미지도 돕니다. 관리 화면을 0.0.0.0에 바인드하지 마세요.

ssh -N -L 20128:127.0.0.1:20128 user@your-cloud-mac

터널이 올라오면 노트북의 Cursor나 omniroute run도 http://127.0.0.1:20128/v1을 그대로 씁니다. 로컬로 보이고, 바이트는 클라우드 Mac의 루프백에 닿습니다. 공급자 비밀은 클라우드 볼륨이나 사용자 디렉터리에 두고 Git에는 넣지 않습니다. 같은 머신에서 OpenClaw를 이미 돌리면 모델 주소를 같은 /v1로 향하게 하고, 공급자 키 사본은 게이트웨이에 하나만 둡니다.

패널 로그인이 필요하면 문서에 선택적 OIDC가 있습니다. 비밀번호 로그인은 남습니다. 원격 조작에는 범위가 있는 토큰(connect / contexts / tokens)이 있고, 공식 Remote Mode를 따릅니다. 단계를 아끼려고 대시보드를 공인 IP에 걸지 마세요.

막히면 먼저 볼 곳

  1. /v1/models가 비어 있다.Providers 연결이 성공하지 않았거나, 클라이언트가 공급자 key를 게이트웨이 키 자리에 넣었습니다.
  2. auto에 경로가 없다.제외된 공급자만 있거나, 그날 무료 등급에 자격이 없습니다. 동작하는 유료 key를 쓰거나 모델 칸에 /v1/models의 구체 ID를 넣습니다.
  3. 전역 설치 뒤 네이티브 모듈을 못 찾는다.npm 11의 --allow-scripts와 경고에 나온 패키지 이름으로 다시 설치합니다.
  4. Docker 안 코딩 에이전트가 중간에 끝난다.OMNIROUTE_MEMORY_MB와 --memory를 코딩 부하 단계로 올립니다. 1024MB는 대시보드용으로 둡니다.
  5. 웹 공급자 첫 요청이 실패한다.Playwright Chromium을 넣은 뒤 다시 시도합니다. 성공하기 전에 라우팅 정책을 바꾸지 않습니다.
  6. 숫자가 오래됐다.375곳과 1475개 모델 ID는 v3.8.53 문서 당시의 값입니다. 올린 뒤에는 대시보드와 README를 봅니다.

FAQ

짧게 말하면, 소프트웨어는 무료이고 한도는 공급자 쪽이며, 주소는 로컬 20128의 /v1이고, auto는 자격 있는 연결만 쓰며, Docker의 코딩 에이전트는 메모리를 늘리고, 포트는 루프백에 두고 SSH로 전달합니다. 전체 문답은 페이지 머리의 FAQ 구조화 데이터에 있습니다.

개발 노트 · 게이트웨이

게이트웨이는 루프백에 두고, SSH로 노트북에 가져옵니다

OmniRoute · 20128 · Cloud Mac

Cloud Mac 플랜 보기
한정 혜택 플랜 보기