TRENDSHIFT DEEP-DIVE · 2026.05.21 · tashfeenahmed/freellmapi

FreeLLMAPI —
16개 무료 LLM 프로바이더를 OpenAI 엔드포인트 하나로

Google·Groq·Cerebras·NVIDIA·Mistral·OpenRouter·GitHub Models·HuggingFace·Cohere·Cloudflare·Zhipu·Ollama·Kilo·Pollinations·LLM7·OVH AI Endpoints 등 16개 프로바이더의 무료 티어를 — 한 개의 /v1/chat/completions 엔드포인트로 통합. 월 ~17억 토큰(~1.7B) 무료. Express + SQLite + React Vite Dashboard. AES-256-GCM 키 암호화. 라우터가 자동 failover. 개인 실험·학습 전용.

0먼저, "왜 이게 매력적인가"부터

단순 무료 키 모음이 아니다 — 진짜 인프라 한 조각이다.

2024~2026 사이 AI 랩들이 — 너도나도 "무료 티어"를 푸는 시대가 됐다. Google AI Studio는 월 수백만 토큰, Groq는 일 1만 요청, GitHub Models는 GPT-4o 일정량. 그런데 — 각각은 장난감 수준이다. 한 프로젝트 돌리기엔 모자라고, 16개를 SDK별로 따로따로 깔고 키 관리하는 건 — 진짜로 고통.

FreeLLMAPI는 그걸 푼다. 16개 프로바이더의 무료 티어를 — "한 OpenAI 호환 엔드포인트"로 합쳐 버린다. 너의 코드는 그대로 openai 라이브러리. base_urlhttp://localhost:3001/v1로. 그러면 — 자기 자신은 모르는 새 16개를 자동으로 돌려가며 쓴다.

합치면 — 월 1.7B+ 토큰. GPT-4o(GitHub), Gemini 2.5 Pro/Flash(Google), Llama 4(Groq), GLM-4(Zhipu), Qwen(Cerebras), Ollama(로컬)... 개인 실험·학습·해커톤·취미 프로젝트에는 차고 넘친다.

용어
OpenAI-Compatible API
OpenAI가 정한 /v1/chat/completions 요청·응답 형식을 따르는 API. 한 번 표준이 된 뒤 — 거의 모든 LLM 프로바이더가 이 형식을 흉내냈다. "base_url만 바꾸면 어디든 붙는다"는 사실상의 산업 표준. FreeLLMAPI도 정확히 이 형식 그대로.
용어
Fallover / Failover (페일오버, 장애 대체)
한 프로바이더가 — 429(Rate Limited)·5xx·timeout으로 실패하면, 라우터가 자동으로 다음 프로바이더로 넘어가는 것. FreeLLMAPI는 최대 20회까지 재시도. 사용자 코드는 — 그냥 한 번의 chat.completions.create 호출.
용어
Rate Limit / RPM·RPD·TPM·TPD
프로바이더가 정한 사용량 한도. RPM(Requests Per Minute), RPD(Per Day), TPM(Tokens Per Minute), TPD(Per Day). FreeLLMAPI는 — 4개 카운터를 키별로 추적해서, 한도 안쪽 키만 라우팅에 후보로.
용어
AES-256-GCM Envelope Encryption
API 키를 디스크에 저장하기 전 — 대칭키 암호화 + 인증 태그로 봉투에 넣는다. SQLite를 누가 훔쳐가도 — ENCRYPTION_KEY(.env) 없이는 키를 못 푼다. 복호화는 메모리에서 — 요청 직전.

1한 줄 요약

전체 글의 핵심 메시지.

한 줄로 말하면

"16개 무료 LLM 키를 모아 — '내 라즈베리파이 안의 OpenAI'를 만드는 라우터"

각 무료 티어는 작다. 하지만 16개를 합치고 — "이 키가 한도 다 차면 다음 키로" 자동 전환만 되면 — 사실상 끊김 없는 LLM 인프라가 된다. 그게 FreeLLMAPI다.

