알짜게시판

CLIProxyAPI Windows 설치 가이드

API 키 없이 Gemini를 로컬 API 서버로 띄우기

Gemini API를 쓰려면 Google AI Studio에서 API 키를 발급받아야 한다. 무료 티어가 있긴 하지만, 분당 요청 수와 모델 접근에 제약이 있고, 특히 gemini-2.5-pro 같은 상위 모델은 금방 쿼터가 소진된다. 개인 Google 계정에 이미 Gemini 구독이 연결되어 있거나, 무료 Google One 플랜을 쓰고 있다면 그 쿼터를 프로그래밍 방식으로 활용하고 싶어지는 건 자연스러운 흐름이다. 문제는 Gemini 웹 인터페이스는 브라우저에서만 동작하고, 이를 API처럼 호출하는 공식적인 방법이 없다는 것이다.

CLIProxyAPI는 이 지점을 파고든 오픈소스 프로젝트다. Gemini CLI의 OAuth 인증 흐름을 그대로 활용해서, 구글 계정으로 로그인한 뒤 로컬에 OpenAI 호환 API 서버를 띄운다. API 키 발급 없이, 브라우저 로그인 한 번으로 http://127.0.0.1:8317/v1/chat/completions 엔드포인트를 사용할 수 있게 된다. OpenAI SDK를 그대로 base_url만 바꿔서 쓸 수 있기 때문에, 기존 코드 수정이 거의 없다.


CLIProxyAPI 다운로드 및 config.yaml 구성

