OmniRoute Dashboard # ๐Ÿš€ OmniRoute โ€” ๋ฌด๋ฃŒ AI ๊ฒŒ์ดํŠธ์›จ์ด ### ์ฝ”๋”ฉ์„ ๋ฉˆ์ถ”์ง€ ๋งˆ์„ธ์š”. ์ž๋™ ํด๋ฐฑ์„ ํ†ตํ•ด **๋ฌด๋ฃŒ ๋ฐ ์ €๊ฐ€ํ˜• AI ๋ชจ๋ธ**๋กœ ์Šค๋งˆํŠธ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. _๋ฒ”์šฉ API ํ”„๋ก์‹œ โ€” ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ, 36๊ฐœ ์ด์ƒ์˜ ๊ณต๊ธ‰์ž, ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„ ์—†์Œ._ **์ฑ„ํŒ… ์™„๋ฃŒ โ€ข ์ž„๋ฒ ๋”ฉ โ€ข ์ด๋ฏธ์ง€ ์ƒ์„ฑ โ€ข ์˜ค๋””์˜ค โ€ข ์ˆœ์œ„ ์žฌ์ง€์ • โ€ข 100% TypeScript** --- ### ๐Ÿค– ์ข‹์•„ํ•˜๋Š” ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ๋ฌด๋ฃŒ AI ์ œ๊ณต์—…์ฒด _๋ฌด์ œํ•œ ์ฝ”๋”ฉ์„ ์œ„ํ•œ ๋ฌด๋ฃŒ API ๊ฒŒ์ดํŠธ์›จ์ด์ธ OmniRoute๋ฅผ ํ†ตํ•ด AI ๊ธฐ๋ฐ˜ IDE ๋˜๋Š” CLI ๋„๊ตฌ๋ฅผ ์—ฐ๊ฒฐํ•˜์„ธ์š”._
OpenClaw
OpenClaw

โญ 205K
NanoBot
NanoBot

โญ 20.9K
PicoClaw
PicoClaw

โญ 14.6K
ZeroClaw
ZeroClaw

โญ 9.9K
IronClaw
IronClaw

โญ 2.1K
OpenCode
OpenCode

โญ 106K
Codex CLI
Codex CLI

โญ 60.8K
Claude Code
Claude Code

โญ 67.3K
Gemini CLI
Gemini CLI

โญ 94.7K
Kilo Code
Kilo Code