코드는 OpenAI 그대로. base_url 한 줄만 바꾸면 — Python·Node·curl 어느 클라이언트도 그대로 작동. "앱 코드는 OpenAI를 본다고 생각하고 — 인프라는 16개 베이커리". 그래서 LangChain·LlamaIndex·Continue·Hermes도 즉시 호환.

2왜 지금 트렌딩하는가 — 폭발 케이스 분석

별 5개·커밋 1번 레포가 어떻게 TrendShift 13위에 올라왔나.

이 레포는 — "star 5개·fork 1개·커밋 1번"이다. TrendShift는 stars 수가 아니라 momentum(가속도)을 본다. 즉 — 0에서 갑자기 화제가 된 신생 레포가 — 굵직한 레포들 사이로 들어온다. 본 케이스 모멘텀 점수는 92만+. 폭발 이유:

① "월 1.7B 토큰 무료"라는 마법의 숫자. Twitter/HackerNews 헤드라인용으로 너무 매력적이다. 보통 사람은 — "그게 진짜 되는 거야?" 한 번 클릭. 클릭 = 별. 별 = 모멘텀.

② OpenAI 호환이라는 핵심 결정. 새 SDK를 배울 필요가 0. 누가 깔든 — 5분 안에 작동. 그래서 바이럴 친화적.

③ "라즈베리파이에서 돈다"라는 디테일. README에 "Runs happily on a Pi 4 under PM2 behind nginx. ~40 MB RSS at idle." 같이 — 자가호스팅·홈랩 커뮤니티에 정확히 꽂힌다. HackerNews·r/selfhosted·r/LocalLLaMA 동시 진출.

④ ToS 리뷰가 진지하다. "각 프로바이더 ToS를 한 표로 정리 + 위험 평가"가 README에 있다. "이건 진지한 사람이 만든 거다"라는 신호. 사용자 신뢰의 결정타.

3기술 스택 전체 지도

서버·클라이언트·인프라.

3-1. 서버 (Backend)