GitHub 릴리즈 페이지(https://github.com/router-for-me/CLIProxyAPI/releases)에서 Windows 바이너리를 받는다. 실행 파일 하나(cli-proxy-api.exe)가 전부다. 별도 설치 과정이 없고, 원하는 폴더에 풀어두면 된다. 이 글에서는 D:\CLIProxyAPI\에 압축을 해제한 기준으로 진행한다.

실행 전에 config.yaml을 작성해야 한다. 같은 폴더에 아래 내용으로 파일을 만든다.

host: "127.0.0.1"
port: 8317
auth-dir: "D:/CLIProxyAPI/auth"
api-keys:
  - "local"

host127.0.0.1로 고정하면 로컬 머신에서만 접근 가능하다. 외부에서도 접근하려면 ""로 바우면 모든 인터페이스에 바인딩된다. auth-dir은 OAuth 토큰 파일이 저장될 경로인데, 슬래시 방향에 주의한다. Windows 경로지만 YAML에서는 /를 써야 파싱 오류가 없다. api-keys는 이 서버에 요청할 때 Authorization 헤더에 넣을 값이다. local로 설정했으니 Bearer local을 쓰면 된다. 별도의 providers 블록은 필요 없다. OAuth 로그인 후 auth-dir에 저장된 파일을 서버가 자동으로 감지한다.


Google 계정 OAuth 로그인 — 웹 로그인으로 인증 토큰 발급

서버를 먼저 실행하기 전에 로그인 절차를 진행해야 한다. 터미널에서 아래 명령을 실행한다.

D:\CLIProxyAPI\cli-proxy-api.exe --login

실행하면 브라우저가 자동으로 열리면서 Google 계정 로그인 화면이 나타난다. 로그인 후 권한 승인을 하면 터미널로 돌아와서 다음 선택지가 표시된다.

Select login mode:
  1. Code Assist  (GCP project, manual selection)
  2. Google One   (personal account, auto-discover project)
Enter choice [1/2] (default: 1):

개인 Google 계정을 쓴다면 2를 입력한다. 그러면 GCP(Google Cloud Platform) 프로젝트를 자동으로 탐색하고, high-kite-bv9qn 같은 형태의 프로젝트 ID를 자동 할당한다. 이 과정이 끝나면 auth-dirgemini-계정명-프로젝트ID.json 형태의 파일이 생성된다. 이 파일이 OAuth 토큰이다. 만료 시 자동으로 갱신되며, 서버가 15분 간격으로 상태를 점검한다. Code Assist 모드(1번)는 Google Workspace나 기업 GCP 프로젝트를 직접 지정할 때 쓴다. 개인 계정이라면 2번 외에 선택지가 없다고 봐도 된다.

브라우저가 자동으로 열리지 않는 환경, 예를 들어 SSH로 접속한 서버에서 실행하는 경우라면 --no-browser 플래그를 추가한다. 터미널에 인증 URL이 출력되고, 이 URL을 로컬 브라우저에 직접 붙여넣어 로그인하면 된다.

D:\CLIProxyAPI\cli-proxy-api.exe --login --no-browser

서버 실행 및 모델 확인

로그인이 완료됐으면 서버를 실행한다.

D:\CLIProxyAPI\cli-proxy-api.exe

정상적으로 인증 파일이 감지되면 로그에 아래처럼 출력된다.

server clients and configuration updated: 1 clients (1 auth entries + ...)

0 clients로 남아 있다면 auth-dir 경로가 잘못됐거나 로그인 파일이 없는 상태다. 경로를 다시 확인한다. 서버가 뜬 뒤 사용 가능한 모델 목록은 아래 명령으로 확인한다.

curl http://127.0.0.1:8317/v1/models -H "Authorization: Bearer local"

현재 기준으로 응답에 포함되는 모델은 다음과 같다.

gemini-2.5-flash
gemini-2.5-flash-lite
gemini-2.5-pro
gemini-3-flash-preview
gemini-3-pro-preview
gemini-3.1-pro-preview
gemini-3.1-flash-lite-preview

gemini-2.5-pro는 개인 계정의 무료 쿼터가 하루 단위로 초기화된다. 쿼터가 소진된 경우 429 오류(RESOURCE_EXHAUSTED)가 반환된다. 이 경우 gemini-3-flash-preview로 대체하거나 다음 날 다시 시도하면 된다.


실제 요청 테스트 — gemini-3-flash-preview 응답 확인

gemini-3-flash-preview 모델로 실제 요청을 보내면 아래처럼 응답이 온다.

curl http://127.0.0.1:8317/v1/chat/completions ^
  -H "Content-Type: application/json" ^
  -H "Authorization: Bearer local" ^
  -d "{\"model\": \"gemini-3-flash-preview\", \"messages\": [{\"role\": \"user\", \"content\": \"안녕!\"}]}"

응답 예시는 다음과 같다.

{
  "id": "fgfRadnJDaL6694P6aWLsAM",
  "object": "chat.completion",
  "model": "gemini-3-flash-preview",
  "choices": [{
    "message": {
      "role": "assistant",
      "content": "안녕하세요! 반가워요. 오늘 어떤 도움을 드릴까요?"
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 3,
    "completion_tokens": 22,
    "total_tokens": 231
  }
}

응답 구조가 OpenAI의 chat.completions 응답 형식과 동일하다. usage.completion_tokens_details.reasoning_tokens가 206으로 잡혀 있는데, 이는 모델 내부의 추론(chain-of-thought) 과정에서 소비된 토큰이다. 출력 토큰은 22개지만 내부 처리에는 206 토큰이 쓰인 셈이다. Python에서 OpenAI SDK를 쓰던 코드라면 base_urlapi_key만 바꾸면 그대로 동작한다.

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8317/v1",
    api_key="local"
)

response = client.chat.completions.create(
    model="gemini-3-flash-preview",
    messages=[{"role": "user", "content": "안녕!"}]
)
print(response.choices[0].message.content)

Cursor, Cline, Continue 같은 IDE 확장 툴도 OpenAI 호환 엔드포인트를 지원하므로, Base URL을 http://127.0.0.1:8317/v1로 설정하면 바로 연결된다.


쿼터 한계와 멀티 계정 운용 시 고려할 점

이 방식의 한계는 개인 Google 계정의 무료 쿼터에 종속된다는 점이다. 공식 문서 기준으로 Gemini CLI OAuth를 통한 무료 사용은 분당 60회, 하루 1,000회 요청으로 제한된다. 단일 계정으로 집중적인 요청을 보내면 금방 소진된다. CLIProxyAPI는 멀티 계정 라운드로빈 로드밸런싱을 지원하므로, --login을 여러 번 실행해 서로 다른 Google 계정을 auth-dir에 추가해두면 서버가 요청을 분산한다. 토큰 파일이 2개 이상이면 로그에 2 auth entries로 표시되고 자동으로 순환한다.

주의할 점은 Google이 Gemini CLI OAuth를 서드파티 소프트웨어에서 사용하는 것을 정책 위반으로 간주할 수 있다는 것이다. 계정 제한이나 접근 차단이 발생할 가능성이 있다. 실제로 일부 사용자에게 계정 제한이 걸렸다는 사례가 보고된 바 있다. 프로덕션 환경이나 업무 중요도가 높은 작업에는 공식 API 키 방식을 쓰는 편이 안전하다. 이 설정은 로컬 개발, 프로토타이핑, 개인 프로젝트 수준에서 쓰는 것이 현실적인 범위다. 서버가 127.0.0.1에 바인딩되어 있는 한 외부 노출은 없으므로, 로컬 환경에서의 보안 위험은 낮다.

로그인 후 댓글내용을 입력해주세요

제목 글쓴이 조회 날짜
기타 CLIProxyAPI Windows 설치 가이드 16 2시간 전
워드프레스 그누보드7 데이터를 WordPress WXR로 변환하기 107 26-04-01
기타 Ollama 설치 경로 C드라이브 고정 문제 해결 및 드라이브 변경 방법 111 26-03-31
개발팁 Apache Access Log 기반 도메인별 방문자 카운터 구현 99 26-03-31
윈도우 ZImage AI 이미지 생성 환경 구축 방법 262 26-03-26
윈도우 파일 복사 후 실행 배치파일 - 에러 감지 포함 294 26-03-10
개발팁 네이버 검색 Open API 549 26-02-10
개발팁 네이버 검색광고 키워드 도구 API 검색 627 26-02-10
개발팁 MariaDB column_stats 테이블 오류 해결 방법 754 25-12-06
개발팁 PHP-FPM 에러 로그 실시간 모니터링 710 25-12-03
윈도우 윈도우11 업데이트 후 네트워크 드라이브 접근 불가 문제 해결 방법 1,353 25-11-24
개발팁 다국어 번역 함수 구현 방법 3,092 25-11-08
워드프레스 "치명적인 오류가 발생했습니다" 디버깅 가이드 13,906 25-10-31
리눅스 Apache 웹 로그 분석하기 – awk와 GoAccess 활용 18,480 25-10-28
길호넷 칼무리 - 외부 명령으로 캡처 자동화하기 1 40,128 25-10-14
윈도우 윈도11 강제업데이트 피하고 윈도10 계속 쓰기 41,650 25-10-12
리눅스 PHP 파일 업로드 용량 늘리기 56,555 25-10-03
개발팁 애드센스 충돌 문제 해결하기 74,539 25-09-20
파이썬 Python Playwright로 Edge 브라우저 제어하기 76,607 25-09-12
델파이 TDirectory.Delete 대신 CMD 으로 폴더 삭제 74,922 25-09-10
윈도우 Chrome 및 Edge를 TLS 1.2 모드로 실행 74,299 25-08-30
개발팁 애드센스 자동 광고 사용 시 빈 화면이 출력된다면? 159,205 25-06-20
윈도우 브라우저 환경설정 추출 145,775 25-06-18
워드프레스 xmlrpc.php 차단으로 보안 강화하기 136,934 25-06-05
델파이 폼이 모니터 한 가운데 있는 경우 자연스럽게 왼쪽으로 이동시키기 134,483 25-05-26
윈도우 WSH script registration is not valid. 134,691 25-05-23
워드프레스 제목 블록 기본값을 H5로 변경하는 방법 116,003 25-05-22
파이썬 동영상 특정 영역 모자이크(흐리게) 하기 47,704 25-04-30
리눅스 구글 크롬 콘솔 'Attestation check for Topics on' 에러 원인 &… 60,879 25-04-11
기타 크롬 - 개발자 도구(DevTools)에서 붙여넣기 안될때 73,450 25-03-10
그누보드 SmartEditor2Skin.html 다운로드 되는 현상 110,917 25-01-08
개봉닷컴철학인문웹툰인사이트결혼의신주방연구소