โญ 15.5K
๐Ÿ“ก ๋ชจ๋“  ์—์ด์ „ํŠธ๋Š” http://localhost:20128/v1 ๋˜๋Š” http://cloud.omniroute.online/v1์„ ํ†ตํ•ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. โ€” ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ, ๋ฌด์ œํ•œ ๋ชจ๋ธ ๋ฐ ํ• ๋‹น๋Ÿ‰ --- [![npm version](https://img.shields.io/npm/v/omniroute?color=cb3837&logo=npm)](https://www.npmjs.com/package/omniroute) [![Docker Hub](https://img.shields.io/docker/v/diegosouzapw/omniroute?label=Docker%20Hub&logo=docker&color=2496ED)](https://hub.docker.com/r/diegosouzapw/omniroute) [![License](https://img.shields.io/github/license/diegosouzapw/OmniRoute)](https://github.com/diegosouzapw/OmniRoute/blob/main/LICENSE) [![Website](https://img.shields.io/badge/Website-omniroute.online-blue?logo=google-chrome&logoColor=white)](https://omniroute.online) [![WhatsApp](https://img.shields.io/badge/WhatsApp-Community-25D366?logo=whatsapp&logoColor=white)](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) [๐ŸŒ Website](https://omniroute.online) ยท [๐Ÿš€ Quick Start](#-quick-start) ยท [๐Ÿ’ก Features](#-key-features) ยท [๐Ÿ“– Docs](#-documentation) ยท [๐Ÿ’ฐ Pricing](#-pricing-at-a-glance) ยท [๐Ÿ’ฌ WhatsApp](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) ๐ŸŒ **Available in:** ๐Ÿ‡บ๐Ÿ‡ธ [English](README.md) | ๐Ÿ‡ง๐Ÿ‡ท [Portuguรชs (Brasil)](README.pt-BR.md) | ๐Ÿ‡ช๐Ÿ‡ธ [Espaรฑol](README.es.md) | ๐Ÿ‡ซ๐Ÿ‡ท [Franรงais](README.fr.md) | ๐Ÿ‡ฎ๐Ÿ‡น [Italiano](README.it.md) | ๐Ÿ‡ท๐Ÿ‡บ [ะ ัƒััะบะธะน](README.ru.md) | ๐Ÿ‡จ๐Ÿ‡ณ [ไธญๆ–‡ (็ฎ€ไฝ“)](README.zh-CN.md) | ๐Ÿ‡ฉ๐Ÿ‡ช [Deutsch](README.de.md) | ๐Ÿ‡ฎ๐Ÿ‡ณ [เคนเคฟเคจเฅเคฆเฅ€](README.in.md) | ๐Ÿ‡น๐Ÿ‡ญ [เน„เธ—เธข](README.th.md) | ๐Ÿ‡บ๐Ÿ‡ฆ [ะฃะบั€ะฐั—ะฝััŒะบะฐ](README.uk-UA.md) | ๐Ÿ‡ธ๐Ÿ‡ฆ [ุงู„ุนุฑุจูŠุฉ](README.ar.md) | ๐Ÿ‡ฏ๐Ÿ‡ต [ๆ—ฅๆœฌ่ชž](README.ja.md) | ๐Ÿ‡ป๐Ÿ‡ณ [Tiแบฟng Viแป‡t](README.vi.md) | ๐Ÿ‡ง๐Ÿ‡ฌ [ะ‘ัŠะปะณะฐั€ัะบะธ](README.bg.md) | ๐Ÿ‡ฉ๐Ÿ‡ฐ [Dansk](README.da.md) | ๐Ÿ‡ซ๐Ÿ‡ฎ [Suomi](README.fi.md) | ๐Ÿ‡ฎ๐Ÿ‡ฑ [ืขื‘ืจื™ืช](README.he.md) | ๐Ÿ‡ญ๐Ÿ‡บ [Magyar](README.hu.md) | ๐Ÿ‡ฎ๐Ÿ‡ฉ [Bahasa Indonesia](README.id.md) | ๐Ÿ‡ฐ๐Ÿ‡ท [ํ•œ๊ตญ์–ด](README.ko.md) | ๐Ÿ‡ฒ๐Ÿ‡พ [Bahasa Melayu](README.ms.md) | ๐Ÿ‡ณ๐Ÿ‡ฑ [Nederlands](README.nl.md) | ๐Ÿ‡ณ๐Ÿ‡ด [Norsk](README.no.md) | ๐Ÿ‡ต๐Ÿ‡น [Portuguรชs (Portugal)](README.pt.md) | ๐Ÿ‡ท๐Ÿ‡ด [Romรขnฤƒ](README.ro.md) | ๐Ÿ‡ต๐Ÿ‡ฑ [Polski](README.pl.md) | ๐Ÿ‡ธ๐Ÿ‡ฐ [Slovenฤina](README.sk.md) | ๐Ÿ‡ธ๐Ÿ‡ช [Svenska](README.sv.md) | ๐Ÿ‡ต๐Ÿ‡ญ [Filipino](README.phi.md)
--- ## ๐Ÿ–ผ๏ธ
OmniRoute
--- ## ๐Ÿ“ธ
... | # | # | | ----- | ---------------------------------------- | | **1** | ![1](docs/screenshots/01-providers.png) | | **2** | ![2](docs/screenshots/02-combos.png) | | **3** | ![3](docs/screenshots/03-analytics.png) | | **4** | ![4](docs/screenshots/04-health.png) | | **5** | ![5](docs/screenshots/05-translator.png) | | **6** | ![6](docs/screenshots/06-settings.png) | | **7** | ![7](docs/screenshots/07-cli-tools.png) | | **8** | ![8](docs/screenshots/08-usage.png) | | **9** | ![9](docs/screenshots/09-endpoint.png) |
--- ## ๐Ÿค” ์™œ OmniRoute์ธ๊ฐ€์š”? **๋ˆ์„ ๋‚ญ๋น„ํ•˜์ง€ ๋ง๊ณ  ํ•œ๋„์— ๋„๋‹ฌํ•˜์ง€ ๋งˆ์„ธ์š”.** - ๊ตฌ๋… ํ• ๋‹น๋Ÿ‰์€ ๋งค๋‹ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์ฑ„ ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค. - ์†๋„ ์ œํ•œ์œผ๋กœ ์ธํ•ด ์ฝ”๋”ฉ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. - ๊ณ ๊ฐ€์˜ API(๊ณต๊ธ‰์ž๋‹น ์›” $20-50) - ๊ณต๊ธ‰์ž ๊ฐ„ ์ˆ˜๋™ ์ „ํ™˜ **OmniRoute๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.** - โœ… **๊ตฌ๋… ๊ทน๋Œ€ํ™”** - ํ• ๋‹น๋Ÿ‰์„ ์ถ”์ ํ•˜๊ณ  ์žฌ์„ค์ •ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. - โœ… **์ž๋™ ๋Œ€์ฒด** - ๊ตฌ๋… โ†’ API ํ‚ค โ†’ ์ €๋ ดํ•œ โ†’ ๋ฌด๋ฃŒ, ๋‹ค์šดํƒ€์ž„ ์—†์Œ - โœ… **๋‹ค์ค‘ ๊ณ„์ •** - ๊ณต๊ธ‰์ž๋ณ„ ๊ณ„์ • ๊ฐ„ ๋ผ์šด๋“œ ๋กœ๋นˆ - โœ… **์œ ๋‹ˆ๋ฒ„์„ค** - Claude Code, Codex, Gemini CLI, Cursor, Cline, OpenClaw, ๋ชจ๋“  CLI ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์ž‘๋™ --- ## ๐Ÿ“ง ์ง€์› > ๐Ÿ’ฌ **์ปค๋ฎค๋‹ˆํ‹ฐ์— ๊ฐ€์ž…ํ•˜์„ธ์š”!** [WhatsApp Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) โ€” ๋„์›€์„ ๋ฐ›๊ณ , ํŒ์„ ๊ณต์œ ํ•˜๊ณ , ์ตœ์‹  ์†Œ์‹์„ ๋ฐ›์•„๋ณด์„ธ์š”. - **์›น์‚ฌ์ดํŠธ**: [omniroute.online](https://omniroute.online) - **GitHub**: [github.com/diegosouzapw/OmniRoute](https://github.com/diegosouzapw/OmniRoute) - **๋ฌธ์ œ**: [github.com/diegosouzapw/OmniRoute/issues](https://github.com/diegosouzapw/OmniRoute/issues) - **WhatsApp**: [Community Group](https://chat.whatsapp.com/JI7cDQ1GyaiDHhVBpLxf8b?mode=gi_t) - **์›๋ž˜ ํ”„๋กœ์ ํŠธ**: [9router by decolua](https://github.com/decolua/9router) --- ## ๐Ÿ”„ ์ž‘๋™ ๋ฐฉ์‹ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Your CLI โ”‚ (Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Cline...) โ”‚ Tool โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ http://localhost:20128/v1 โ†“ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ OmniRoute (Smart Router) โ”‚ โ”‚ โ€ข Format translation (OpenAI โ†” Claude) โ”‚ โ”‚ โ€ข Quota tracking + Embeddings + Images โ”‚ โ”‚ โ€ข Auto token refresh โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ†’ [Tier 1: SUBSCRIPTION] Claude Code, Codex, Gemini CLI โ”‚ โ†“ quota exhausted โ”œโ”€โ†’ [Tier 2: API KEY] DeepSeek, Groq, xAI, Mistral, NVIDIA NIM, etc. โ”‚ โ†“ budget limit โ”œโ”€โ†’ [Tier 3: CHEAP] GLM ($0.6/1M), MiniMax ($0.2/1M) โ”‚ โ†“ budget limit โ””โ”€โ†’ [Tier 4: FREE] iFlow, Qwen, Kiro (unlimited) Result: Never stop coding, minimal cost ``` --- ## ๐ŸŽฏ OmniRoute๊ฐ€ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ โ€” 30๊ฐ€์ง€ ์‹ค์ œ ๋ฌธ์ œ์  ๋ฐ ์‚ฌ์šฉ ์‚ฌ๋ก€ > **AI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋Š” ๋งค์ผ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•ฉ๋‹ˆ๋‹ค.** OmniRoute๋Š” ๋น„์šฉ ์ดˆ๊ณผ๋ถ€ํ„ฐ ์ง€์—ญ์  ์ฐจ๋‹จ, ์†์ƒ๋œ OAuth ํ๋ฆ„๋ถ€ํ„ฐ ํ”„๋กœํ† ์ฝœ ์šด์˜ ๋ฐ ๊ธฐ์—… ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ๊นŒ์ง€ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ’ธ 1. "๋น„์‹ผ ๊ตฌ๋…๋ฃŒ๋ฅผ ์ง€๋ถˆํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•œ๋„ ๋•Œ๋ฌธ์— ๋ฐฉํ•ด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค." ๊ฐœ๋ฐœ์ž๋Š” Claude Pro, Codex Pro ๋˜๋Š” GitHub Copilot์— ๋Œ€ํ•ด ์›” 20~200๋‹ฌ๋Ÿฌ๋ฅผ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋”๋ผ๋„ ํ• ๋‹น๋Ÿ‰์—๋Š” 5์‹œ๊ฐ„ ์‚ฌ์šฉ๋Ÿ‰, ์ฃผ๊ฐ„ ํ•œ๋„ ๋˜๋Š” ๋ถ„๋‹น ๋น„์œจ ํ•œ๋„ ๋“ฑ ์ƒํ•œ์„ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ์„ธ์…˜์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ๊ณต๊ธ‰์ž๋Š” ์‘๋‹ต์„ ์ค‘๋‹จํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ํ๋ฆ„๊ณผ ์ƒ์‚ฐ์„ฑ์„ ์žƒ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์Šค๋งˆํŠธ 4๊ณ„์ธต ํด๋ฐฑ** โ€” ๊ตฌ๋… ํ• ๋‹น๋Ÿ‰์ด ์†Œ์ง„๋˜๋ฉด ์ˆ˜๋™ ๊ฐœ์ž… ์—†์ด ์ž๋™์œผ๋กœ API ํ‚ค โ†’ ์ €๋ ดํ•จ โ†’ ๋ฌด๋ฃŒ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. - **์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ** โ€” ์žฌ์„ค์ • ์นด์šดํŠธ๋‹ค์šด(5์‹œ๊ฐ„, ๋งค์ผ, ๋งค์ฃผ)์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ† ํฐ ์†Œ๋น„๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. - **๋‹ค์ค‘ ๊ณ„์ • ์ง€์›** โ€” ์ž๋™ ๋ผ์šด๋“œ ๋กœ๋นˆ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๊ณต๊ธ‰์ž๋‹น ์—ฌ๋Ÿฌ ๊ณ„์ • โ€” ํ•˜๋‚˜๊ฐ€ ์†Œ์ง„๋˜๋ฉด ๋‹ค์Œ ๊ณ„์ •์œผ๋กœ ์ „ํ™˜ - **์‚ฌ์šฉ์ž ์ •์˜ ์ฝค๋ณด** โ€” 6๊ฐ€์ง€ ๊ท ํ˜• ์ „๋žต(์ฑ„์šฐ๊ธฐ ์šฐ์„ , ๋ผ์šด๋“œ ๋กœ๋นˆ, P2C, ๋ฌด์ž‘์œ„, ์ตœ์†Œ ์‚ฌ์šฉ, ๋น„์šฉ ์ตœ์ ํ™”)์„ ๊ฐ–์ถ˜ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ ํด๋ฐฑ ์ฒด์ธ - **Codex ๋น„์ฆˆ๋‹ˆ์Šค ํ• ๋‹น๋Ÿ‰** โ€” ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ง์ ‘ ๋น„์ฆˆ๋‹ˆ์Šค/ํŒ€ ์ž‘์—… ๊ณต๊ฐ„ ํ• ๋‹น๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง
๐Ÿ”Œ 2. "์—ฌ๋Ÿฌ ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ฐ๊ฐ API๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค" OpenAI๋Š” ํ•˜๋‚˜์˜ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  Claude(Anthropic)๋Š” ๋˜ ๋‹ค๋ฅธ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  Gemini๋Š” ๋˜ ๋‹ค๋ฅธ ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹ค๋ฅธ ์ œ๊ณต์—…์ฒด์˜ ๋ชจ๋ธ์„ ํ…Œ์ŠคํŠธํ•˜๊ฑฐ๋‚˜ ์ด๋“ค ์‚ฌ์ด์—์„œ ๋Œ€์ฒดํ•˜๋ ค๋Š” ๊ฒฝ์šฐ SDK๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๊ณ , ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ํ˜•์‹์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ๊ณต๊ธ‰์ž(FriendLI, NIM)์—๋Š” ๋น„ํ‘œ์ค€ ๋ชจ๋ธ ๋์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **ํ†ตํ•ฉ ์—”๋“œํฌ์ธํŠธ** โ€” ๋‹จ์ผ `http://localhost:20128/v1`๊ฐ€ 36๊ฐœ ์ด์ƒ์˜ ๋ชจ๋“  ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ํ”„๋ก์‹œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. - **ํ˜•์‹ ๋ฒˆ์—ญ** โ€” ์ž๋™ ๋ฐ ํˆฌ๋ช…ํ•จ: OpenAI โ† Claude โ† Gemini โ† Responses API - **์‘๋‹ต ์‚ญ์ œ** โ€” OpenAI SDK v1.83+๋ฅผ ์†์ƒ์‹œํ‚ค๋Š” ๋น„ํ‘œ์ค€ ํ•„๋“œ(`x_groq`, `usage_breakdown`, `service_tier`)๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. - **์—ญํ•  ์ •๊ทœํ™”** โ€” OpenAI๊ฐ€ ์•„๋‹Œ ์ œ๊ณต์—…์ฒด์— ๋Œ€ํ•ด `developer` โ†’ `system`๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. GLM/ERNIE์˜ ๊ฒฝ์šฐ `system` โ†’ `user` - **Think Tag Extraction** โ€” DeepSeek R1๊ณผ ๊ฐ™์€ ๋ชจ๋ธ์—์„œ `` ๋ธ”๋ก์„ ํ‘œ์ค€ํ™”๋œ `reasoning_content`๋กœ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. - **Gemini์šฉ ๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ** โ€” `json_schema` โ†’ `responseMimeType`/`responseSchema` ์ž๋™ ๋ณ€ํ™˜ - **`stream`์˜ ๊ธฐ๋ณธ๊ฐ’์€ `false`** โ€” OpenAI ์‚ฌ์–‘์— ๋งž์ถฐ Python/Rust/Go SDK์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ SSE๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
๐ŸŒ 3. "๋‚ด AI ๊ณต๊ธ‰์ž๊ฐ€ ๋‚ด ์ง€์—ญ/๊ตญ๊ฐ€๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค." OpenAI/Codex์™€ ๊ฐ™์€ ๊ณต๊ธ‰์ž๋Š” ํŠน์ • ์ง€์—ญ์˜ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. OAuth ๋ฐ API ์—ฐ๊ฒฐ ์ค‘์— ์‚ฌ์šฉ์ž์—๊ฒŒ `unsupported_country_region_territory`์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ๊ฐœ๋ฐœ๋„์ƒ๊ตญ์˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์‹ค๋ง์Šค๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **3๋ ˆ๋ฒจ ํ”„๋ก์‹œ ๊ตฌ์„ฑ** โ€” 3๊ฐ€์ง€ ๋ ˆ๋ฒจ๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ํ”„๋ก์‹œ: ๊ธ€๋กœ๋ฒŒ(๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ), ๊ณต๊ธ‰์ž๋ณ„(ํ•˜๋‚˜์˜ ๊ณต๊ธ‰์ž๋งŒ), ์—ฐ๊ฒฐ/ํ‚ค๋ณ„ - **์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋œ ํ”„๋ก์‹œ ๋ฐฐ์ง€** โ€” ์‹œ๊ฐ์  ํ‘œ์‹œ๊ธฐ: ๐ŸŸข ๊ธ€๋กœ๋ฒŒ ํ”„๋ก์‹œ, ๐ŸŸก ๊ณต๊ธ‰์ž ํ”„๋ก์‹œ, ๐Ÿ”ต ์—ฐ๊ฒฐ ํ”„๋ก์‹œ, ํ•ญ์ƒ IP ํ‘œ์‹œ - **ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•œ OAuth ํ† ํฐ ๊ตํ™˜** โ€” OAuth ํ๋ฆ„๋„ ํ”„๋ก์‹œ๋ฅผ ํ†ต๊ณผํ•˜์—ฌ `unsupported_country_region_territory`๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. - **ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ** - ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๊ตฌ์„ฑ๋œ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๋” ์ด์ƒ ์ง์ ‘ ์šฐํšŒ ์—†์Œ). - **SOCKS5 ์ง€์›** โ€” ์•„์›ƒ๋ฐ”์šด๋“œ ๋ผ์šฐํŒ…์„ ์œ„ํ•œ ์ „์ฒด SOCKS5 ํ”„๋ก์‹œ ์ง€์› - **TLS ์ง€๋ฌธ ์Šคํ‘ธํ•‘** โ€” `wreq-js`๋ฅผ ํ†ตํ•œ ๋ธŒ๋ผ์šฐ์ €์™€ ์œ ์‚ฌํ•œ TLS ์ง€๋ฌธ์œผ๋กœ ๋ด‡ ๊ฐ์ง€ ์šฐํšŒ
๐Ÿ†“ 4. "AI๋กœ ์ฝ”๋”ฉํ•˜๊ณ  ์‹ถ์€๋ฐ ๋ˆ์ด ์—†์–ด์š”" ๋ชจ๋“  ์‚ฌ๋žŒ์ด AI ๊ตฌ๋… ๋น„์šฉ์œผ๋กœ ์›” 20~200๋‹ฌ๋Ÿฌ๋ฅผ ์ง€๋ถˆํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•™์ƒ, ์‹ ํฅ ๊ตญ๊ฐ€์˜ ๊ฐœ๋ฐœ์ž, ์ทจ๋ฏธ์ƒํ™œ์ž, ํ”„๋ฆฌ๋žœ์„œ๋Š” ๋ฌด๋ฃŒ๋กœ ๊ณ ํ’ˆ์งˆ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **๋ฌด๋ฃŒ ๊ณ„์ธต ์ œ๊ณต์ž ๋‚ด์žฅ** โ€” 100% ๋ฌด๋ฃŒ ์ œ๊ณต์ž์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›: iFlow(8๊ฐœ ๋ฌด์ œํ•œ ๋ชจ๋ธ), Qwen(3๊ฐœ ๋ฌด์ œํ•œ ๋ชจ๋ธ), Kiro(Claude ๋ฌด๋ฃŒ), Gemini CLI(180K/์›” ๋ฌด๋ฃŒ) - **๋ฌด๋ฃŒ ์ „์šฉ ์ฝค๋ณด** โ€” ์ฒด์ธ `gc/gemini-3-flash โ†’ if/kimi-k2-thinking โ†’ qw/qwen3-coder-plus` = $0/์›”, ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„ ์—†์Œ - **NVIDIA NIM ๋ฌด๋ฃŒ ํฌ๋ ˆ๋”ง** โ€” 1000๊ฐœ์˜ ๋ฌด๋ฃŒ ํฌ๋ ˆ๋”ง ํ†ตํ•ฉ - **๋น„์šฉ ์ตœ์ ํ™” ์ „๋žต** โ€” ๊ฐ€์žฅ ์ €๋ ดํ•œ ๊ณต๊ธ‰์ž๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•˜๋Š” ๋ผ์šฐํŒ… ์ „๋žต
๐Ÿ”’ 5. "AI ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฌด๋‹จ ์•ก์„ธ์Šค๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค" AI ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋„คํŠธ์›Œํฌ(LAN, VPS, Docker)์— ๋…ธ์ถœํ•˜๋ฉด ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ๊ฐœ๋ฐœ์ž์˜ ํ† ํฐ/ํ• ๋‹น๋Ÿ‰์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณดํ˜ธํ•˜์ง€ ์•Š์œผ๋ฉด API๋Š” ์˜ค์šฉ, ์ฆ‰๊ฐ์ ์ธ ์ฃผ์ž…, ๋‚จ์šฉ์— ์ทจ์•ฝํ•ด์ง‘๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **API ํ‚ค ๊ด€๋ฆฌ** โ€” ์ „์šฉ `/dashboard/api-manager` ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ธ‰์ž๋ณ„ ์ƒ์„ฑ, ์ˆœํ™˜ ๋ฐ ๋ฒ”์œ„ ์ง€์ • - **๋ชจ๋ธ ์ˆ˜์ค€ ๊ถŒํ•œ** โ€” ๋ชจ๋‘ ํ—ˆ์šฉ/์ œํ•œ ํ† ๊ธ€์„ ์‚ฌ์šฉํ•˜์—ฌ API ํ‚ค๋ฅผ ํŠน์ • ๋ชจ๋ธ(`openai/*`, ์™€์ผ๋“œ์นด๋“œ ํŒจํ„ด)๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. - **API ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ** โ€” `/v1/models`์— ๋Œ€ํ•œ ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ๋ชฉ๋ก์—์„œ ํŠน์ • ๊ณต๊ธ‰์ž๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. - **Auth Guard + CSRF ๋ณดํ˜ธ** โ€” `withAuth` ๋ฏธ๋“ค์›จ์–ด + CSRF ํ† ํฐ์œผ๋กœ ๋ณดํ˜ธ๋˜๋Š” ๋ชจ๋“  ๋Œ€์‹œ๋ณด๋“œ ๊ฒฝ๋กœ - **์†๋„ ์ œํ•œ๊ธฐ** โ€” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ฐฝ์œผ๋กœ IP๋‹น ์†๋„ ์ œํ•œ - **IP ํ•„ํ„ฐ๋ง** โ€” ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์œ„ํ•œ ํ—ˆ์šฉ ๋ชฉ๋ก/์ฐจ๋‹จ ๋ชฉ๋ก - **ํ”„๋กฌํ”„ํŠธ ์ฃผ์ž… ๊ฐ€๋“œ** โ€” ์•…์„ฑ ํ”„๋กฌํ”„ํŠธ ํŒจํ„ด ์ œ๊ฑฐ - **AES-256-GCM ์•”ํ˜ธํ™”** โ€” ์ €์žฅ๋œ ์ž๊ฒฉ ์ฆ๋ช…์€ ์•”ํ˜ธํ™”๋ฉ๋‹ˆ๋‹ค.
๐Ÿ›‘ 6. "๊ณต๊ธ‰์—…์ฒด๊ฐ€ ๋‹ค์šด๋˜์–ด ์ฝ”๋”ฉ ํ๋ฆ„์ด ์†์‹ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค." AI ์ œ๊ณต์ž๋Š” ๋ถˆ์•ˆ์ •ํ•ด์ง€๊ฑฐ๋‚˜, 5xx ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์ž„์‹œ ์†๋„ ์ œํ•œ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹จ์ผ ๊ณต๊ธ‰์ž์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์—†์œผ๋ฉด ๋ฐ˜๋ณต์ ์œผ๋กœ ์žฌ์‹œ๋„ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **๊ณต๊ธ‰์—…์ฒด๋ณ„ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ** โ€” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ž„๊ณ„๊ฐ’ ๋ฐ ์ฟจ๋‹ค์šด์„ ํ†ตํ•œ ์ž๋™ ์—ด๊ธฐ/๋‹ซ๊ธฐ(๋‹ซํž˜/์—ด๋ฆผ/๋ฐ˜์—ด๋ฆผ) - **์ง€์ˆ˜ ๋ฐฑ์˜คํ”„** โ€” ์ ์ง„์ ์ธ ์žฌ์‹œ๋„ ์ง€์—ฐ - **Anti-Thundering Herd** โ€” ๋™์‹œ ์žฌ์‹œ๋„ ํญํ’์— ๋Œ€ํ•œ ๋ฎคํ…์Šค + ์„ธ๋งˆํฌ์–ด ๋ณดํ˜ธ - **์ฝค๋ณด ํด๋ฐฑ ์ฒด์ธ** โ€” ๊ธฐ๋ณธ ๊ณต๊ธ‰์ž๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๊ฐœ์ž… ์—†์ด ์ž๋™์œผ๋กœ ์ฒด์ธ์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. - **์ฝค๋ณด ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ** โ€” ์ฝค๋ณด ์ฒด์ธ ๋‚ด์—์„œ ์‹คํŒจํ•œ ๊ณต๊ธ‰์ž๋ฅผ ์ž๋™์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. - **์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ** โ€” ๊ฐ€๋™ ์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ, ์ž ๊ธˆ, ์บ์‹œ ํ†ต๊ณ„, p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„
๐Ÿ”ง 7. "๊ฐ AI ๋„๊ตฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์ง€๋ฃจํ•˜๊ณ  ๋ฐ˜๋ณต์ ์ž…๋‹ˆ๋‹ค." ๊ฐœ๋ฐœ์ž๋Š” Cursor, Claude Code, Codex CLI, OpenClaw, Gemini CLI, Kilo Code ๋“ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋„๊ตฌ์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ตฌ์„ฑ(API ์—”๋“œํฌ์ธํŠธ, ํ‚ค, ๋ชจ๋ธ)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž๋‚˜ ๋ชจ๋ธ์„ ์ „ํ™˜ํ•  ๋•Œ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **CLI ๋„๊ตฌ ๋Œ€์‹œ๋ณด๋“œ** โ€” Claude Code, Codex CLI, OpenClaw, Kilo Code, Antigravity, Cline์„ ์›ํด๋ฆญ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ „์šฉ ํŽ˜์ด์ง€ - **GitHub Copilot Config Generator** โ€” ๋Œ€๋Ÿ‰ ๋ชจ๋ธ ์„ ํƒ์„ ํ†ตํ•ด VS Code์šฉ `chatLanguageModels.json`๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. - **์˜จ๋ณด๋”ฉ ๋งˆ๋ฒ•์‚ฌ** โ€” ์ฒ˜์Œ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ 4๋‹จ๊ณ„ ์„ค์ • ์•ˆ๋‚ด - **ํ•˜๋‚˜์˜ ์—”๋“œํฌ์ธํŠธ, ๋ชจ๋“  ๋ชจ๋ธ** โ€” `http://localhost:20128/v1`๋ฅผ ํ•œ ๋ฒˆ ๊ตฌ์„ฑํ•˜๋ฉด 36๊ฐœ ์ด์ƒ์˜ ๊ณต๊ธ‰์ž์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ”‘ 8. "์—ฌ๋Ÿฌ ๊ณต๊ธ‰์ž์˜ OAuth ํ† ํฐ ๊ด€๋ฆฌ๋Š” ์ง€์˜ฅ์ž…๋‹ˆ๋‹ค" Claude Code, Codex, Gemini CLI, Copilot โ€” ๋ชจ๋‘ ๋งŒ๋ฃŒ๋˜๋Š” ํ† ํฐ๊ณผ ํ•จ๊ป˜ OAuth 2.0์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ง€์†์ ์œผ๋กœ ์žฌ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  `client_secret is missing`, `redirect_uri_mismatch` ๋ฐ ์›๊ฒฉ ์„œ๋ฒ„์˜ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. LAN/VPS์˜ OAuth๋Š” ํŠนํžˆ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์ž๋™ ํ† ํฐ ์ƒˆ๋กœ ๊ณ ์นจ** โ€” OAuth ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ƒˆ๋กœ ๊ณ ์ณ์ง‘๋‹ˆ๋‹ค. - **OAuth 2.0(PKCE) ๋‚ด์žฅ** โ€” Claude Code, Codex, Gemini CLI, Copilot, Kiro, Qwen, iFlow์— ๋Œ€ํ•œ ์ž๋™ ํ๋ฆ„ - **๋‹ค์ค‘ ๊ณ„์ • OAuth** โ€” JWT/ID ํ† ํฐ ์ถ”์ถœ์„ ํ†ตํ•ด ๊ณต๊ธ‰์ž๋‹น ์—ฌ๋Ÿฌ ๊ณ„์ • - **OAuth LAN/์›๊ฒฉ ์ˆ˜์ •** โ€” `redirect_uri`์— ๋Œ€ํ•œ ๊ฐœ์ธ IP ๊ฐ์ง€ + ์›๊ฒฉ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ˆ˜๋™ URL ๋ชจ๋“œ - **Nginx ๋’ค์˜ OAuth** โ€” ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด `window.location.origin`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. - **์›๊ฒฉ OAuth ๊ฐ€์ด๋“œ** โ€” VPS/Docker์˜ Google Cloud ์ž๊ฒฉ ์ฆ๋ช…์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ
๐Ÿ“Š 9. "์–ผ๋งˆ๋‚˜ ์“ฐ๊ณ  ์žˆ๋Š”์ง€, ์–ด๋””์— ์“ฐ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์š”" ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ๋Ÿฌ ์œ ๋ฃŒ ์ œ๊ณต์—…์ฒด๋ฅผ ์ด์šฉํ•˜์ง€๋งŒ ์ง€์ถœ์— ๋Œ€ํ•œ ํ†ตํ•ฉ๋œ ๋ณด๊ธฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ ์ œ๊ณต์—…์ฒด์—๋Š” ์ž์ฒด ์ฒญ๊ตฌ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹์žˆ์ง€๋งŒ ํ†ตํ•ฉ๋œ ๋ณด๊ธฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋น„์šฉ์ด ์Œ“์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **๋น„์šฉ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ** โ€” ํ† ํฐ๋ณ„ ๋น„์šฉ ์ถ”์  ๋ฐ ๊ณต๊ธ‰์ž๋ณ„ ์˜ˆ์‚ฐ ๊ด€๋ฆฌ - **๊ณ„์ธต๋‹น ์˜ˆ์‚ฐ ํ•œ๋„** โ€” ์ž๋™ ํด๋ฐฑ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ณ„์ธต๋‹น ์ง€์ถœ ํ•œ๋„ - **๋ชจ๋ธ๋ณ„ ๊ฐ€๊ฒฉ ๊ตฌ์„ฑ** โ€” ๋ชจ๋ธ๋‹น ๊ฐ€๊ฒฉ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ - **API ํ‚ค๋‹น ์‚ฌ์šฉ ํ†ต๊ณ„** โ€” ํ‚ค๋‹น ์š”์ฒญ ์ˆ˜ ๋ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉ๋œ ํƒ€์ž„์Šคํƒฌํ”„ - **๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ** โ€” ํ†ต๊ณ„ ์นด๋“œ, ๋ชจ๋ธ ์‚ฌ์šฉ ์ฐจํŠธ, ์„ฑ๊ณต๋ฅ  ๋ฐ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํฌํ•จ๋œ ๊ณต๊ธ‰์ž ํ…Œ์ด๋ธ”
๐Ÿ› 10. "AI ํ˜ธ์ถœ ์˜ค๋ฅ˜ ๋ฐ ๋ฌธ์ œ ์ง„๋‹จ์ด ์•ˆ ๋ผ์š”" ํ˜ธ์ถœ์ด ์‹คํŒจํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์†๋„ ์ œํ•œ, ๋งŒ๋ฃŒ๋œ ํ† ํฐ, ์ž˜๋ชป๋œ ํ˜•์‹ ๋˜๋Š” ๊ณต๊ธ‰์ž ์˜ค๋ฅ˜์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ„ฐ๋ฏธ๋„์— ๊ฑธ์ณ ์กฐ๊ฐํ™”๋œ ๋กœ๊ทธ. ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์ด ์—†์œผ๋ฉด ๋””๋ฒ„๊น…์€ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **ํ†ตํ•ฉ ๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ** โ€” ํƒญ 4๊ฐœ: ์š”์ฒญ ๋กœ๊ทธ, ํ”„๋ก์‹œ ๋กœ๊ทธ, ๊ฐ์‚ฌ ๋กœ๊ทธ, ์ฝ˜์†” - **์ฝ˜์†” ๋กœ๊ทธ ๋ทฐ์–ด** โ€” ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ ˆ๋ฒจ, ์ž๋™ ์Šคํฌ๋กค, ๊ฒ€์ƒ‰, ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์‹ค์‹œ๊ฐ„ ํ„ฐ๋ฏธ๋„ ์Šคํƒ€์ผ ๋ทฐ์–ด - **SQLite ํ”„๋ก์‹œ ๋กœ๊ทธ** โ€” ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ์ง€์†๋˜๋Š” ์˜๊ตฌ ๋กœ๊ทธ - **๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ** โ€” 4๊ฐ€์ง€ ๋””๋ฒ„๊น… ๋ชจ๋“œ: ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ(ํ˜•์‹ ๋ฒˆ์—ญ), ์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ(์™•๋ณต), ํ…Œ์ŠคํŠธ ๋ฒค์น˜(์ผ๊ด„), ๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ(์‹ค์‹œ๊ฐ„) - **์›๊ฒฉ ์ธก์ • ์š”์ฒญ** โ€” p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„ + X-์š”์ฒญ-ID ์ถ”์  - **ํšŒ์ „์„ ํ†ตํ•œ ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋กœ๊น…** โ€” ์ฝ˜์†” ์ธํ„ฐ์…‰ํ„ฐ๋Š” ํฌ๊ธฐ ๊ธฐ๋ฐ˜ ํšŒ์ „์„ ํ†ตํ•ด ๋ชจ๋“  ๊ฒƒ์„ JSON ๋กœ๊ทธ์— ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ—๏ธ 11. "๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค." ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ(๋กœ์ปฌ, VPS, Docker, ํด๋ผ์šฐ๋“œ)์—์„œ AI ํ”„๋ก์‹œ๋ฅผ ์„ค์น˜, ๊ตฌ์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋…ธ๋™ ์ง‘์•ฝ์ ์ž…๋‹ˆ๋‹ค. ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฒฝ๋กœ, ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ `EACCES`, ํฌํŠธ ์ถฉ๋Œ, ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋นŒ๋“œ์™€ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋งˆ์ฐฐ์ด ๊ฐ€์ค‘๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **npm ์ „์—ญ ์„ค์น˜** โ€” `npm install -g omniroute && omniroute` โ€” ์™„๋ฃŒ - **Docker ๋‹ค์ค‘ ํ”Œ๋žซํผ** โ€” AMD64 + ARM64 ๊ธฐ๋ณธ(Apple Silicon, AWS Graviton, Raspberry Pi) - **Docker Compose ํ”„๋กœํ•„** โ€” `base`(CLI ๋„๊ตฌ ์—†์Œ) ๋ฐ `cli`(Claude Code, Codex, OpenClaw ํฌํ•จ) - **Electron ๋ฐ์Šคํฌํƒ‘ ์•ฑ** โ€” ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด, ์ž๋™ ์‹œ์ž‘, ์˜คํ”„๋ผ์ธ ๋ชจ๋“œ๋ฅผ ๊ฐ–์ถ˜ Windows/macOS/Linux์šฉ ๊ธฐ๋ณธ ์•ฑ - **๋ถ„ํ•  ํฌํŠธ ๋ชจ๋“œ** โ€” ๊ณ ๊ธ‰ ์‹œ๋‚˜๋ฆฌ์˜ค(์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ, ์ปจํ…Œ์ด๋„ˆ ๋„คํŠธ์›Œํ‚น)๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ํฌํŠธ์— ์žˆ๋Š” API ๋ฐ ๋Œ€์‹œ๋ณด๋“œ - **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™”** โ€” Cloudflare Workers๋ฅผ ํ†ตํ•ด ์žฅ์น˜ ๊ฐ„ ๊ตฌ์„ฑ ๋™๊ธฐํ™” - **DB ๋ฐฑ์—…** โ€” ๋ชจ๋“  ์„ค์ •์˜ ์ž๋™ ๋ฐฑ์—…, ๋ณต์›, ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
๐ŸŒ 12. "์ธํ„ฐํŽ˜์ด์Šค๋Š” ์˜์–ด๋กœ๋งŒ ์ œ๊ณต๋˜๋ฉฐ ์šฐ๋ฆฌ ํŒ€์€ ์˜์–ด๋ฅผ ๊ตฌ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ์˜์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ตญ๊ฐ€, ํŠนํžˆ ๋ผํ‹ด ์•„๋ฉ”๋ฆฌ์นด, ์•„์‹œ์•„, ์œ ๋Ÿฝ์˜ ํŒ€์€ ์˜์–ด ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ธํ•ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ์žฅ๋ฒฝ์œผ๋กœ ์ธํ•ด ์ฑ„ํƒ์ด ์ค„์–ด๋“ค๊ณ  ๊ตฌ์„ฑ ์˜ค๋ฅ˜๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **๋Œ€์‹œ๋ณด๋“œ i18n โ€” 30๊ฐœ ์–ธ์–ด** โ€” ํ•œ๊ตญ์–ด, ์•„๋ž์–ด, ๋ถˆ๊ฐ€๋ฆฌ์•„์–ด, ๋ด๋งˆํฌ์–ด, ๋…์ผ์–ด, ์ŠคํŽ˜์ธ์–ด, ํ•€๋ž€๋“œ์–ด, ํ”„๋ž‘์Šค์–ด, ํžˆ๋ธŒ๋ฆฌ์–ด, ํžŒ๋””์–ด, ํ—๊ฐ€๋ฆฌ์–ด, ์ธ๋„๋„ค์‹œ์•„์–ด, ์ดํƒˆ๋ฆฌ์•„์–ด, ์ผ๋ณธ์–ด, ๋ง๋ ˆ์ด์–ด, ๋„ค๋œ๋ž€๋“œ์–ด, ๋…ธ๋ฅด์›จ์ด์–ด, ํด๋ž€๋“œ์–ด, ํฌ๋ฅดํˆฌ๊ฐˆ์–ด(PT/BR), ๋ฃจ๋งˆ๋‹ˆ์•„์–ด, ๋Ÿฌ์‹œ์•„์–ด, ์Šฌ๋กœ๋ฐ”ํ‚ค์•„์–ด, ์Šค์›จ๋ด์–ด, ํƒœ๊ตญ์–ด, ์šฐํฌ๋ผ์ด๋‚˜์–ด, ๋ฒ ํŠธ๋‚จ์–ด, ์ค‘๊ตญ์–ด, ํ•„๋ฆฌํ•€์–ด, ์˜์–ด๋ฅผ ํฌํ•จํ•œ 500๊ฐœ ์ด์ƒ์˜ ํ‚ค ๋ฒˆ์—ญ๋จ - **RTL ์ง€์›** โ€” ์•„๋ž์–ด ๋ฐ ํžˆ๋ธŒ๋ฆฌ์–ด์— ๋Œ€ํ•ด ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ง€์› - **๋‹ค๊ตญ์–ด README** โ€” 30๊ฐœ์˜ ์™„์ „ํ•œ ๋ฌธ์„œ ๋ฒˆ์—ญ - **์–ธ์–ด ์„ ํƒ๊ธฐ** โ€” ์‹ค์‹œ๊ฐ„ ์ „ํ™˜์„ ์œ„ํ•œ ํ—ค๋”์˜ ์ง€๊ตฌ๋ณธ ์•„์ด์ฝ˜
๐Ÿ”„ 13. "์ฑ„ํŒ… ์ด์ƒ์˜ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž„๋ฒ ๋”ฉ, ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." AI๋Š” ๋‹จ์ˆœํ•œ ์ฑ„ํŒ… ์™„์„ฑ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜ค๋””์˜ค๋ฅผ ๊ธฐ๋กํ•˜๊ณ , RAG์šฉ ์ž„๋ฒ ๋”ฉ์„ ๋งŒ๋“ค๊ณ , ๋ฌธ์„œ ์ˆœ์œ„๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•˜๊ณ , ์ฝ˜ํ…์ธ ๋ฅผ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ API์—๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์—”๋“œํฌ์ธํŠธ์™€ ํ˜•์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์ž„๋ฒ ๋”ฉ** โ€” 6๊ฐœ ๊ณต๊ธ‰์ž์™€ 9๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ์ด ํฌํ•จ๋œ `/v1/embeddings` - **์ด๋ฏธ์ง€ ์ƒ์„ฑ** โ€” 10๊ฐœ ๊ณต๊ธ‰์ž์™€ 20๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ(OpenAI, xAI, Together, Fireworks, Nebius, Hyperbolic, NanoBanana, Antigravity, SD WebUI, ComfyUI)์„ ๊ฐ–์ถ˜ `/v1/images/generations` - **ํ…์ŠคํŠธ-๋น„๋””์˜ค** โ€” `/v1/videos/generations` โ€” ComfyUI(AnimateDiff, SVD) ๋ฐ SD WebUI - **ํ…์ŠคํŠธ-์Œ์•…** โ€” `/v1/music/generations` โ€” ComfyUI(์•ˆ์ •์ ์ธ ์˜ค๋””์˜ค ๊ฐœ๋ฐฉํ˜•, MusicGen) - **์˜ค๋””์˜ค ๋…น์Œ** โ€” `/v1/audio/transcriptions` โ€” Whisper + Nvidia NIM, HuggingFace, Qwen3 - **ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜** โ€” `/v1/audio/speech` โ€” ElevenLabs, Nvidia NIM, HuggingFace, Coqui, Tortoise, Qwen3, + ๊ธฐ์กด ์ œ๊ณต์—…์ฒด - **์กฐ์ •** โ€” `/v1/moderations` โ€” ์ฝ˜ํ…์ธ  ์•ˆ์ „ ํ™•์ธ - **์žฌ์ˆœ์œ„** โ€” `/v1/rerank` โ€” ๋ฌธ์„œ ๊ด€๋ จ์„ฑ ์žฌ์ง€์ • - **์‘๋‹ต API** โ€” Codex์— ๋Œ€ํ•œ ์ „์ฒด `/v1/responses` ์ง€์›
๐Ÿงช 14. "๋ชจ๋ธ๋ณ„ ํ’ˆ์งˆ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋น„๊ตํ•  ๋ฐฉ๋ฒ•์ด ์—†์–ด์š”" ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€(์ฝ”๋“œ, ๋ฒˆ์—ญ, ์ถ”๋ก )์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋ชจ๋ธ์„ ์•Œ๊ณ  ์‹ถ์–ดํ•˜์ง€๋งŒ ์ˆ˜๋™์œผ๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ๋А๋ฆฝ๋‹ˆ๋‹ค. ํ†ตํ•ฉ ํ‰๊ฐ€ ๋„๊ตฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **LLM ํ‰๊ฐ€** โ€” ์ธ์‚ฌ๋ง, ์ˆ˜ํ•™, ์ง€๋ฆฌ, ์ฝ”๋“œ ์ƒ์„ฑ, JSON ์ค€์ˆ˜, ๋ฒˆ์—ญ, ๋งˆํฌ๋‹ค์šด, ์•ˆ์ „ ๊ฑฐ๋ถ€๋ฅผ ๋‹ค๋ฃจ๋Š” ์‚ฌ์ „ ๋กœ๋“œ๋œ 10๊ฐ€์ง€ ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•œ ๊ณจ๋“  ์„ธํŠธ ํ…Œ์ŠคํŠธ - **4๊ฐ€์ง€ ์ผ์น˜ ์ „๋žต** โ€” `exact`, `contains`, `regex`, `custom`(JS ํ•จ์ˆ˜) - **๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ ํ…Œ์ŠคํŠธ ๋ฒค์น˜** โ€” ์—ฌ๋Ÿฌ ์ž…๋ ฅ ๋ฐ ์˜ˆ์ƒ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ ์ผ๊ด„ ํ…Œ์ŠคํŠธ, ๊ณต๊ธ‰์—…์ฒด ๊ฐ„ ๋น„๊ต - **์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ** โ€” ์‹œ๊ฐ์  ์‘๋‹ต ๋ Œ๋”๋ง์„ ํฌํ•จํ•œ ์ „์ฒด ์™•๋ณต - **๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ** โ€” ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ํ๋ฅด๋Š” ๋ชจ๋“  ์š”์ฒญ์˜ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ
๐Ÿ“ˆ 15. "์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ํ™•์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค" ์š”์ฒญ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋™์ผํ•œ ์งˆ๋ฌธ์„ ์บ์‹ฑํ•˜์ง€ ์•Š์œผ๋ฉด ์ค‘๋ณต ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฉฑ๋“ฑ์„ฑ์ด ์—†์œผ๋ฉด ์ค‘๋ณต ์š”์ฒญ์œผ๋กœ ์ธํ•ด ์ฒ˜๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋ฉ๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž๋ณ„ ์š”๊ธˆ ์ œํ•œ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์˜๋ฏธ ์ฒด๊ณ„ ์บ์‹œ** โ€” 2๊ณ„์ธต ์บ์‹œ(์„œ๋ช… + ์˜๋ฏธ ์ฒด๊ณ„)๋กœ ๋น„์šฉ๊ณผ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ฐ์†Œ - **๋ฉฑ๋“ฑ์„ฑ ์š”์ฒญ** โ€” ๋™์ผํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ค‘๋ณต ์ œ๊ฑฐ ๊ธฐ๊ฐ„์€ 5์ดˆ์ž…๋‹ˆ๋‹ค. - **์†๋„ ์ œํ•œ ๊ฐ์ง€** โ€” ์ œ๊ณต์—…์ฒด๋ณ„ RPM, ์ตœ์†Œ ๊ฐ„๊ฒฉ ๋ฐ ์ตœ๋Œ€ ๋™์‹œ ์ถ”์  - **ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์†๋„ ์ œํ•œ** โ€” ์„ค์ • โ†’ ์ง€์†์„ฑ์„ ํ†ตํ•œ ๋ณต์›๋ ฅ์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ๊ฐ’ - **API ํ‚ค ๊ฒ€์ฆ ์บ์‹œ** โ€” ํ”„๋กœ๋•์…˜ ์„ฑ๋Šฅ์„ ์œ„ํ•œ 3๊ณ„์ธต ์บ์‹œ - **์›๊ฒฉ ์ธก์ • ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ƒํƒœ ๋Œ€์‹œ๋ณด๋“œ** โ€” p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„, ์บ์‹œ ํ†ต๊ณ„, ๊ฐ€๋™ ์‹œ๊ฐ„
๐Ÿค– 16. "๋ชจ๋ธ ๋™์ž‘์„ ์ „์ฒด์ ์œผ๋กœ ์ œ์–ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค" ํŠน์ • ์–ธ์–ด, ํŠน์ • ์–ด์กฐ๋กœ ๋ชจ๋“  ์‘๋‹ต์„ ์›ํ•˜๊ฑฐ๋‚˜ ์ถ”๋ก  ํ† ํฐ์„ ์ œํ•œํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž. ๋ชจ๋“  ๋„๊ตฌ/์š”์ฒญ์—์„œ ์ด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํ˜„์‹ค์ ์ž…๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - **์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์‚ฝ์ž…** โ€” ๋ชจ๋“  ์š”์ฒญ์— ์ „์—ญ ํ”„๋กฌํ”„ํŠธ ์ ์šฉ - **์ƒ๊ฐ ์˜ˆ์‚ฐ ๊ฒ€์ฆ** โ€” ์š”์ฒญ๋ณ„ ํ† ํฐ ํ• ๋‹น ์ œ์–ด ์ถ”๋ก (ํŒจ์Šค์Šค๋ฃจ, ์ž๋™, ์‚ฌ์šฉ์ž ์ •์˜, ์ ์‘ํ˜•) - **6๊ฐ€์ง€ ๋ผ์šฐํŒ… ์ „๋žต** โ€” ์š”์ฒญ ๋ฐฐํฌ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ธ€๋กœ๋ฒŒ ์ „๋žต - **์™€์ผ๋“œ์นด๋“œ ๋ผ์šฐํ„ฐ** โ€” `provider/*` ํŒจํ„ด์€ ๋ชจ๋“  ๊ณต๊ธ‰์ž์—๊ฒŒ ๋™์ ์œผ๋กœ ๋ผ์šฐํŒ…๋ฉ๋‹ˆ๋‹ค. - **์ฝค๋ณด ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ํ† ๊ธ€** โ€” ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ง์ ‘ ์ฝค๋ณด๋ฅผ ํ† ๊ธ€ํ•ฉ๋‹ˆ๋‹ค. - **๊ณต๊ธ‰์ž ํ† ๊ธ€** โ€” ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ๋ชจ๋“  ์—ฐ๊ฒฐ์„ ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. - **์ฐจ๋‹จ๋œ ์ œ๊ณต์ž** โ€” `/v1/models` ๋ชฉ๋ก์—์„œ ํŠน์ • ์ œ๊ณต์ž๋ฅผ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.
๐Ÿงฐ 17. "์ผ๋ฅ˜ ์ œํ’ˆ ๊ธฐ๋Šฅ์œผ๋กœ MCP ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ๋งŽ์€ AI ๊ฒŒ์ดํŠธ์›จ์ด๋Š” MCP๋ฅผ ์ˆจ๊ฒจ์ง„ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ๋งŒ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํŒ€์—๋Š” ๊ฐ€์‹œ์ ์ด๊ณ  ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์šด์˜ ๋ ˆ์ด์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ๋Œ€์‹œ๋ณด๋“œ ํƒ์ƒ‰ ๋ฐ ์—”๋“œํฌ์ธํŠธ ํ”„๋กœํ† ์ฝœ ํƒญ์— MCP๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. - ํ”„๋กœ์„ธ์Šค, ๋„๊ตฌ, ๋ฒ”์œ„ ๋ฐ ๊ฐ์‚ฌ๊ฐ€ ํฌํ•จ๋œ ์ „์šฉ MCP ๊ด€๋ฆฌ ํŽ˜์ด์ง€ - `omniroute --mcp` ๋ฐ ํด๋ผ์ด์–ธํŠธ ์˜จ๋ณด๋”ฉ์„ ์œ„ํ•œ ๋น ๋ฅธ ์‹œ์ž‘ ๋‚ด์žฅ
๐Ÿง  18. "๋™๊ธฐํ™” + ์ŠคํŠธ๋ฆผ ์ž‘์—… ๊ฒฝ๋กœ๋ฅผ ๊ฐ–์ถ˜ A2A ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์—๋Š” ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ œ์–ด๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์‘๋‹ต๊ณผ ์žฅ๊ธฐ ์‹คํ–‰ ์ŠคํŠธ๋ฆฌ๋ฐ ์‹คํ–‰์ด ๋ชจ๋‘ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - `message/send` ๋ฐ `message/stream`๊ฐ€ ํฌํ•จ๋œ A2A JSON-RPC ์—”๋“œํฌ์ธํŠธ(`POST /a2a`) - ํ„ฐ๋ฏธ๋„ ์ƒํƒœ ์ „ํŒŒ๋ฅผ ํ†ตํ•œ SSE ์ŠคํŠธ๋ฆฌ๋ฐ - `tasks/get` ๋ฐ `tasks/cancel`์šฉ ์ž‘์—… ์ˆ˜๋ช… ์ฃผ๊ธฐ API
๐Ÿ›ฐ๏ธ 19. "์ถ”์ธก๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ MCP ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์šด์˜ํŒ€์€ API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ MCP๊ฐ€ ์‹ค์ œ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - PID, ํƒ€์ž„์Šคํƒฌํ”„, ์ „์†ก, ๋„๊ตฌ ๊ฐœ์ˆ˜ ๋ฐ ๋ฒ”์œ„ ๋ชจ๋“œ๊ฐ€ ํฌํ•จ๋œ ๋Ÿฐํƒ€์ž„ ํ•˜ํŠธ๋น„ํŠธ ํŒŒ์ผ - ํ•˜ํŠธ๋น„ํŠธ + ์ตœ๊ทผ ํ™œ๋™์„ ๊ฒฐํ•ฉํ•œ MCP ์ƒํƒœ API - ํ”„๋กœ์„ธ์Šค/๊ฐ€๋™ ์‹œ๊ฐ„/ํ•˜ํŠธ๋น„ํŠธ ์ตœ์‹ ์„ฑ์„ ์œ„ํ•œ UI ์ƒํƒœ ์นด๋“œ
๐Ÿ“‹ 20. "๊ฐ์‚ฌ ๊ฐ€๋Šฅํ•œ MCP ๋„๊ตฌ ์‹คํ–‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ๋„๊ตฌ๊ฐ€ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์šด์˜ ์ž‘์—…์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ ํŒ€์—๋Š” ๋ฒ•์˜ํ•™์  ์ถ”์ ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - MCP ๋„๊ตฌ ํ˜ธ์ถœ์— ๋Œ€ํ•œ SQLite ์ง€์› ๊ฐ์‚ฌ ๋กœ๊น… - ๋„๊ตฌ, ์„ฑ๊ณต/์‹คํŒจ, API ํ‚ค, ํŽ˜์ด์ง€ ๋งค๊น€ ๊ธฐ์ค€์œผ๋กœ ํ•„ํ„ฐ๋ง - ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๋Œ€์‹œ๋ณด๋“œ ๊ฐ์‚ฌ ํ…Œ์ด๋ธ” + ํ†ต๊ณ„ ์—”๋“œํฌ์ธํŠธ
๐Ÿ” 21. "ํ†ตํ•ฉ๋‹น ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ MCP ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์—๋Š” ๋„๊ตฌ ๋ฒ”์ฃผ์— ๋Œ€ํ•œ ์ตœ์†Œ ๊ถŒํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ์ œ์–ด๋œ ๋„๊ตฌ ์•ก์„ธ์Šค๋ฅผ ์œ„ํ•œ 9๊ฐœ์˜ ์„ธ๋ถ„ํ™”๋œ MCP ๋ฒ”์œ„ - MCP ๊ด€๋ฆฌ UI์˜ ๋ฒ”์œ„ ์ ์šฉ ๋ฐ ๊ฐ€์‹œ์„ฑ - ์šด์˜ ํˆด๋ง์„ ์œ„ํ•œ ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ ์ž์„ธ
โš™๏ธ 22. "์žฌ๋ฐฐ์น˜ ์—†์ด ์ž‘์ „ ํ†ต์ œ๊ฐ€ ํ•„์š”ํ•ด์š”" ํŒ€์€ ์‚ฌ๊ณ  ๋˜๋Š” ๋น„์šฉ ์ด๋ฒคํŠธ ์ค‘์— ๋น ๋ฅธ ๋Ÿฐํƒ€์ž„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - MCP ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ง์ ‘ ์ฝค๋ณด ํ™œ์„ฑํ™” ์ „ํ™˜ - ์‚ฌ์ „ ์ •์˜๋œ ์ •์ฑ… ํŒฉ์˜ ๋ณต์›๋ ฅ ํ”„๋กœํ•„ ์ ์šฉ - ๋™์ผํ•œ ์šด์˜ ํŒจ๋„์—์„œ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ ์žฌ์„ค์ •
๐Ÿ”„ 23. "์‹ค์‹œ๊ฐ„ A2A ์ž‘์—… ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ฐ€์‹œ์„ฑ ๋ฐ ์ทจ์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์ˆ˜๋ช…์ฃผ๊ธฐ ๊ฐ€์‹œ์„ฑ์ด ์—†์œผ๋ฉด ์ž‘์—… ์‚ฌ๊ณ ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ํŽ˜์ด์ง€ ๋งค๊น€์„ ํ†ตํ•œ ์ƒํƒœ/๊ธฐ์ˆ ๋ณ„ ์ž‘์—… ๋ชฉ๋ก/ํ•„ํ„ฐ๋ง - ์ž‘์—… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์ด๋ฒคํŠธ ๋ฐ ์•„ํ‹ฐํŒฉํŠธ์— ๋Œ€ํ•œ ๋“œ๋ฆด๋‹ค์šด - ์ž‘์—… ์ทจ์†Œ ๋์  ๋ฐ ํ™•์ธ์ด ํฌํ•จ๋œ UI ์ž‘์—…
๐ŸŒŠ 24. "A2A ๋กœ๋“œ๋ฅผ ์œ„ํ•œ ํ™œ์„ฑ ์ŠคํŠธ๋ฆผ ๋ฉ”ํŠธ๋ฆญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์ŠคํŠธ๋ฆฌ๋ฐ ์›Œํฌํ”Œ๋กœ์—๋Š” ๋™์‹œ์„ฑ ๋ฐ ๋ผ์ด๋ธŒ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์šด์˜ ํ†ต์ฐฐ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - A2A ์ƒํƒœ์— ํ†ตํ•ฉ๋œ ํ™œ์„ฑ ์ŠคํŠธ๋ฆผ ์นด์šดํ„ฐ - ๋งˆ์ง€๋ง‰ ์ž‘์—… ํƒ€์ž„์Šคํƒฌํ”„ ๋ฐ ์ƒํƒœ๋ณ„ ๊ฐœ์ˆ˜ - ์‹ค์‹œ๊ฐ„ ์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ A2A ๋Œ€์‹œ๋ณด๋“œ ์นด๋“œ
๐Ÿชช 25. "ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ์—์ด์ „ํŠธ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ์—๋Š” ์˜จ๋ณด๋”ฉ์„ ์œ„ํ•ด ์ปดํ“จํ„ฐ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - `/.well-known/agent.json`์— ๋…ธ์ถœ๋œ ์—์ด์ „ํŠธ ์นด๋“œ - ๊ด€๋ฆฌ UI์— ํ‘œ์‹œ๋˜๋Š” ๋Šฅ๋ ฅ๊ณผ ๊ธฐ์ˆ  - A2A ์ƒํƒœ API์—๋Š” ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๊ฒ€์ƒ‰ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿงญ 26. "์ œํ’ˆ UX์—์„œ ํ”„๋กœํ† ์ฝœ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœํ† ์ฝœ ํ‘œ๋ฉด์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ์ฑ„ํƒ ๋ฐ ์ง€์› ํ’ˆ์งˆ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - MCP ๋ฐ A2A์šฉ ์‚ฌ์ด๋“œ๋ฐ” ํ•ญ๋ชฉ - ๋น ๋ฅธ ์‹œ์ž‘ ๋ฐ ์ƒํƒœ๊ฐ€ ํฌํ•จ๋œ ์—”๋“œํฌ์ธํŠธ ํŽ˜์ด์ง€ ํ”„๋กœํ† ์ฝœ ํƒญ - ๊ฐœ์š”์—์„œ ์ „์šฉ ๊ด€๋ฆฌ ๋Œ€์‹œ๋ณด๋“œ๋กœ์˜ ๋งํฌ
๐Ÿงช 27. "์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์™€์˜ ์—”๋“œํˆฌ์—”๋“œ ํ”„๋กœํ† ์ฝœ ๊ฒ€์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ๋ชจ์˜ ํ…Œ์ŠคํŠธ๋Š” ์ถœ์‹œ ์ „์— ํ”„๋กœํ† ์ฝœ ํ˜ธํ™˜์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ์•ฑ์„ ๋ถ€ํŒ…ํ•˜๊ณ  ์‹ค์ œ MCP SDK ํด๋ผ์ด์–ธํŠธ ์ „์†ก์„ ์‚ฌ์šฉํ•˜๋Š” E2E ์ œํ’ˆ๊ตฐ - ํ๋ฆ„ ๊ฒ€์ƒ‰, ์ „์†ก, ์ŠคํŠธ๋ฆฌ๋ฐ, ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์ทจ์†Œ์— ๋Œ€ํ•œ A2A ํด๋ผ์ด์–ธํŠธ ํ…Œ์ŠคํŠธ - MCP ๊ฐ์‚ฌ ๋ฐ A2A ์ž‘์—… API์— ๋Œ€ํ•œ ๊ต์ฐจ ํ™•์ธ ์ฃผ์žฅ
๐Ÿ“ก 28. "๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค์— ๊ฑธ์ณ ํ†ตํ•ฉ๋œ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค" ํ”„๋กœํ† ์ฝœ๋ณ„๋กœ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ๋ถ„ํ• ํ•˜๋ฉด ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  MTTR์ด ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ๋Œ€์‹œ๋ณด๋“œ/๋กœ๊ทธ/๋ถ„์„์„ ํ•˜๋‚˜์˜ ์ œํ’ˆ์œผ๋กœ ํ†ตํ•ฉ - OpenAI, MCP ๋ฐ A2A ๊ณ„์ธต ์ „๋ฐ˜์— ๊ฑธ์ณ ์ƒํƒœ + ๊ฐ์‚ฌ + ์›๊ฒฉ ์ธก์ • ์š”์ฒญ - ์ƒํƒœ ๋ฐ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ์šด์˜ API
๐Ÿ’ผ 29. "ํ”„๋ก์‹œ + ๋„๊ตฌ + ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์œ„ํ•ด ํ•˜๋‚˜์˜ ๋Ÿฐํƒ€์ž„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค." ์—ฌ๋Ÿฌ ๊ฐœ๋ณ„ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์šด์˜ ๋น„์šฉ๊ณผ ์˜ค๋ฅ˜ ๋ชจ๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - OpenAI ํ˜ธํ™˜ ํ”„๋ก์‹œ, MCP ์„œ๋ฒ„, A2A ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ์Šคํƒ์— ์žˆ์Œ - ๊ณต์œ  ์ธ์ฆ, ๋ณต์›๋ ฅ, ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ๋ฐ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ - ๋ชจ๋“  ์ƒํ˜ธ ์ž‘์šฉ ํ‘œ๋ฉด์— ๊ฑธ์ณ ์ผ๊ด€๋œ ์ •์ฑ… ๋ชจ๋ธ
๐Ÿš€ 30. "๊ธ€๋ฃจ ์ฝ”๋“œ ํ™•์žฅ ์—†์ด ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." ์—ฌ๋Ÿฌ ์ž„์‹œ ์„œ๋น„์Šค์™€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฒฐํ•ฉํ•  ๋•Œ ํŒ€์˜ ์†๋„๊ฐ€ ๋А๋ ค์ง‘๋‹ˆ๋‹ค. **OmniRoute๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•:** - ํด๋ผ์ด์–ธํŠธ์™€ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ํ†ตํ•ฉ ์—”๋“œํฌ์ธํŠธ ์ „๋žต - ๋‚ด์žฅ๋œ ํ”„๋กœํ† ์ฝœ ๊ด€๋ฆฌ UI ๋ฐ ์—ฐ๊ธฐ ๊ฒ€์ฆ ๊ฒฝ๋กœ - ํ”„๋กœ๋•์…˜ ์ค€๋น„ ๊ธฐ๋ฐ˜(๋ณด์•ˆ, ๋กœ๊น…, ํƒ„๋ ฅ์„ฑ, ๋ฐฑ์—…)
### ํ”Œ๋ ˆ์ด๋ถ ์˜ˆ์‹œ(ํ†ตํ•ฉ ์‚ฌ์šฉ ์‚ฌ๋ก€) **ํ”Œ๋ ˆ์ด๋ถ A: ์œ ๋ฃŒ ๊ตฌ๋… ๊ทน๋Œ€ํ™” + ์ €๋ ดํ•œ ๋ฐฑ์—…** ```txt Combo: "maximize-claude" 1. cc/claude-opus-4-6 2. glm/glm-4.7 3. if/kimi-k2-thinking Monthly cost: $20 + small backup spend Outcome: higher quality, near-zero interruption ``` **ํ”Œ๋ ˆ์ด๋ถ B: ๋น„์šฉ์ด ์ „ํ˜€ ๋“ค์ง€ ์•Š๋Š” ์ฝ”๋”ฉ ์Šคํƒ** ```txt Combo: "free-forever" 1. gc/gemini-3-flash 2. if/kimi-k2-thinking 3. qw/qwen3-coder-plus Monthly cost: $0 Outcome: stable free coding workflow ``` **ํ”Œ๋ ˆ์ด๋ถ C: ์—ฐ์ค‘๋ฌดํœด ์ƒ์‹œ ๊ฐ€๋™ ํด๋ฐฑ ์ฒด์ธ** ```txt Combo: "always-on" 1. cc/claude-opus-4-6 2. cx/gpt-5.2-codex 3. glm/glm-4.7 4. minimax/MiniMax-M2.1 5. if/kimi-k2-thinking Outcome: deep fallback depth for deadline-critical workloads ``` **ํ”Œ๋ ˆ์ด๋ถ D: MCP + A2A๋ฅผ ์‚ฌ์šฉํ•œ ์—์ด์ „ํŠธ ์ž‘์—…** ```txt 1) Start MCP transport (`omniroute --mcp`) for tool-driven operations 2) Run A2A tasks via `message/send` and `message/stream` 3) Observe via /dashboard/mcp and /dashboard/a2a 4) Control incidents with resilience profile + task cancellation ``` --- ## โšก ๋น ๋ฅธ ์‹œ์ž‘ **1. ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜:** ```bash npm install -g omniroute omniroute ``` ๐ŸŽ‰ ๋Œ€์‹œ๋ณด๋“œ๋Š” `http://localhost:20128`์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค. | ๋ช…๋ น | ์„ค๋ช… | | ----------------------- | ----------------------------- | | `omniroute` | ์„œ๋ฒ„ ์‹œ์ž‘(๊ธฐ๋ณธ ํฌํŠธ 20128) | | `omniroute --port 3000` | ์‚ฌ์šฉ์ž ์ •์˜ ํฌํŠธ ์‚ฌ์šฉ | | `omniroute --no-open` | ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ž๋™์œผ๋กœ ์—ด์ง€ ์•Š์Œ | | `omniroute --help` | ๋„์›€๋ง ํ‘œ์‹œ | **2. ๋ฌด๋ฃŒ ๊ณต๊ธ‰์ž ์—ฐ๊ฒฐ:** ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž โ†’ **Claude Code** ๋˜๋Š” **Antigravity** ์—ฐ๊ฒฐ โ†’ OAuth ๋กœ๊ทธ์ธ โ†’ ์™„๋ฃŒ! **3. CLI ๋„๊ตฌ์—์„œ ์‚ฌ์šฉ:** ``` Claude Code/Codex/Gemini CLI/OpenClaw/Cursor/Cline Settings: Endpoint: http://localhost:20128/v1 API Key: [copy from dashboard] Model: if/kimi-k2-thinking ``` **๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค!** ๋ฌด๋ฃŒ AI ๋ชจ๋ธ๋กœ ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”. **๋Œ€์•ˆ โ€” ์†Œ์Šค์—์„œ ์‹คํ–‰:** ```bash cp .env.example .env npm install PORT=20128 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run dev ``` --- ## ๐Ÿณ ๋„์ปค OmniRoute๋Š” [Docker Hub](https://hub.docker.com/r/diegosouzapw/omniroute)์—์„œ ๊ณต๊ฐœ Docker ์ด๋ฏธ์ง€๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. **๋น ๋ฅธ ์‹คํ–‰:** ```bash docker run -d \ --name omniroute \ --restart unless-stopped \ -p 20128:20128 \ -v omniroute-data:/app/data \ diegosouzapw/omniroute:latest ``` **ํ™˜๊ฒฝ ํŒŒ์ผ ํฌํ•จ:** ```bash # Copy and edit .env first cp .env.example .env docker run -d \ --name omniroute \ --restart unless-stopped \ --env-file .env \ -p 20128:20128 \ -v omniroute-data:/app/data \ diegosouzapw/omniroute:latest ``` **Docker Compose ์‚ฌ์šฉ:** ```bash # Base profile (no CLI tools) docker compose --profile base up -d # CLI profile (Claude Code, Codex, OpenClaw built-in) docker compose --profile cli up -d ``` | ์ด๋ฏธ์ง€ | ํƒœ๊ทธ | ์‚ฌ์ด์ฆˆ | ์„ค๋ช… | | ------------------------ | -------- | ------ | ---------------- | | `diegosouzapw/omniroute` | `latest` | ~250MB | ์ตœ์‹  ์•ˆ์ • ๋ฆด๋ฆฌ์Šค | | `diegosouzapw/omniroute` | `1.0.3` | ~250MB | ํ˜„์žฌ ๋ฒ„์ „ | --- --- ## ๐Ÿ–ฅ๏ธ > ๐Ÿ†• **์ƒˆ ๊ธฐ๋Šฅ!** OmniRoute๊ฐ€ Windows, macOS, Linux์šฉ **๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ์Šคํฌํ†ฑ ์•ฑ**์œผ๋กœ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. - ๐Ÿ–ฅ๏ธ **๋„ค์ดํ‹ฐ๋ธŒ ์œˆ๋„์šฐ** โ€” ์‹œ์Šคํ…œ ํŠธ๋ ˆ์ด ํ†ตํ•ฉ ์ „์šฉ ์ฐฝ - ๐Ÿ”„ **์ž๋™ ์‹œ์ž‘** โ€” ์‹œ์Šคํ…œ ๋กœ๊ทธ์ธ ์‹œ OmniRoute ์‹คํ–‰ - ๐Ÿ”” **๋„ค์ดํ‹ฐ๋ธŒ ์•Œ๋ฆผ** โ€” ํ• ๋‹น๋Ÿ‰ ์†Œ์ง„ ๋˜๋Š” ๊ณต๊ธ‰์ž ๋ฌธ์ œ ์•Œ๋ฆผ - โšก **์›ํด๋ฆญ ์„ค์น˜** โ€” NSIS (Windows), DMG (macOS), AppImage (Linux) - ๐ŸŒ **์˜คํ”„๋ผ์ธ ๋ชจ๋“œ** โ€” ๋‚ด์žฅ ์„œ๋ฒ„๋กœ ์™„์ „ ์˜คํ”„๋ผ์ธ ์ž‘๋™ ```bash npm run electron:dev # ๊ฐœ๋ฐœ ๋ชจ๋“œ npm run electron:build # ํ˜„์žฌ ํ”Œ๋žซํผ npm run electron:build:win # Windows (.exe) npm run electron:build:mac # macOS (.dmg) npm run electron:build:linux # Linux (.AppImage) ``` ๐Ÿ“– ์ „์ฒด ๋ฌธ์„œ: [`electron/README.md`](electron/README.md) --- ## ๐Ÿ’ฐ ๊ฐ€๊ฒฉ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ | ๊ณ„์ธต | ๊ณต๊ธ‰์ž | ๋น„์šฉ | ํ• ๋‹น๋Ÿ‰ ์žฌ์„ค์ • | ์ตœ๊ณ ์˜ ๋Œ€์ƒ | | ------------- | ------------------- | --------------------- | --------------- | ----------------- | | **๐Ÿ’ณ ๊ตฌ๋…** | ํด๋กœ๋“œ ์ฝ”๋“œ (Pro) | $20/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | ์ด๋ฏธ ๊ตฌ๋… ์ค‘ | | | ์ฝ”๋ฑ์Šค(ํ”Œ๋Ÿฌ์Šค/ํ”„๋กœ) | $20-200/์›” | 5์‹œ๊ฐ„ + ๋งค์ฃผ | OpenAI ์‚ฌ์šฉ์ž | | | ์ œ๋ฏธ๋‹ˆ CLI | **๋ฌด๋ฃŒ** | 180K/์›” + 1K/์ผ | ๋ชจ๋“  ์‚ฌ๋žŒ! | | | GitHub ๋ถ€์กฐ์ข…์‚ฌ | $10-19/์›” | ์›”๊ฐ„ | GitHub ์‚ฌ์šฉ์ž | | **๐Ÿ”‘ API ํ‚ค** | ์—”๋น„๋””์•„ NIM | **๋ฌด๋ฃŒ** (1000ํฌ๋ ˆ๋”ง) | ์ผํšŒ์„ฑ | ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ํ…Œ์ŠคํŠธ | | | ๋”ฅ์‹œํฌ | ์ข…๋Ÿ‰์ œ | ์—†์Œ | ์ตœ๊ณ ์˜ ๊ฐ€๊ฒฉ/ํ’ˆ์งˆ | | | ๊ทธ๋กœํฌ | ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ + ์œ ๋ฃŒ | ์š”๊ธˆ ์ œํ•œ | ์ดˆ๊ณ ์† ์ถ”๋ก  | | | xAI(๊ทธ๋ก) | ์ข…๋Ÿ‰์ œ | ์—†์Œ | ๊ทธ๋ก ๋ชจ๋ธ | | | ๋ฏธ์ŠคํŠธ๋ž„ | ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ + ์œ ๋ฃŒ | ์š”๊ธˆ ์ œํ•œ | ์œ ๋Ÿฝ์˜ AI | | | ์˜คํ”ˆ๋ผ์šฐํ„ฐ | ์ข…๋Ÿ‰์ œ | ์—†์Œ | 100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ | | **๐Ÿ’ฐ ์ €๋ ดํ•œ** | GLM-4.7 | $0.6/1M | ๋งค์ผ ์˜ค์ „ 10์‹œ | ์˜ˆ์‚ฐ ๋ฐฑ์—… | | | ๋ฏธ๋‹ˆ๋งฅ์Šค M2.1 | $0.2/1M | 5์‹œ๊ฐ„ ๋กค๋ง | ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜ | | | ํ‚ค๋ฏธ K2 | $9/์›” ์ •์•ก | 1000๋งŒ ํ† ํฐ/์›” | ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋น„์šฉ | | **๐Ÿ†“ ๋ฌด๋ฃŒ** | ์•„์ดํ”Œ๋กœ์šฐ | $0 | ๋ฌด์ œํ•œ | 8๊ฐœ ๋ชจ๋ธ ๋ฌด๋ฃŒ | | | ํ€€ | $0 | ๋ฌด์ œํ•œ | 3๊ฐœ ๋ชจ๋ธ ๋ฌด๋ฃŒ | | | ํ‚ค๋กœ | $0 | ๋ฌด์ œํ•œ | ํด๋กœ๋“œ ํ”„๋ฆฌ | **๐Ÿ’ก ์ „๋ฌธ๊ฐ€ ํŒ:** Gemini CLI(์›” 180K ๋ฌด๋ฃŒ) + iFlow(๋ฌด์ œํ•œ ๋ฌด๋ฃŒ) ์ฝค๋ณด = ๋น„์šฉ $0๋กœ ์‹œ์ž‘ํ•˜์„ธ์š”! --- ## ๐Ÿ’ก ์ฃผ์š” ๊ธฐ๋Šฅ ### ๐Ÿง  ์ฝ”์–ด ๋ผ์šฐํŒ… ๋ฐ ์ธํ…”๋ฆฌ์ „์Šค | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ----------------------------- | ----------------------------------------------------------------------------- | | ๐ŸŽฏ **์Šค๋งˆํŠธ 4๊ณ„์ธต ํด๋ฐฑ** | ์ž๋™ ๊ฒฝ๋กœ: ๊ตฌ๋… โ†’ API ํ‚ค โ†’ ์ €๋ ดํ•œ โ†’ ๋ฌด๋ฃŒ | | ๐Ÿ“Š **์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ** | ๋ผ์ด๋ธŒ ํ† ํฐ ์ˆ˜ + ๊ณต๊ธ‰์ž๋ณ„ ์นด์šดํŠธ๋‹ค์šด ์žฌ์„ค์ • | | ๐Ÿ”„ **ํ˜•์‹ ๋ฒˆ์—ญ** | OpenAI โ‡” Claude โ‡” Gemini โ‡” Cursor โ‡” Kiro ์‹ฌ๋ฆฌ์Šค + ๋ฐ˜์‘์œ„์ƒ | | ๐Ÿ‘ฅ **๋‹ค์ค‘ ๊ณ„์ • ์ง€์›** | ์ง€๋Šฅ์ ์ธ ์„ ํƒ์„ ํ†ตํ•ด ๊ณต๊ธ‰์ž๋‹น ์—ฌ๋Ÿฌ ๊ณ„์ • | | ๐Ÿ”„ **์ž๋™ ํ† ํฐ ์ƒˆ๋กœ๊ณ ์นจ** | ์žฌ์‹œ๋„ ์‹œ OAuth ํ† ํฐ์ด ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์ณ์ง‘๋‹ˆ๋‹ค. | | ๐ŸŽจ **๋งž์ถคํ˜• ์ฝค๋ณด** | 6๊ฐ€์ง€ ์ „๋žต: ์ฑ„์šฐ๊ธฐ ์šฐ์„ , ๋ผ์šด๋“œ ๋กœ๋นˆ, p2c, ๋ฌด์ž‘์œ„, ์ตœ์†Œ ์‚ฌ์šฉ, ๋น„์šฉ ์ตœ์ ํ™” | | ๐Ÿงฉ **๋งž์ถคํ˜• ๋ชจ๋ธ** | ๋ชจ๋“  ๊ณต๊ธ‰์ž์— ๋ชจ๋ธ ID ์ถ”๊ฐ€ | | ๐ŸŒ **์™€์ผ๋“œ์นด๋“œ ๋ผ์šฐํ„ฐ** | `provider/*` ํŒจํ„ด์„ ๋ชจ๋“  ๊ณต๊ธ‰์ž์—๊ฒŒ ๋™์ ์œผ๋กœ ๋ผ์šฐํŒ… | | ๐Ÿง  **์˜ˆ์‚ฐ ๊ณ ๋ ค** | ์ถ”๋ก  ๋ชจ๋ธ์„ ์œ„ํ•œ ํŒจ์Šค์Šค๋ฃจ, ์ž๋™, ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ ์ ์‘ํ˜• ๋ชจ๋“œ | | ๐Ÿ”€ **Model Aliases** | Auto-forward deprecated model IDs to current replacements (built-in + custom) | | โšก **Background Degradation** | Auto-route background tasks (titles, summaries) to cheaper models | | ๐Ÿ’ฌ **์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์‚ฝ์ž…** | ๋ชจ๋“  ์š”์ฒญ์— โ€‹โ€‹์ „์—ญ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ ์šฉ | | ๐Ÿ“„ **์‘๋‹ต API** | Codex์— ๋Œ€ํ•œ ์ „์ฒด OpenAI ์‘๋‹ต API(`/v1/responses`) ์ง€์› | ### ๐ŸŽต ๋‹ค์ค‘ ๋ชจ๋“œ API | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ----------------------- | ------------------------------------------------------ | | ๐Ÿ–ผ๏ธ **์ด๋ฏธ์ง€ ์ƒ์„ฑ** | `/v1/images/generations` โ€” 4๊ฐœ ๊ณต๊ธ‰์ž, 9๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ | | ๐Ÿ“ **์ž„๋ฒ ๋”ฉ** | `/v1/embeddings` โ€” 6๊ฐœ ๊ณต๊ธ‰์ž, 9๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ | | ๐ŸŽค **์˜ค๋””์˜ค ์ „์‚ฌ** | `/v1/audio/transcriptions` โ€” ์†์‚ญ์ž„ ํ˜ธํ™˜ | | ๐Ÿ”Š **ํ…์ŠคํŠธ ์Œ์„ฑ ๋ณ€ํ™˜** | `/v1/audio/speech` โ€” ๋‹ค์ค‘ ์ œ๊ณต์ž ์˜ค๋””์˜ค ํ•ฉ์„ฑ | | ๐Ÿ›ก๏ธ **์กฐ์ •** | `/v1/moderations` โ€” ์ฝ˜ํ…์ธ  ์•ˆ์ „ ํ™•์ธ | | ๐Ÿ”€ **์žฌ์ˆœ์œ„** | `/v1/rerank` โ€” ๋ฌธ์„œ ๊ด€๋ จ์„ฑ ์žฌ์ˆœ์œ„ | ### ๐Ÿ›ก๏ธ ๋ณต์›๋ ฅ ๋ฐ ๋ณด์•ˆ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ------------------------------- | ---------------------------------------------------------------------------- | | ๐Ÿ”Œ **ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ** | ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ž„๊ณ„๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณต๊ธ‰์ž๋ณ„ ์ž๋™ ์—ด๊ธฐ/๋‹ซ๊ธฐ | | ๐Ÿ›ก๏ธ **์ฒœ๋‘ฅ ๋ฐฉ์ง€ ๋ฌด๋ฆฌ** | API ํ‚ค ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ๋ฎคํ…์Šค + ์„ธ๋งˆํฌ ์†๋„ ์ œํ•œ | | ๐Ÿง  **์˜๋ฏธ๋ก ์  ์บ์‹œ** | 2๊ณ„์ธต ์บ์‹œ(์„œ๋ช… + ์˜๋ฏธ ์ฒด๊ณ„)๋กœ ๋น„์šฉ ๋ฐ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ฐ์†Œ | | โšก **๋ฉฑ๋“ฑ์„ฑ ์š”์ฒญ** | ์ค‘๋ณต ์š”์ฒญ์— ๋Œ€ํ•œ 5์ดˆ ์ค‘๋ณต ์ œ๊ฑฐ ๊ธฐ๊ฐ„ | | ๐Ÿ”’ **TLS ์ง€๋ฌธ ์Šคํ‘ธํ•‘** | wreq-js๋ฅผ ํ†ตํ•ด TLS ๊ธฐ๋ฐ˜ ๋ด‡ ๊ฐ์ง€ ์šฐํšŒ | | ๐ŸŒ **IP ํ•„ํ„ฐ๋ง** | API ์•ก์„ธ์Šค ์ œ์–ด๋ฅผ ์œ„ํ•œ ํ—ˆ์šฉ ๋ชฉ๋ก/์ฐจ๋‹จ ๋ชฉ๋ก | | ๐Ÿ“Š **ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ์†๋„ ์ œํ•œ** | ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ RPM, ์ตœ์†Œ ๊ฐ„๊ฒฉ ๋ฐ ์ตœ๋Œ€ ๋™์‹œ | | ๐Ÿ’พ **Rate Limit Persistence** | Learned limits survive restarts via SQLite with 60s debounce + 24h staleness | | ๐Ÿ”„ **Token Refresh Resilience** | Per-provider circuit breaker (5 failsโ†’30min) + 30s timeout per attempt | | ๐Ÿ›ก **API ์—”๋“œํฌ์ธํŠธ ๋ณดํ˜ธ** | `/models` ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์ธ์ฆ ๊ฒŒ์ดํŒ… + ๊ณต๊ธ‰์ž ์ฐจ๋‹จ | | ๐Ÿ”’ **ํ”„๋ก์‹œ ๊ฐ€์‹œ์„ฑ** | ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋ฐฐ์ง€: ๐ŸŸข ๊ธ€๋กœ๋ฒŒ, ๐ŸŸก ๊ณต๊ธ‰์ž, ๐Ÿ”ต IP ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ํ†ตํ•œ ์—ฐ๊ฒฐ๋ณ„ | | ๐ŸŒ **3๋‹จ๊ณ„ ํ”„๋ก์‹œ ๊ตฌ์„ฑ** | ๊ธ€๋กœ๋ฒŒ, ๊ณต๊ธ‰์ž๋ณ„ ๋˜๋Š” ์—ฐ๊ฒฐ๋ณ„ ์ˆ˜์ค€์—์„œ ํ”„๋ก์‹œ ๊ตฌ์„ฑ | ### ๐Ÿ“Š ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ๋ถ„์„ | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ------------------------- | -------------------------------------------------------------------- | | ๐Ÿ“ **๋กœ๊น… ์š”์ฒญ** | ์ „์ฒด ์š”์ฒญ/์‘๋‹ต ๋กœ๊ทธ๊ฐ€ ํฌํ•จ๋œ ๋””๋ฒ„๊ทธ ๋ชจ๋“œ | | ๐Ÿ’พ **SQLite ํ”„๋ก์‹œ ๋กœ๊ทธ** | ์˜๊ตฌ ํ”„๋ก์‹œ ๋กœ๊ทธ๋Š” ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. | | ๐Ÿ“Š **๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ** | Recharts ๊ธฐ๋ฐ˜: ํ†ต๊ณ„ ์นด๋“œ, ๋ชจ๋ธ ์‚ฌ์šฉ ์ฐจํŠธ, ๊ณต๊ธ‰์ž ํ…Œ์ด๋ธ” | | ๐Ÿ“ˆ **์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ ** | ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์œ„ํ•œ ์˜ตํŠธ์ธ SSE ์ง„ํ–‰ ์ด๋ฒคํŠธ | | ๐Ÿงช **LLM ํ‰๊ฐ€** | 4๊ฐ€์ง€ ๋งค์น˜ ์ „๋žต์„ ์‚ฌ์šฉํ•œ ๊ณจ๋“  ์„ธํŠธ ํ…Œ์ŠคํŠธ | | ๐Ÿ” **์›๊ฒฉ ์ธก์ • ์š”์ฒญ** | p50/p95/p99 ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ง‘๊ณ„ + X-์š”์ฒญ-ID ์ถ”์  | | ๐Ÿ“‹ **๋กœ๊ทธ ๋Œ€์‹œ๋ณด๋“œ** | ํ†ตํ•ฉ๋œ 4๊ฐœ ํƒญ ํŽ˜์ด์ง€: ์š”์ฒญ ๋กœ๊ทธ, ํ”„๋ก์‹œ ๋กœ๊ทธ, ๊ฐ์‚ฌ ๋กœ๊ทธ, ์ฝ˜์†” | | ๐Ÿ–ฅ๏ธ **์ฝ˜์†” ๋กœ๊ทธ ๋ทฐ์–ด** | ๋ ˆ๋ฒจ ํ•„ํ„ฐ, ๊ฒ€์ƒ‰, ์ž๋™ ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์‹ค์‹œ๊ฐ„ ํ„ฐ๋ฏธ๋„ ์Šคํƒ€์ผ ๋ทฐ์–ด | | ๐Ÿ“‘ **ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋กœ๊น…** | ์ฝ˜์†” ์ธํ„ฐ์…‰ํ„ฐ๋Š” ํšŒ์ „์„ ํ†ตํ•ด ๋ชจ๋“  ์ถœ๋ ฅ์„ JSON ๋กœ๊ทธ ํŒŒ์ผ๋กœ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค. | | ๐Ÿฅ **๊ฑด๊ฐ• ๋Œ€์‹œ๋ณด๋“œ** | ์‹œ์Šคํ…œ ๊ฐ€๋™ ์‹œ๊ฐ„, ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ, ์ž ๊ธˆ, ์บ์‹œ ํ†ต๊ณ„ | | ๐Ÿ’ฐ **๋น„์šฉ ์ถ”์ ** | ์˜ˆ์‚ฐ ๊ด€๋ฆฌ + ๋ชจ๋ธ๋ณ„ ๊ฐ€๊ฒฉ ๊ตฌ์„ฑ | ### โ˜๏ธ ๋ฐฐํฌ ๋ฐ ๋™๊ธฐํ™” | ๊ธฐ๋Šฅ | ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ | | ---------------------------------- | ----------------------------------------------------------------- | | ๐Ÿ’พ **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™”** | Cloudflare Workers๋ฅผ ํ†ตํ•ด ์žฅ์น˜ ๊ฐ„ ๊ตฌ์„ฑ ๋™๊ธฐํ™” | | ๐ŸŒ **์–ด๋””์„œ๋‚˜ ๋ฐฐํฌ** | ๋กœ์ปฌํ˜ธ์ŠคํŠธ, VPS, Docker, Cloudflare ์ž‘์—…์ž | | ๐Ÿ”‘ **API ํ‚ค ๊ด€๋ฆฌ** | ๊ณต๊ธ‰์ž๋ณ„ API ํ‚ค ์ƒ์„ฑ, ํšŒ์ „ ๋ฐ ๋ฒ”์œ„ ์ง€์ • | | ๐Ÿง™ **์˜จ๋ณด๋”ฉ ๋งˆ๋ฒ•์‚ฌ** | ์ฒ˜์Œ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ 4๋‹จ๊ณ„ ์•ˆ๋‚ด ์„ค์ • | | ๐Ÿ”ง **CLI ๋„๊ตฌ ๋Œ€์‹œ๋ณด๋“œ** | ์›ํด๋ฆญ ๊ตฌ์„ฑ Claude, Codex, Cline, OpenClaw, Kilo, Antigravity | | ๐Ÿ”„ **DB ๋ฐฑ์—…** | ๋ชจ๋“  ์„ค์ •์— ๋Œ€ํ•œ ์ž๋™ ๋ฐฑ์—…, ๋ณต์›, ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ | | ๐ŸŒ **๊ตญ์ œํ™”** | next-intl์ด ํฌํ•จ๋œ ์ „์ฒด i18n โ€” ์˜์–ด + ํฌ๋ฅดํˆฌ๊ฐˆ์–ด(๋ธŒ๋ผ์งˆ) ์ง€์› | | ๐ŸŒ **์–ธ์–ด ์„ ํƒ๊ธฐ** | ์‹ค์‹œ๊ฐ„ ์–ธ์–ด ์ „ํ™˜์„ ์œ„ํ•œ ํ—ค๋”์˜ ์ง€๊ตฌ๋ณธ ์•„์ด์ฝ˜(๐Ÿ‡บ๐Ÿ‡ธ/๐Ÿ‡ง๐Ÿ‡ท) | | ๐Ÿ“‚ **์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ** | `DATA_DIR` env var๋Š” ๊ธฐ๋ณธ `~/.omniroute` ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค |
๐Ÿ“– ๊ธฐ๋Šฅ ์„ธ๋ถ€์ •๋ณด ### ๐ŸŽฏ ์Šค๋งˆํŠธ 4๊ณ„์ธต ํด๋ฐฑ ์ž๋™ ๋Œ€์ฒด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝค๋ณด ๋งŒ๋“ค๊ธฐ: ``` Combo: "my-coding-stack" 1. cc/claude-opus-4-6 (your subscription) 2. nvidia/llama-3.3-70b (free NVIDIA API) 3. glm/glm-4.7 (cheap backup, $0.6/1M) 4. if/kimi-k2-thinking (free fallback) โ†’ Auto switches when quota runs out or errors occur ``` ### ๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ์ถ”์  - ์ œ๊ณต์ž๋ณ„ ํ† ํฐ ์†Œ๋น„ - ์นด์šดํŠธ๋‹ค์šด ์žฌ์„ค์ •(5์‹œ๊ฐ„, ๋งค์ผ, ๋งค์ฃผ) - ์œ ๋ฃŒ ๊ณ„์ธต์— ๋Œ€ํ•œ ๋น„์šฉ ์ถ”์ • - ์›”๋ณ„ ์ง€์ถœ ๋ณด๊ณ ์„œ ### ๐Ÿ”„ ํ˜•์‹ ๋ฒˆ์—ญ ํ˜•์‹ ๊ฐ„ ์›ํ™œํ•œ ๋ฒˆ์—ญ: - **OpenAI** โ† **Claude** โ† **Gemini** โ† **OpenAI ์‘๋‹ต** - CLI ๋„๊ตฌ๊ฐ€ OpenAI ํ˜•์‹ ์ „์†ก โ†’ OmniRoute ๋ณ€ํ™˜ โ†’ ๊ณต๊ธ‰์ž๊ฐ€ ๊ธฐ๋ณธ ํ˜•์‹ ์ˆ˜์‹  - ๋งž์ถคํ˜• OpenAI ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์ž‘๋™ - **์‘๋‹ต ์‚ญ์ œ** โ€” ์—„๊ฒฉํ•œ OpenAI SDK ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋น„ํ‘œ์ค€ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. - **์—ญํ•  ์ •๊ทœํ™”** โ€” OpenAI๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ `developer` โ†’ `system`; `system` โ†’ GLM/ERNIE ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ `user` - **์‚ฌ๊ณ  ํƒœ๊ทธ ์ถ”์ถœ** โ€” ์‚ฌ๊ณ  ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ `` ๋ธ”๋ก โ†’ `reasoning_content` - **๊ตฌ์กฐํ™”๋œ ์ถœ๋ ฅ** โ€” `json_schema` โ†’ Gemini์˜ `responseMimeType`/`responseSchema` ### ๐Ÿ‘ฅ ๋‹ค์ค‘ ๊ณ„์ • ์ง€์› - ๊ณต๊ธ‰์ž๋‹น ์—ฌ๋Ÿฌ ๊ณ„์ • ์ถ”๊ฐ€ - ์ž๋™ ๋ผ์šด๋“œ ๋กœ๋นˆ ๋˜๋Š” ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… - ํ•œ ๊ณ„์ •์ด ํ• ๋‹น๋Ÿ‰์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์Œ ๊ณ„์ •์œผ๋กœ ๋Œ€์ฒด ### ๐Ÿ”„ ์ž๋™ ํ† ํฐ ์ƒˆ๋กœ๊ณ ์นจ - OAuth ํ† ํฐ์€ ๋งŒ๋ฃŒ๋˜๊ธฐ ์ „์— ์ž๋™์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์ณ์ง‘๋‹ˆ๋‹ค. - ์ˆ˜๋™ ์žฌ์ธ์ฆ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - ๋ชจ๋“  ์ œ๊ณต์—…์ฒด์— ๊ฑธ์นœ ์›ํ™œํ•œ ๊ฒฝํ—˜ ### ๐ŸŽจ ๋งž์ถค ์ฝค๋ณด - ๋ฌด์ œํ•œ ๋ชจ๋ธ ์กฐํ•ฉ ์ƒ์„ฑ - 6๊ฐ€์ง€ ์ „๋žต: ์ฑ„์šฐ๊ธฐ ์šฐ์„ , ๋ผ์šด๋“œ ๋กœ๋นˆ, ๋‘ ๊ฐ€์ง€ ์„ ํƒ์˜ ํž˜, ๋ฌด์ž‘์œ„, ์ตœ์†Œ ์‚ฌ์šฉ, ๋น„์šฉ ์ตœ์ ํ™” - Cloud Sync๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ธฐ๊ธฐ์—์„œ ์ฝค๋ณด๋ฅผ ๊ณต์œ ํ•˜์„ธ์š” ### ๐Ÿฅ ๊ฑด๊ฐ• ๋Œ€์‹œ๋ณด๋“œ - ์‹œ์Šคํ…œ ์ƒํƒœ(๊ฐ€๋™ ์‹œ๊ฐ„, ๋ฒ„์ „, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰) - ๊ณต๊ธ‰์ž๋ณ„ ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ ์ƒํƒœ(Closed/Open/Half-Open) - ์†๋„ ์ œํ•œ ์ƒํƒœ ๋ฐ ํ™œ์„ฑ ์ž ๊ธˆ - ์„œ๋ช… ์บ์‹œ ํ†ต๊ณ„ - ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์›๊ฒฉ ์ธก์ •(p50/p95/p99) + ํ”„๋กฌํ”„ํŠธ ์บ์‹œ - ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๊ฑด๊ฐ• ์ƒํƒœ ์žฌ์„ค์ • ### ๐Ÿ”ง ๋ฒˆ์—ญ๊ธฐ ๋†€์ดํ„ฐ OmniRoute์—๋Š” API ๋ฒˆ์—ญ ๋””๋ฒ„๊น…, ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ **4๊ฐ€์ง€ ๋ชจ๋“œ**๋ฅผ ๊ฐ–์ถ˜ ๊ฐ•๋ ฅํ•œ ๋‚ด์žฅ ๋ฒˆ์—ญ๊ธฐ ํ”Œ๋ ˆ์ด๊ทธ๋ผ์šด๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. | ๋ชจ๋“œ | ์„ค๋ช… | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **๐Ÿ’ป ๋†€์ดํ„ฐ** | ์ง์ ‘ ํ˜•์‹ ๋ณ€ํ™˜ โ€” API ์š”์ฒญ ๋ณธ๋ฌธ์„ ๋ถ™์—ฌ๋„ฃ๊ณ  OmniRoute๊ฐ€ ๊ณต๊ธ‰์ž ํ˜•์‹(OpenAI โ† Claude โ† Gemini โ† Responses API) ๊ฐ„์— ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š”์ง€ ์ฆ‰์‹œ ํ™•์ธํ•˜์„ธ์š”. ์˜ˆ์ œ ํ…œํ”Œ๋ฆฟ๊ณผ ํ˜•์‹ ์ž๋™ ๊ฐ์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. | | **๐Ÿ’ฌ ์ฑ„ํŒ… ํ…Œ์Šคํ„ฐ** | OmniRoute๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์ฑ„ํŒ… ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์ „์ฒด ์™•๋ณต(์ž…๋ ฅ, ๋ฒˆ์—ญ๋œ ์š”์ฒญ, ๊ณต๊ธ‰์ž ์‘๋‹ต, ๋ฒˆ์—ญ๋œ ์‘๋‹ต)์„ ํ™•์ธํ•˜์„ธ์š”. ์ฝค๋ณด ๋ผ์šฐํŒ…์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. | | **๐Ÿงช ํ…Œ์ŠคํŠธ ๋ฒค์น˜** | ๋ฐฐ์น˜ ํ…Œ์ŠคํŠธ ๋ชจ๋“œ โ€” ์„œ๋กœ ๋‹ค๋ฅธ ์ž…๋ ฅ๊ณผ ์˜ˆ์ƒ ์ถœ๋ ฅ์œผ๋กœ ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ๋ชจ๋‘ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ณ , ๊ณต๊ธ‰์ž์™€ ๋ชจ๋ธ ๊ฐ„์— ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. | | **๐Ÿ“ฑ ๋ผ์ด๋ธŒ ๋ชจ๋‹ˆํ„ฐ** | ์‹ค์‹œ๊ฐ„ ์š”์ฒญ ๋ชจ๋‹ˆํ„ฐ๋ง โ€” OmniRoute๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ๊ฐ์‹œํ•˜๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ํ˜•์‹ ๋ณ€ํ™˜์„ ํ™•์ธํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ์ฆ‰์‹œ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. | **์•ก์„ธ์Šค:** ๋Œ€์‹œ๋ณด๋“œ โ†’ ๋ฒˆ์—ญ๊ธฐ(์‚ฌ์ด๋“œ๋ฐ”) ### ๐Ÿ’พ ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” - ์—ฌ๋Ÿฌ ์žฅ์น˜์—์„œ ๊ณต๊ธ‰์ž, ์ฝค๋ณด ๋ฐ ์„ค์ •์„ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - ์ž๋™ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™๊ธฐํ™” - ์•ˆ์ „ํ•œ ์•”ํ˜ธํ™” ์ €์žฅ
## ๐Ÿงช ํ‰๊ฐ€(Evals) OmniRoute์—๋Š” ๊ณจ๋“  ์„ธํŠธ์— ๋Œ€ํ•ด LLM ์‘๋‹ต ํ’ˆ์งˆ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ํ‰๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์˜ **๋ถ„์„ โ†’ ํ‰๊ฐ€**๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•˜์„ธ์š”. ### ๋‚ด์žฅ ๊ณจ๋“  ์„ธํŠธ ์‚ฌ์ „ ๋กœ๋“œ๋œ "OmniRoute Golden Set"์—๋Š” ๋‹ค์Œ์„ ๋‹ค๋ฃจ๋Š” 10๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. - ์ธ์‚ฌ๋ง, ์ˆ˜ํ•™, ์ง€๋ฆฌ, ์ฝ”๋“œ ์ƒ์„ฑ - JSON ํ˜•์‹ ์ค€์ˆ˜, ๋ฒˆ์—ญ, ๋งˆํฌ๋‹ค์šด - ์•ˆ์ „ ๊ฑฐ๋ถ€(์œ ํ•ด ์ฝ˜ํ…์ธ ), ์นด์šดํŒ…, ๋ถ€์šธ ๋…ผ๋ฆฌ ### ํ‰๊ฐ€ ์ „๋žต | ์ „๋žต | ์„ค๋ช… | ์˜ˆ | | ---------- | -------------------------------------------------------------- | -------------------------------- | | `exact` | ์ถœ๋ ฅ์€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค | `"4"` | | `contains` | ์ถœ๋ ฅ์—๋Š” ํ•˜์œ„ ๋ฌธ์ž์—ด(๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆ ํ•จ)์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. | `"Paris"` | | `regex` | ์ถœ๋ ฅ์€ ์ •๊ทœ์‹ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค | `"1.*2.*3"` | | `custom` | ์‚ฌ์šฉ์ž ์ •์˜ JS ํ•จ์ˆ˜๊ฐ€ true/false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. | `(output) => output.length > 10` | --- ## ๐Ÿ“– ์„ค์ • ๊ฐ€์ด๋“œ
๐Ÿ’ณ ๊ตฌ๋… ์ œ๊ณต์—…์ฒด ### ํด๋กœ๋“œ ์ฝ”๋“œ(Pro/Max) ```bash Dashboard โ†’ Providers โ†’ Connect Claude Code โ†’ OAuth login โ†’ Auto token refresh โ†’ 5-hour + weekly quota tracking Models: cc/claude-opus-4-6 cc/claude-sonnet-4-5-20250929 cc/claude-haiku-4-5-20251001 ``` **ํ”„๋กœ ํŒ:** ๋ณต์žกํ•œ ์ž‘์—…์—๋Š” Opus๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์†๋„๋ฅผ ๋†’์ด๋ ค๋ฉด Sonnet์„ ์‚ฌ์šฉํ•˜์„ธ์š”. OmniRoute๋Š” ๋ชจ๋ธ๋‹น ํ• ๋‹น๋Ÿ‰์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค! ### OpenAI ์ฝ”๋ฑ์Šค(Plus/Pro) ```bash Dashboard โ†’ Providers โ†’ Connect Codex โ†’ OAuth login (port 1455) โ†’ 5-hour + weekly reset Models: cx/gpt-5.2-codex cx/gpt-5.1-codex-max ``` ### Gemini CLI(์›” 180,000 ๋ฌด๋ฃŒ!) ```bash Dashboard โ†’ Providers โ†’ Connect Gemini CLI โ†’ Google OAuth โ†’ 180K completions/month + 1K/day Models: gc/gemini-3-flash-preview gc/gemini-2.5-pro ``` **์ตœ๊ณ ์˜ ๊ฐ€์น˜:** ์—„์ฒญ๋‚œ ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰! ์œ ๋ฃŒ ๋“ฑ๊ธ‰ ์ด์ „์— ์‚ฌ์šฉํ•˜์„ธ์š”. ### GitHub ์ฝ”ํŒŒ์ผ๋Ÿฟ ```bash Dashboard โ†’ Providers โ†’ Connect GitHub โ†’ OAuth via GitHub โ†’ Monthly reset (1st of month) Models: gh/gpt-5 gh/claude-4.5-sonnet gh/gemini-3-pro ```
๐Ÿ”‘ API ํ‚ค ์ œ๊ณต์ž ### NVIDIA NIM(๋ฌด๋ฃŒ 1000 ํฌ๋ ˆ๋”ง!) 1. ๊ฐ€์ž…: [build.nvidia.com](https://build.nvidia.com) 2. ๋ฌด๋ฃŒ API ํ‚ค ๋ฐ›๊ธฐ(1000 ์ถ”๋ก  ํฌ๋ ˆ๋”ง ํฌํ•จ) 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ NVIDIA NIM: - API ํ‚ค: `nvapi-your-key` **๋ชจ๋ธ:** `nvidia/llama-3.3-70b-instruct`, `nvidia/mistral-7b-instruct` ์™ธ 50๊ฐœ ์ด์ƒ **ํ”„๋กœ ํŒ:** OpenAI ํ˜ธํ™˜ API โ€” OmniRoute์˜ ํ˜•์‹ ๋ณ€ํ™˜๊ณผ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ### ๋”ฅ์‹œํฌ 1. ๊ฐ€์ž…: [platform.deepseek.com](https://platform.deepseek.com) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ DeepSeek **๋ชจ๋ธ:** `deepseek/deepseek-chat`, `deepseek/deepseek-coder` ### Groq(๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!) 1. ๊ฐ€์ž…: [console.groq.com](https://console.groq.com) 2. API ํ‚ค ๋ฐ›๊ธฐ(๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ํฌํ•จ) 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ Groq **๋ชจ๋ธ:** `groq/llama-3.3-70b`, `groq/mixtral-8x7b` **ํ”„๋กœ ํŒ:** ์ดˆ๊ณ ์† ์ถ”๋ก  โ€” ์‹ค์‹œ๊ฐ„ ์ฝ”๋”ฉ์— ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค! ### OpenRouter(100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ) 1. ๊ฐ€์ž…: [openrouter.ai](https://openrouter.ai) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž ์ถ”๊ฐ€ โ†’ OpenRouter **๋ชจ๋ธ:** ๋‹จ์ผ API ํ‚ค๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ฃผ์š” ์ œ๊ณต์—…์ฒด์˜ 100๊ฐœ ์ด์ƒ์˜ ๋ชจ๋ธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ’ฐ ์ €๋ ดํ•œ ๊ณต๊ธ‰์ž(๋ฐฑ์—…) ### GLM-4.7 (์ผ์ผ ์žฌ์„ค์ •, $0.6/1M) 1. ๊ฐ€์ž…: [Zhipu AI](https://open.bigmodel.cn/) 2. Coding Plan์—์„œ API Key ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API ํ‚ค ์ถ”๊ฐ€: - ์ œ๊ณต์ž: `glm` - API ํ‚ค: `your-key` **์‚ฌ์šฉ:** `glm/glm-4.7` **ํ”„๋กœ ํŒ:** ์ฝ”๋”ฉ ๊ณ„ํš์€ 1/7 ๋น„์šฉ์œผ๋กœ 3๋ฐฐ ํ• ๋‹น๋Ÿ‰์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค! ๋งค์ผ ์˜ค์ „ 10์‹œ์— ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ### MiniMax M2.1(5์‹œ๊ฐ„ ์žฌ์„ค์ •, $0.20/1M) 1. ๊ฐ€์ž…: [MiniMax](https://www.minimax.io/) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API Key ์ถ”๊ฐ€ **์‚ฌ์šฉ:** `minimax/MiniMax-M2.1` **ํ”„๋กœ ํŒ:** ๊ธด ์ปจํ…์ŠคํŠธ(100๋งŒ ํ† ํฐ)๋ฅผ ์œ„ํ•œ ๊ฐ€์žฅ ์ €๋ ดํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค! ### Kimi K2($9/์›” ์ •์•ก) 1. ๊ตฌ๋…: [Moonshot AI](https://platform.moonshot.ai/) 2. API ํ‚ค ๋ฐ›๊ธฐ 3. ๋Œ€์‹œ๋ณด๋“œ โ†’ API Key ์ถ”๊ฐ€ **์‚ฌ์šฉ:** `kimi/kimi-latest` **ํ”„๋กœ ํŒ:** 1,000๋งŒ ํ† ํฐ์— ๋Œ€ํ•ด ๊ณ ์ • $9/์›” = $0.90/1M ์œ ํšจ ๋น„์šฉ!
๐Ÿ†“ ๋ฌด๋ฃŒ ์ œ๊ณต์—…์ฒด(๊ธด๊ธ‰ ๋ฐฑ์—…) ### iFlow(8๊ฐœ ๋ฌด๋ฃŒ ๋ชจ๋ธ) ```bash Dashboard โ†’ Connect iFlow โ†’ iFlow OAuth login โ†’ Unlimited usage Models: if/kimi-k2-thinking if/qwen3-coder-plus if/glm-4.7 if/minimax-m2 if/deepseek-r1 ``` ### Qwen(3๊ฐœ ๋ฌด๋ฃŒ ๋ชจ๋ธ) ```bash Dashboard โ†’ Connect Qwen โ†’ Device code authorization โ†’ Unlimited usage Models: qw/qwen3-coder-plus qw/qwen3-coder-flash ``` ### ํ‚ค๋กœ(ํด๋กœ๋“œ ํ”„๋ฆฌ) ```bash Dashboard โ†’ Connect Kiro โ†’ AWS Builder ID or Google/GitHub โ†’ Unlimited usage Models: kr/claude-sonnet-4.5 kr/claude-haiku-4.5 ```
๐ŸŽจ ์ฝค๋ณด ๋งŒ๋“ค๊ธฐ ### ์˜ˆ์‹œ 1: ๊ตฌ๋… ์ตœ๋Œ€ํ™” โ†’ ์ €๋ ดํ•œ ๋ฐฑ์—… ``` Dashboard โ†’ Combos โ†’ Create New Name: premium-coding Models: 1. cc/claude-opus-4-6 (Subscription primary) 2. glm/glm-4.7 (Cheap backup, $0.6/1M) 3. minimax/MiniMax-M2.1 (Cheapest fallback, $0.20/1M) Use in CLI: premium-coding ``` ### ์˜ˆ์‹œ 2: ๋ฌด๋ฃŒ ์ „์šฉ(๋น„์šฉ ์—†์Œ) ``` Name: free-combo Models: 1. gc/gemini-3-flash-preview (180K free/month) 2. if/kimi-k2-thinking (unlimited) 3. qw/qwen3-coder-plus (unlimited) Cost: $0 forever! ```
๐Ÿ”ง CLI ํ†ตํ•ฉ ### ์ปค์„œ IDE ``` Settings โ†’ Models โ†’ Advanced: OpenAI API Base URL: http://localhost:20128/v1 OpenAI API Key: [from OmniRoute dashboard] Model: cc/claude-opus-4-6 ``` ### ํด๋กœ๋“œ ์ฝ”๋“œ ์›ํด๋ฆญ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ๋Œ€์‹œ๋ณด๋“œ์˜ **CLI ๋„๊ตฌ** ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ `~/.claude/settings.json`์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์„ธ์š”. ### ์ฝ”๋ฑ์Šค CLI ```bash export OPENAI_BASE_URL="http://localhost:20128" export OPENAI_API_KEY="your-omniroute-api-key" codex "your prompt" ``` ### ์˜คํ”ˆํด๋กœ **์˜ต์…˜ 1 - ๋Œ€์‹œ๋ณด๋“œ(๊ถŒ์žฅ):** ``` Dashboard โ†’ CLI Tools โ†’ OpenClaw โ†’ Select Model โ†’ Apply ``` **์˜ต์…˜ 2 โ€” ์ˆ˜๋™:** `~/.openclaw/openclaw.json` ํŽธ์ง‘: ```json { "models": { "providers": { "omniroute": { "baseUrl": "http://127.0.0.1:20128/v1", "apiKey": "sk_omniroute", "api": "openai-completions" } } } } ``` > **์ฐธ๊ณ :** OpenClaw๋Š” ๋กœ์ปฌ OmniRoute์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. IPv6 ํ™•์ธ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด `localhost` ๋Œ€์‹  `127.0.0.1`์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ### ํด๋ผ์ธ / ๊ณ„์† / RooCode ``` Settings โ†’ API Configuration: Provider: OpenAI Compatible Base URL: http://localhost:20128/v1 API Key: [from OmniRoute dashboard] Model: if/kimi-k2-thinking ```
--- ## ๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ
๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉด ํด๋ฆญํ•˜์„ธ์š” **"์–ธ์–ด ๋ชจ๋ธ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค"** - ๊ณต๊ธ‰์ž ํ• ๋‹น๋Ÿ‰ ์†Œ์ง„ โ†’ ๋Œ€์‹œ๋ณด๋“œ ํ• ๋‹น๋Ÿ‰ ์ถ”์ ๊ธฐ ํ™•์ธ - ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ฝค๋ณด ํด๋ฐฑ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋” ์ €๋ ดํ•œ ๊ณ„์ธต์œผ๋กœ ์ „ํ™˜ํ•˜์„ธ์š”. **๋น„์œจ ์ œํ•œ** - ๊ตฌ๋… ํ• ๋‹น๋Ÿ‰ ์ดˆ๊ณผ โ†’ GLM/MiniMax๋กœ ๋Œ€์ฒด - ์ฝค๋ณด ์ถ”๊ฐ€: `cc/claude-opus-4-6 โ†’ glm/glm-4.7 โ†’ if/kimi-k2-thinking` **OAuth ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค** - OmniRoute์— ์˜ํ•ด ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ - ๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋Š” ๊ฒฝ์šฐ: Dashboard โ†’ Provider โ†’ Reconnect **๋†’์€ ๋น„์šฉ** - ๋Œ€์‹œ๋ณด๋“œ โ†’ ๋น„์šฉ์—์„œ ์‚ฌ์šฉ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜์„ธ์š”. - ๊ธฐ๋ณธ ๋ชจ๋ธ์„ GLM/MiniMax๋กœ ์ „ํ™˜ - ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์ž‘์—…์—๋Š” ๋ฌด๋ฃŒ ๊ณ„์ธต(Gemini CLI, iFlow)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. **๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์ž˜๋ชป๋œ ํฌํŠธ์—์„œ ์—ด๋ฆฝ๋‹ˆ๋‹ค** - `PORT=20128` ๋ฐ `NEXT_PUBLIC_BASE_URL=http://localhost:20128` ์„ค์ • **ํด๋ผ์šฐ๋“œ ๋™๊ธฐํ™” ์˜ค๋ฅ˜** - `BASE_URL`์ด ์‹คํ–‰ ์ค‘์ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. - `CLOUD_URL`์ด ์˜ˆ์ƒ ํด๋ผ์šฐ๋“œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. - `NEXT_PUBLIC_*` ๊ฐ’์„ ์„œ๋ฒ„์ธก ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋„๋ก ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. **์ฒซ ๋ฒˆ์งธ ๋กœ๊ทธ์ธ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค** - `.env`์—์„œ `INITIAL_PASSWORD`์„ ํ™•์ธํ•˜์„ธ์š”. - ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋Œ€์ฒด ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” `123456`์ž…๋‹ˆ๋‹ค. **์š”์ฒญ ๋กœ๊ทธ ์—†์Œ** - `.env`์— `ENABLE_REQUEST_LOGS=true`์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. **OpenAI ํ˜ธํ™˜ ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ์—์„œ "์ž˜๋ชป๋จ"์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค** - ๋งŽ์€ ๊ณต๊ธ‰์ž๊ฐ€ `/models` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋…ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. - OmniRoute v1.0.6+์—๋Š” ์ฑ„ํŒ… ์™„๋ฃŒ๋ฅผ ํ†ตํ•œ ๋Œ€์ฒด ๊ฒ€์ฆ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. - ๊ธฐ๋ณธ URL์— `/v1` ์ ‘๋ฏธ์‚ฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ### ๐Ÿ” OAuth > **โš ๏ธ VPS/Docker/remotor์˜ OmniRoute๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘์š”** ### OAuth Os๋Š” **๋ฐ˜์ค‘๋ ฅ** ๋ฐ **Gemini CLI**๋ฅผ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด **Google OAuth 2.0**์„ ์ž…์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. O Google exige que a `redirect_uri` usada no fluxo OAuth seja **exatamente** uma das URIs pre-cadastradas no Google Cloud Console do aplicativo. OAuth๋Š” OmniRoute์— ๋Œ€ํ•œ ์‹ ์šฉ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ **`localhost`**์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. Quando vocรช acessa o OmniRoute em um servidor remoto (์˜ˆ: `https://omniroute.meuservidor.com`), o Google rejeita autenticaรงรฃo com: ``` Error 400: redirect_uri_mismatch ``` ### ํ•ด๊ฒฐ์ฑ…: ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ OAuth ๊ตฌ์„ฑ Vocรช precisa criar um **OAuth 2.0 Client ID** no Google Cloud Console com a URI do seu servidor. #### ํŒŒ์˜ ์•„ ํŒŒ์†Œ **1. Google Cloud Console์— ์•ก์„ธ์Šค** ์•„๋ธŒ๋ผ: [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials) **2. Crie um novo OAuth 2.0 ํด๋ผ์ด์–ธํŠธ ID** - em ํด๋ฆญ **"+ ์ž๊ฒฉ ์ฆ๋ช… ๋งŒ๋“ค๊ธฐ"** โ†’ **"OAuth ํด๋ผ์ด์–ธํŠธ ID"** - ์ ์šฉ ๋ถ„์•ผ: **"์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜"** - ์ด๋ฆ„: escolha qualquer nome (์˜ˆ: `OmniRoute Remote`) **3. ์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI๋กœ์„œ์˜ Adicione** ์•„๋‹ˆ์š” **"์Šน์ธ๋œ ๋ฆฌ๋””๋ ‰์…˜ URI"**, ์ถ”๊ฐ€: ``` https://seu-servidor.com/callback ``` > `seu-servidor.com` pelo domรญnio ๋˜๋Š” IP do seu servidor๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ํฌํŠธ ํฌํ•จ, ์˜ˆ: `http://45.33.32.156:20128/callback`). **4. ์‚ฌ๋ณธ์„ ์ž๊ฒฉ ์ฆ๋ช…์œผ๋กœ ์ €์žฅ** Apรณs criar, o Google morerรก o **ํด๋ผ์ด์–ธํŠธ ID** e o **ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ**. **5. ๋‹ค์–‘ํ•œ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ์„ฑ** `.env`(Docker์˜ ์ฃผ๋ณ€ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)์ด ์—†์Šต๋‹ˆ๋‹ค. ```bash # Para Antigravity: ANTIGRAVITY_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com ANTIGRAVITY_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret # Para Gemini CLI: GEMINI_OAUTH_CLIENT_ID=seu-client-id.apps.googleusercontent.com GEMINI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret GEMINI_CLI_OAUTH_CLIENT_SECRET=GOCSPX-seu-secret ``` **6. Reinicie ๋˜๋Š” OmniRoute** ```bash # Se usando npm: npm run dev # Se usando Docker: docker restart omniroute ``` **7. Tente conectar novamente** ๋Œ€์‹œ๋ณด๋“œ โ†’ ๊ณต๊ธ‰์ž โ†’ Antigravity(๋˜๋Š” Gemini CLI) โ†’ OAuth Agora๋Š” `https://seu-servidor.com/callback` ๋ฐ ์ž๋™ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ Google ๋ฆฌ๋””๋ ‰์…˜์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. --- ### ์ž„์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(sem configurar credenciais prรณprias) Se nรฃo quiser criar credenciais prรณprias agora, ainda รฉ possรญvel usar o fluxo **manual de URL**: 1. OmniRoute๋Š” Google ์ž๋™ ์ƒ์„ฑ URL์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 2. Apรณs vocรช autorizar, o Google tentarรก redirectionar para `localhost` (que falha no servidor remoto) 3. **URL ๋ณต์‚ฌ ์™„๋ฃŒ** da barra de endereรงo do seu browser (mesmo que a pรกgina nรฃo carregue) 4. Cole essa URL no campo que aparece no modal de conexรฃo do OmniRoute 5. Clique em **"์—ฐ๊ฒฐ"** > ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ URL์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
--- ## ๐Ÿ› ๏ธ - **๋Ÿฐํƒ€์ž„**: Node.js 18โ€“22 LTS(โš ๏ธ Node.js 24+๋Š” **์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค** โ€” `better-sqlite3` ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค) - **์–ธ์–ด**: TypeScript 5.9 โ€” `src/` ๋ฐ `open-sse/`์—์„œ **100% TypeScript**(v1.0.6) - **ํ”„๋ ˆ์ž„์›Œํฌ**: Next.js 16 + React 19 + Tailwind CSS 4 - **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค**: LowDB(JSON) + SQLite(๋„๋ฉ”์ธ ์ƒํƒœ + ํ”„๋ก์‹œ ๋กœ๊ทธ) - **์ŠคํŠธ๋ฆฌ๋ฐ**: ์„œ๋ฒ„์—์„œ ๋ณด๋‚ธ ์ด๋ฒคํŠธ(SSE) - **์ธ์ฆ**: OAuth 2.0(PKCE) + JWT + API ํ‚ค - **ํ…Œ์ŠคํŠธ**: Node.js ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ธฐ(368๊ฐœ ์ด์ƒ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ) - **CI/CD**: GitHub Actions(์ž๋™ npm ๊ฒŒ์‹œ + ์ถœ์‹œ ์‹œ Docker Hub) - **์›น์‚ฌ์ดํŠธ**: [omniroute.online](https://omniroute.online) - **ํŒจํ‚ค์ง€**: [npmjs.com/package/omniroute](https://www.npmjs.com/package/omniroute) - **๋„์ปค**: [hub.docker.com/r/diegosouzapw/omniroute](https://hub.docker.com/r/diegosouzapw/omniroute) - **๋ณต์›๋ ฅ**: ํšŒ๋กœ ์ฐจ๋‹จ๊ธฐ, ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„, ์ฒœ๋‘ฅ ๋ฐฉ์ง€ ๋ฌด๋ฆฌ, TLS ์Šคํ‘ธํ•‘ --- ## ๐Ÿ“– ๋ฌธ์„œ | ๋ฌธ์„œ | ์„ค๋ช… | | -------------------------------------------- | ------------------------------------------ | | [User Guide](docs/USER_GUIDE.md) | ๊ณต๊ธ‰์ž, ์ฝค๋ณด, CLI ํ†ตํ•ฉ, ๋ฐฐํฌ | | [API Reference](docs/API_REFERENCE.md) | ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ | | [Troubleshooting](docs/TROUBLESHOOTING.md) | ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ ๋ฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• | | [Architecture](docs/ARCHITECTURE.md) | ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋‚ด๋ถ€ | | [Contributing](CONTRIBUTING.md) | ๊ฐœ๋ฐœ ์„ค์ • ๋ฐ ์ง€์นจ | | [OpenAPI Spec](docs/openapi.yaml) | OpenAPI 3.0 ์‚ฌ์–‘ | | [Security Policy](SECURITY.md) | ์ทจ์•ฝ์  ๋ณด๊ณ  ๋ฐ ๋ณด์•ˆ ๊ด€ํ–‰ | | [VM Deployment](docs/VM_DEPLOYMENT_GUIDE.md) | ์ „์ฒด ๊ฐ€์ด๋“œ: VM + nginx + Cloudflare ์„ค์ • | | [Features Gallery](docs/FEATURES.md) | ์Šคํฌ๋ฆฐ์ƒท์„ ํฌํ•จํ•œ ์‹œ๊ฐ์  ๋Œ€์‹œ๋ณด๋“œ ๋‘˜๋Ÿฌ๋ณด๊ธฐ | ### ๐Ÿ“ธ ๋Œ€์‹œ๋ณด๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
๋Œ€์‹œ๋ณด๋“œ ์Šคํฌ๋ฆฐ์ƒท์„ ๋ณด๋ ค๋ฉด ํด๋ฆญํ•˜์„ธ์š”. | ํŽ˜์ด์ง€ | ์Šคํฌ๋ฆฐ์ƒท | | -------------- | ------------------------------------------------- | | **๊ณต๊ธ‰์ž** | ![Providers](docs/screenshots/01-providers.png) | | **์ฝค๋ณด** | ![Combos](docs/screenshots/02-combos.png) | | **๋ถ„์„** | ![Analytics](docs/screenshots/03-analytics.png) | | **๊ฑด๊ฐ•** | ![Health](docs/screenshots/04-health.png) | | **๋ฒˆ์—ญ๊ฐ€** | ![Translator](docs/screenshots/05-translator.png) | | **์„ค์ •** | ![Settings](docs/screenshots/06-settings.png) | | **CLI ๋„๊ตฌ** | ![CLI Tools](docs/screenshots/07-cli-tools.png) | | **์‚ฌ์šฉ ๋กœ๊ทธ** | ![Usage](docs/screenshots/08-usage.png) | | **์—”๋“œํฌ์ธํŠธ** | ![Endpoint](docs/screenshots/09-endpoint.png) |
--- ## ๐Ÿ—บ๏ธ OmniRoute์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์— ๊ฑธ์ณ **210๊ฐœ ์ด์ƒ์˜ ๊ธฐ๋Šฅ์ด ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค**. ์ฃผ์š” ์˜์—ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. | ์นดํ…Œ๊ณ ๋ฆฌ | ๊ณ„ํš๋œ ๊ธฐ๋Šฅ | ํ•˜์ด๋ผ์ดํŠธ | | --------------------------- | ----------- | ------------------------------------------------------------------------------ | | ๐Ÿง  **๋ผ์šฐํŒ… ๋ฐ ์ธํ…”๋ฆฌ์ „์Šค** | 25์„ธ ์ด์ƒ | ์ตœ์ € ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๋ผ์šฐํŒ…, ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ์‹คํ–‰ ์ „ ํ• ๋‹น๋Ÿ‰, P2C ๊ณ„์ • ์„ ํƒ | | ๐Ÿ”’ **๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜** | 20์„ธ ์ด์ƒ | SSRF ๊ฐ•ํ™”, ์ž๊ฒฉ ์ฆ๋ช… ํด๋กœํ‚น, ์—”๋“œํฌ์ธํŠธ๋‹น ์†๋„ ์ œํ•œ, ๊ด€๋ฆฌ ํ‚ค ๋ฒ”์œ„ ์ง€์ • | | ๐Ÿ“Š **๊ด€์ธก์„ฑ** | 15์„ธ ์ด์ƒ | OpenTelemetry ํ†ตํ•ฉ, ์‹ค์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง, ๋ชจ๋ธ๋ณ„ ๋น„์šฉ ์ถ”์  | | ๐Ÿ”„ **๊ณต๊ธ‰์ž ํ†ตํ•ฉ** | 20์„ธ ์ด์ƒ | ๋™์  ๋ชจ๋ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ, ๊ณต๊ธ‰์ž ์ฟจ๋‹ค์šด, ๋‹ค์ค‘ ๊ณ„์ • Codex, Copilot ํ• ๋‹น๋Ÿ‰ ๊ตฌ๋ฌธ ๋ถ„์„ | | โšก **์„ฑ๋Šฅ** | 15์„ธ ์ด์ƒ | ๋“€์–ผ ์บ์‹œ ๋ ˆ์ด์–ด, ํ”„๋กฌํ”„ํŠธ ์บ์‹œ, ์‘๋‹ต ์บ์‹œ, ์ŠคํŠธ๋ฆฌ๋ฐ Keepalive, ๋ฐฐ์น˜ API | | ๐ŸŒ **์ƒํƒœ๊ณ„** | 10์„ธ ์ด์ƒ | WebSocket API, ๊ตฌ์„ฑ ํ•ซ ๋ฆฌ๋กœ๋“œ, ๋ถ„์‚ฐ ๊ตฌ์„ฑ ์ €์žฅ์†Œ, ์ƒ์šฉ ๋ชจ๋“œ | ### ๐Ÿ”œ ์ถœ์‹œ ์˜ˆ์ • - ๐Ÿ”— **OpenCode ํ†ตํ•ฉ** โ€” OpenCode AI ์ฝ”๋”ฉ IDE์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ณต๊ธ‰์ž ์ง€์› - ๐Ÿ”— **TRAE ํ†ตํ•ฉ** โ€” TRAE AI ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์› - ๐Ÿ“ฆ **Batch API** โ€” ๋Œ€๋Ÿ‰ ์š”์ฒญ์— ๋Œ€ํ•œ ๋น„๋™๊ธฐ์‹ ์ผ๊ด„ ์ฒ˜๋ฆฌ - ๐ŸŽฏ **ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…** โ€” ์‚ฌ์šฉ์ž ์ •์˜ ํƒœ๊ทธ ๋ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ ๋ผ์šฐํŒ… - ๐Ÿ’ฐ **์ตœ์ € ๋น„์šฉ ์ „๋žต** โ€” ๊ฐ€์žฅ ์ €๋ ดํ•œ ์ œ๊ณต์—…์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. > ๐Ÿ“ [link](docs/new-features/)์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ „์ฒด ๊ธฐ๋Šฅ ์‚ฌ์–‘(217๊ฐœ ์„ธ๋ถ€ ์‚ฌ์–‘) --- ## ๐Ÿ‘ฅ ๊ธฐ์—ฌ์ž [![Contributors](https://contrib.rocks/image?repo=diegosouzapw/OmniRoute&max=100&columns=20&anon=1)](https://github.com/diegosouzapw/OmniRoute/graphs/contributors) ### ๊ธฐ์—ฌ ๋ฐฉ๋ฒ• 1. ์ €์žฅ์†Œ ํฌํฌ 2. ๊ธฐ๋Šฅ ๋ถ„๊ธฐ ์ƒ์„ฑ(`git checkout -b feature/amazing-feature`) 3. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค(`git commit -m 'Add amazing feature'`). 4. ๋ธŒ๋žœ์น˜(`git push origin feature/amazing-feature`)๋กœ ํ‘ธ์‹œ 5. ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์—ด๊ธฐ ์ž์„ธํ•œ ์ง€์นจ์€ [CONTRIBUTING.md](CONTRIBUTING.md)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ### ์ƒˆ ๋ฒ„์ „ ์ถœ์‹œ ```bash # Create a release โ€” npm publish happens automatically gh release create v1.0.6 --title "v1.0.6" --generate-notes ``` --- ## ๐Ÿ“Š ์Šคํƒ€ ํžˆ์Šคํ† ๋ฆฌ Star History Chart --- ## ๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง์”€ ์ด ํฌํฌ์— ์˜๊ฐ์„ ์ค€ ์›๋ณธ ํ”„๋กœ์ ํŠธ์ธ **[decolua](https://github.com/decolua)**์˜ **[9router](https://github.com/decolua/9router)**์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. OmniRoute๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ, ๋‹ค์ค‘ ๋ชจ๋“œ API ๋ฐ ์ „์ฒด TypeScript ์žฌ์ž‘์„ฑ์„ ํ†ตํ•ด ๋†€๋ผ์šด ๊ธฐ๋ฐ˜์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ด JavaScript ํฌํŠธ์— ์˜๊ฐ์„ ์ค€ ์ตœ์ดˆ์˜ Go ๊ตฌํ˜„์ธ **[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI)**์—๊ฒŒ ํŠน๋ณ„ํžˆ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. --- ## ๐Ÿ“„ ๋ผ์ด์„ผ์Šค MIT ๋ผ์ด์„ ์Šค - ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE)์„ ์ฐธ์กฐํ•˜์„ธ์š”. ---
์—ฐ์ค‘๋ฌดํœด์„ ์ฝ”๋”ฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด โค๏ธ์œผ๋กœ ๊ตฌ์ถ•๋จ
omniroute.online