런타임: Node.js 20+. 웹 프레임워크: Express. DB: SQLite via better-sqlite3(동기 임베디드). 키 암호화: AES-256-GCM (node:crypto). 스트리밍: Server-Sent Events. Provider 어댑터: server/src/providers/*.ts — 6개 파일. 구글·Cohere·Cloudflare는 전용 클래스, 나머지 13개 프로바이더는 openai-compat.tsOpenAICompatProviderindex.ts에서 인스턴스화.

3-2. 클라이언트 (Dashboard)

UI: React + Vite + shadcn/ui. 다크모드 포함. 페이지: Keys(키 관리), Fallback Chain(우선순위 설정), Playground(테스트), Analytics(통계). 개발 시 :5173 — 프로덕션 시 서버가 :3001에서 같이 서빙.

3-3. 데이터 영역

저장: 한 개의 SQLite 파일. 스키마: keys 테이블(plaintext: id·platform·model·status / encrypted: API key), ratelimit ledger 테이블(RPM·RPD·TPM·TPD 카운터), analytics 테이블(요청 로그·토큰·지연·성공률). 유지: 인메모리 카운터 + SQLite 영구화.

3-4. 인프라 — "Pi 4에서 돌아간다"의 의미

외부 의존성 = SQLite 파일 하나 + .env의 ENCRYPTION_KEY. Redis·PostgreSQL·Docker 다 필요 없음. PM2로 백그라운드 실행, nginx로 reverse proxy. ~40MB RAM에 한 라우터가 작동. 일반 Pi 4(4GB)에 — 라우터·홈 어시스턴트·Tailscale 다 깔고도 여유.

3-5. 16개 프로바이더 카탈로그 (2026.06 기준)

[Google]           Gemini 2.5 Pro / 2.5 Flash  — Top tier 추론
[Groq]             Llama 4, Qwen               — 압도적 추론 속도 (수백 tok/sec)
[Cerebras]         Llama 3.3, Qwen             — Wafer-Scale, Groq급 빠름
[NVIDIA NIM]       엔비디아 카탈로그            — 다양한 오픈모델
[Mistral]          La Plateforme               — Mistral Large/Small
[OpenRouter]       Free-tier 모델 모음          — 단일 키로 다수 모델
[GitHub]           GPT-4o / Llama / Phi        — Marketplace 무료
[HuggingFace]      Inference Providers         — 오픈모델 다수
[Cohere]           Command R+ (trial)          — ⚠️ ToS 주의 (개인용 금지)
[Cloudflare]       Workers AI                  — 엣지에서 모델
[Zhipu]            GLM-4 시리즈                — 중국 강자
[Ollama]           로컬 모델                   — 로컬 추론 (인터넷 불필요)
[Kilo]             Kilo Code 모델              — 코딩 특화
[Pollinations]     이미지·텍스트 생성           — 무료 API
[LLM7]             다양한 오픈모델              — 무료 티어
[OVH AI Endpoints] OVH 클라우드 모델            — 유럽 인프라

4아키텍처 심화 분석

라우터·레이트리밋·헬스체크의 3축.

┌──────────────────┐  Bearer freellmapi-…   ┌─────────────────────────┐
│  OpenAI SDK /    │ ─────────────────────▶ │  Express proxy (:3001)  │
│  curl / any      │ ◀───────────────────── │  /v1/chat/completions   │
│  OpenAI client   │     streamed tokens    └───────────┬─────────────┘
└──────────────────┘                                    │
                                                        ▼
                            ┌────────────────────────────────────────┐
                            │  Router                                │
                            │   1. 우선순위 모델 중                   │
                            │      (a) healthy key 있고              │
                            │      (b) RPM/RPD/TPM/TPD 모두 여유      │
                            │   → 선택                               │
                            │   2. 키 복호화 → 프로바이더 SDK 호출    │
                            │   3. 429/5xx → cooldown + 다음 모델    │
                            └────────────────────────────────────────┘
                                            │
   ┌─────┬─────┬─────┬─────┬─────┬─────┬───┴───┬─────┬─────┬─────┬─────┐
   ▼     ▼     ▼     ▼     ▼     ▼     ▼       ▼     ▼     ▼     ▼     ▼
 Google Groq Cere   Samba  NVIDIA Mistral OR   GitHub  HF   Cohere  CF Zhipu …

핵심 설계 패턴 4가지

패턴 1
"Provider Adapter Pattern"

각 프로바이더는 — Provider 추상 클래스를 상속. 같은 인터페이스 chatCompletion() · streamChatCompletion()를 구현. 새 프로바이더 추가 = 인스턴스 하나 추가 + 라우터에 등록. 코드의 다른 부분은 건드릴 필요 없음. 16개가 곧 100개가 될 수 있는 구조.

패턴 2
"In-Memory Rate Ledger + SQLite Backing"

RPM·RPD·TPM·TPD 카운터는 메모리에 두고 — SQLite는 영구화용. 매 요청마다 SQL 한 번 안 쳐도 된다. 라우터의 모델 선택은 µs 단위. 서버 재시작 시 SQLite에서 복원.

패턴 3
"Sticky Sessions for Multi-Turn"

한 대화 내에서는 — 30분간 같은 모델로 고정. 멀티턴 대화 중간에 Gemini → Groq Llama로 바뀌면 — 모델이 컨텍스트를 잘못 읽고 환각이 폭증한다. Sticky를 통해 일관성 보장. "품질 vs 가용성"의 절묘한 타협.

패턴 4
"Health Check Probe"

health.ts 서비스가 — 주기적으로 각 키를 가벼운 요청으로 찔러본다. 결과는 healthy · rate_limited · invalid · error. 라우터는 dead 키를 — 일정 시간 후보군에서 빼버린다. "잘 죽었나"를 미리 알아두는 패턴.

5디렉토리 구조 해부

정형적인 client/server 분리 + 어댑터 폴더.

freellmapi/
├── .github/workflows/         ← CI (vitest 69 테스트)
├── client/                    ← React + Vite + shadcn/ui 대시보드
│   ├── src/
│   │   ├── pages/
│   │   │   ├── Keys.tsx           (키 관리)
│   │   │   ├── FallbackChain.tsx  (순서 드래그)
│   │   │   ├── Playground.tsx     (테스트)
│   │   │   └── Analytics.tsx      (통계)
│   │   └── components/ui/         (shadcn)
│   └── vite.config.ts
├── server/                    ← Express API
│   ├── src/
│   │   ├── routes/                (/v1/chat/completions, /v1/models, admin)
│   │   ├── services/
│   │   │   ├── router.ts          ← 모델 선택의 두뇌
│   │   │   ├── ratelimit.ts       ← RPM/RPD/TPM/TPD 카운터
│   │   │   └── health.ts          ← 키 헬스체크
│   │   ├── providers/             ← 6개 파일 (대부분 openai-compat 인스턴스화)
│   │   │   ├── base.ts            ← 추상 Provider 클래스
│   │   │   ├── google.ts          ← 전용 클래스
│   │   │   ├── cohere.ts          ← 전용 클래스
│   │   │   ├── cloudflare.ts      ← 전용 클래스
│   │   │   ├── openai-compat.ts   ← 나머지 13개 프로바이더 베이스
│   │   │   └── index.ts           ← 전체 프로바이더 등록
│   │   ├── db/                    ← SQLite 스키마·시드
│   │   ├── crypto/                ← AES-256-GCM
│   │   ├── scripts/               ← 모델 카탈로그 재시드
│   │   └── __tests__/             ← vitest
│   └── tsconfig.json
├── shared/                    ← 타입·상수 (client·server 공유)
├── repo-assets/               ← 스크린샷·다이어그램
├── .env.example
├── LICENSE                    ← MIT
└── README.md

주목할 디테일: shared/ 폴더에 — 타입·상수가 모여 있어 client·server가 같은 인터페이스를 공유. providers/openai-compat.ts를 베이스로 — 대부분의 프로바이더가 별도 파일 없이 index.ts에서 인스턴스화로 등록된다.

6학습 포인트 — 이 레포에서 무엇을 가져갈 것인가

단순 도구 사용을 넘어 — 4가지 깊이 있는 학습 포인트.

6-1. OpenAI 호환 프록시 만드는 법

"우리 회사 LLM을 OpenAI 호환 엔드포인트로 노출"이 이제 표준 요구사항. /v1/chat/completions 구조, SSE 스트리밍 응답, 에러 코드 매핑. 이 레포의 routes/ 폴더가 — 그 패턴의 교과서. 한 줄씩 따라 읽으면 자기 회사 게이트웨이를 만들 수 있다.

6-2. Provider Adapter Pattern

"16개 SDK를 한 인터페이스 뒤에 숨기는" 패턴. 추상 클래스 + 인터페이스 분리. providers/openai-compat.ts를 베이스로 — 다른 어댑터들이 super 호출만 적절히 구성. "Strategy Pattern의 실전 응용". 어떤 멀티-벤더 시스템에도 적용 가능.

6-3. Token-Aware Rate Limiting

API에 요청 카운터만 두는 게 아니라 — 입력 토큰·출력 토큰까지 추적. ratelimit.ts가 RPM·RPD·TPM·TPD 4축을 어떻게 메모리에서 관리하는지. 그리고 cooldown 큐 처리, 429 시 우아한 후퇴. "LLM 인프라의 핵심 자료구조".

6-4. AES-256-GCM 봉투 암호화 실전

"DB는 평문, 키만 암호화"의 정확한 구현. node:crypto 기본 API만 써서 — 키 생성·IV·태그·복호화 흐름. 학교에서 배운 이론을 — 실제 작동하는 SQLite 위에서 본다. 이게 자기 토이 SaaS에서 비번·OAuth 토큰 보관할 때 그대로 재활용 가능.

6-5. README가 곧 마케팅 문서

"How it works" ASCII 다이어그램, "Limitations" 솔직한 자기 비판, "ToS review" 표 — 모든 게 신뢰를 만드는 설계. 한 사람이 만든 신생 레포가 1주일에 별 5개로 TrendShift 13위까지 간 이유는 — 코드보다 이 README. "README를 어떻게 써야 모멘텀이 생기나"의 사례 연구.

7시스템 요구사항

아주 가볍다. 거의 어떤 머신에서나 작동.

최소 환경

Node.js 20 + 디스크 50MB + RAM 64MB

OS: Linux/macOS/Windows. Node.js: 20+ (LTS). 디스크: 50MB(node_modules 포함). RAM: 아이들 40MB, 피크 100MB 미만. 네트워크: 16개 프로바이더로 아웃바운드 HTTPS. "라즈베리파이 4 + nginx + Tailscale"로 — 셀프호스트 LLM 게이트웨이 완성.

개발 환경

vitest + HMR — 빠른 피드백 루프

npm run dev: 서버 :3001 + 클라이언트 :5173 동시 HMR. npm test: vitest로 69개 테스트(프로바이더·라우트·라우터·레이트리밋). 새 프로바이더 추가 시 — 테스트 1개만 추가하면 CI가 알아서 검증.

제약
"개인용·로컬용이다 — 절대 인터넷에 노출 금지"

README의 강한 경고: "Local-first. There's no multi-tenant auth. Don't expose it to the internet.". 다른 사람과 공유하면 — 프로바이더 ToS 위반 + 계정 정지. 자기 머신에만, Tailscale·WireGuard로 본인 기기들끼리만. "무료를 함께 쓰면 무료가 사라진다"의 법칙.

8직접 해볼 수 있는 실습 과제

난이도별 4개.

난이도 ★ (30분)

"로컬에 깔고 — 4개 프로바이더 키만"

Google AI Studio·Groq·GitHub Models·OpenRouter 무료 키 4개를 발급. npm run dev → 대시보드에서 4개 등록. Playground에서 — 같은 프롬프트를 4번 보내며 X-Routed-Via 헤더로 누가 답했는지 확인. 처음 30분에 시스템의 동작이 머릿속에 들어온다.

난이도 ★★ (반나절)

"OpenAI 코드를 그대로 — base_url만 바꿔서 작동시키기"

평소 쓰는 LangChain·LlamaIndex·Continue 프로젝트의 base_urlhttp://localhost:3001/v1로. API 키는 freellmapi-.... 아무 코드 수정 없이 — 16개 프로바이더 위에서 작동하는지 확인. 가능하다면 한 시간 동안 어떻게 프로바이더가 자동 전환되는지 Analytics로 관찰.

난이도 ★★★ (2~3일)

"15번째 프로바이더 어댑터 PR"

server/src/providers/openai-compat.ts를 템플릿으로 — 자기가 좋아하는 무료 LLM 프로바이더(예: Together.ai 무료 티어, Fireworks, Replicate) 어댑터를 새로 작성. 테스트 1개 추가. PR 올림. "오픈소스 첫 기여로 의미 있는 코드"의 완벽한 사이즈.

난이도 ★★★★ (1주)

"Pi 4에 배포 — Tailscale로 다른 기기에서 접근"

Raspberry Pi 4를 24/7 켜두고 — PM2 + nginx로 FreeLLMAPI 데몬 실행. Tailscale 깔아서 자기 노트북·모바일이 모두 접근. VSCode Continue 익스텐션의 base_url을 Pi 주소로. 결과: "내 집에 LLM 게이트웨이 1대"가 된다. 자기만의 인프라.

9관련 기술 심화 학습 로드맵

FreeLLMAPI에서 출발해 — LLM 인프라·시스템 디자인 영역으로 확장.

1주차 — OpenAI 호환 프로토콜

SSE 스트리밍·에러 코드·function calling

OpenAI Chat Completions API 명세를 한 줄씩 정독. SSE의 정확한 형식, finish_reason의 의미, 429 응답의 retry-after 헤더. 이 레포의 routes/를 그대로 읽으면서 — "호환의 디테일은 어디서 무너지나"를 본다.

2주차 — Rate Limit 알고리즘

Token Bucket·Leaky Bucket·Sliding Window

이 레포는 — 단순한 카운터 + cooldown. 더 정교한 알고리즘(token bucket, sliding window log)을 공부하고 — ratelimit.ts에 옵션으로 추가하는 PR. Lyft·Stripe의 rate-limit 블로그 글이 좋은 참고.

3주차 — Secret Management

AES-GCM부터 KMS·HashiCorp Vault까지

이 레포의 envelope encryption을 — AWS KMS·Vault 백엔드로 바꾸면 어떻게 바뀌는지 사고 실험. 키 회전, 액세스 로깅, ABAC. "개인용 SQLite"에서 "기업용 KMS"로의 다리를 머리에서 만들어 본다.

4주차 — 자기 게이트웨이 설계

"내 회사용 LLM 게이트웨이"

FreeLLMAPI를 베이스로 — 멀티-테넌트 인증, 사용자별 쿼터, 감사 로그, 모델 화이트리스트를 추가하면 — 사내 LLM 게이트웨이가 된다. 이 레포가 "단일 사용자 버전"이라면, 그 위에 무엇을 얹어야 기업용이 되는지 — 직접 그려 본다.

10핵심 키워드 사전

레포·코드 안에서 자주 보는 용어.

용어
SSE (Server-Sent Events)
서버가 클라이언트에게 — HTTP 연결을 유지한 채 토큰 단위로 응답을 흘려보내는 표준. data: ...\n\n 형식의 줄들이 연속. WebSocket보다 단순. LLM 스트리밍의 사실상 표준. stream: true 옵션일 때 FreeLLMAPI가 쓰는 응답 형식.
용어
Cooldown / Backoff
429를 받은 키를 — 한동안 후보군에서 빼두는 것. 이 레포는 cooldown 시간이 동적으로 늘어남(exponential backoff). 한 키가 계속 429 → cooldown 시간이 2배·4배·8배로 늘어나며 — 결국 그 키는 다음 reset까지 후보군에서 사실상 제외.
용어
Sticky Session (스티키 세션)
한 사용자(또는 대화)의 연속 요청을 — 같은 모델/서버로 보내는 정책. 일관성 보장. FreeLLMAPI는 30분 단위. 너무 길면 좋은 모델 못 쓰고, 너무 짧으면 환각 폭증.
용어
Envelope Encryption (봉투 암호화)
"데이터를 키로 암호화하고, 그 키를 더 큰 마스터키로 또 암호화"하는 패턴. FreeLLMAPI는 ENCRYPTION_KEY(.env)가 마스터키 역할. SQLite에는 — provider 키가 봉투에 들어 있다.
용어
Typst
LaTeX의 모던 대체재. Rust로 만든 문서 조판 언어. 기술 문서·논문·리포트를 코드로 작성하고 PDF로 컴파일. "R&D 가벼운 진지함"의 신호.
용어
Frontier Model (프런티어 모델)
GPT-5·Claude Opus·Gemini 2.5 Pro 같은 — 최상위 추론 능력 모델. FreeLLMAPI README의 솔직한 경고: "무료 티어로는 프런티어 모델 못 얻는다". Llama 3.3 70B·GLM-4.5·Qwen 3 Coder가 한계. 진지한 작업은 paid API.

11참고 링크

레포·공식·관련 자료.

레포 본체: github.com/tashfeenahmed/freellmapi

프로젝트 홈페이지: tashfeenahmed.github.io/freellmapi

비슷한 큐레이션: cheahjs/free-llm-api-resources(목록), mnfst/awesome-free-llm-apis(목록), open-free-llm-api/freellm-hub-data(원클릭 config 모음).

관련 표준: OpenAI API 명세, SSE(RFC), AES-256-GCM(NIST).

한 줄 핵심

"코드 = OpenAI 그대로, 인프라 = 16개 무료 베이커리. 라즈베리파이 한 대로 끝."

  1. 30분에 4개 키로 가동 시작. Google·Groq·GitHub·OpenRouter면 충분히 강력.
  2. 새 SDK 배우는 거 0. 평소 쓰는 OpenAI 클라이언트의 base_url만 바꾸면 끝.
  3. 코드 한 번 읽어 — Provider Adapter Pattern 익히기. 이게 어디서나 재활용 가능한 자산.
  4. 인터넷에 노출 금지. 자기만, 자기 기기끼리만. ToS 위반 방지의 첫 규칙.
  5. 심각한 작업엔 paid API로 갈아타기. 무료는 학습·실험·해커톤 용도.

분석 대상: tashfeenahmed/freellmapi · TrendShift 13위(2026.05.21) · 5 stars · MIT License · TypeScript 91.8% · 작성: 유행레포정리 프로젝트