(폐쇄망 LLM 6) 망분리 환경에서 Claude Code 사용하기 - claude-code-router 설정
폐쇄망/내부망에서 Claude Code를 로컬 LLM과 연동하는 방법. claude-code-router로 vLLM 서버와 연결하여 에이전트 코딩 환경을 구축합니다.
이전 글: 양자화와 정밀도 선택
이 글은 망분리 환경 AI 배포 시리즈의 여섯 번째 글입니다.
다음 글: 하드웨어/소프트웨어 설계
이번 글의 목표
양자화 전략까지 정했습니다. 이번 글에서는 두 가지를 다룹니다:
- 인터넷 환경에서 빠르게 테스트 - OpenRouter로 Claude-Code-Router 설정이 제대로 되는지 확인
- 망분리 환경으로 패키지 이전 - 의존성까지 묶어서 업무망(Windows 10/11)에 설치하는 방법
이 과정을 마치면 다음 글부터는 실제로 vLLM 서버를 구축하고 연동하는 실전 예제를 처음부터 끝까지 진행합니다. 국내 증권사 기준이므로 Windows 10/11 환경이라고 가정합니다.
Claude Code Router가 필요한 이유
Claude Code는 Anthropic의 /v1/messages API를 사용합니다. 반면 vLLM이나 OpenRouter는 OpenAI 형식의 /v1/chat/completions API를 제공합니다. 이 둘을 연결하려면 API 형식을 변환해주는 중간 레이어가 필요합니다.
1
2
3
4
┌─────────────┐ ┌────────────────────┐ ┌────────────────────────┐
│ Claude Code │ ──── │ claude-code-router │ ──── │ vLLM, or OpenRouter │
│ (Anthropic) │ │ (API conversion) │ │ (OpenAI API) │
└─────────────┘ └────────────────────┘ └────────────────────────┘
OpenRouter로 먼저 테스트하는 건 일종의 워밍업입니다. vLLM 서버 구축 없이 감을 잡아볼 수 있고, 나중에 endpoint만 바꾸면 되기 때문입니다. 인터넷 연결 환경에서 빠르게 설정을 잡아보고, 그다음에 망분리 환경으로 패키지를 옮기는 방법까지 다룹니다.
Part 1: 인터넷 환경에서 테스트
1. Node.js 설치
먼저 Node.js를 설치합니다. Node.js를 설치하면 npm도 함께 설치됩니다.
Windows: Node.js 공식 사이트에서 LTS 버전을 다운로드하여 설치합니다.
설치 확인:
1
2
node --version
npm --version
2. Claude Code 설치
1
npm install -g @anthropic-ai/claude-code
설치 후 프롬프트 창에 claude 명령어를 입력했을 때 마스코트가 뜨면 끝입니다. 저희의 목표는 네이티브 클로드를 사용하려는 게 아니니 Anthropic 멤버십을 결제하지 않으셔도 됩니다.
3. Claude Code Router 설치
1
npm install -g @musistudio/claude-code-router
4. OpenRouter 가입
OpenRouter에 가입합니다.
- 테스트 용도라면 무료 모델들이 있으니 그걸 써도 됩니다
본격적으로 쓰려면 $10 정도 크레딧을 충전하면 편합니다
- 크레딧 충전: Settings → Credits → Add Credit
- API 발급: Settings → Keys → Create Key
5. Claude Code Router 설정
~/.claude-code-router/config.json 파일을 생성합니다:
Windows: C:\Users\{사용자명}\.claude-code-router\config.json
그럼 어떤 모델을 선택할지 둘러볼까요? openrouter models에 가서 낮은 가격순으로 정렬해봅시다.
스크롤을 조금 내려보다 보니까 싱싱한 Devstral-2가 공짜로 제공되고 있습니다. 빨간색으로 표시한 버튼을 누르면 모델 경로가 복사됩니다. 
자, 이제 config.json 파일을 작성합니다. 공짜여도 API 키는 발급받으셔야 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"LOG": true,
"API_TIMEOUT_MS": 1200000,
"Providers": [
{
"name": "openrouter",
"api_base_url": "https://openrouter.ai/api/v1/chat/completions",
"api_key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"models": [
"mistralai/devstral-2512:free" // <- 여기에 복사한 모델 경로 붙여넣으세요
],
"transformer": {
"use": [
"openrouter"
]
}
}
],
"Router": {
"default": "openrouter,mistralai/devstral-2512:free" // 여기도 복사한 모델 경로 붙여넣으세요
}
}
6. Claude Code Router 실행
자, 이제 준비가 끝났습니다. config.json 파일을 작성했으니 설정을 로드해볼까요? 커맨드 창이나 PowerShell을 열고:
1
ccr restart
실행하면 이런 메시지가 출력됩니다.
1
2
3
claude code router service has been stopped.
Starting claude code router service...
✅ Service started successfully in the background.
시작 커맨드는
1
ccr code
입니다. 자, 한번 해볼까요?
잘 되는 것 같습니다. 처음에 보여질 때만 Sonnet 4.5로 보여질 뿐 실제로 대화하고 있는 모델은 mistralai/devstral-2512입니다.
여기까지 확인됐으면 인터넷 환경에서의 테스트는 끝입니다. 나중에 vLLM 서버를 올리고 config.json의 endpoint만 바꿔주면 됩니다. 지금까지 일이 비교적 쉬웠던 이유는 저희가 모두 인터넷 세상에서 살았기 때문입니다.
실제 저희가 해야 할 일은
1) Node.js 설치 파일을 다운로드받아서 업무망으로 망간 자료 전송
2) Node.js 설치 파일 보안 해제 후 설치
3) Claude Code와 Claude Code Router와 해당 의존성 패키지들을 모두 인터넷 망에서 준비
4) 망간 자료 전송으로 이동
5) 업무망에서 npm을 이용해 Claude Code와 Claude Code Router를 옮겨온 의존성 패키지와 함께 설치
위 단계에서 3-5번 패키지 준비 부분은 조금 자세히 설명 드리겠습니다.
Part 2: 망분리 환경으로 패키지 이동
1. 작업 디렉토리 생성
인터넷이 되는 PC에서 작업 디렉토리를 만듭니다:
1
2
mkdir C:\airgap-packages
cd C:\airgap-packages
2. Claude Code 패키지 준비
1
2
3
4
mkdir claude-code
cd claude-code
npm init -y
npm install @anthropic-ai/claude-code
위 커맨드 에서 몇 가지 짚어 보겠습니다.
왜 npm init -y가 필요한가?
npm init -y는 package.json 파일을 자동 생성합니다. 이게 없으면 나중에 npm link가 실패합니다. npm link는 package.json을 읽어서 어떤 명령어(claude, ccr)를 등록할지 결정하기 때문입니다.
왜 -g 없이 설치하는가?
Part 1에서는 npm install -g로 글로벌 설치를 했습니다. 글로벌 설치는 시스템 폴더에 저장되므로 현재 폴더에 아무것도 생기지 않습니다.
여기서는 -g 없이 로컬 설치를 합니다. 로컬 설치는 현재 폴더에 node_modules를 생성하고 모든 의존성을 다운로드합니다. 이 폴더를 통째로 옮기면 인터넷 없이도 설치가 가능합니다.
3. Claude Code Router 패키지 준비
1
2
3
4
5
cd C:\airgap-packages
mkdir claude-code-router
cd claude-code-router
npm init -y
npm install @musistudio/claude-code-router
위와 동일한 이유로 npm init -y로 package.json을 먼저 생성하고, -g 없이 로컬 설치합니다.
4. 압축
이제 두 폴더를 압축합니다. Windows 탐색기에서 우클릭 → 압축하거나 PowerShell로:
1
2
3
cd C:\airgap-packages
Compress-Archive -Path claude-code -DestinationPath claude-code.zip
Compress-Archive -Path claude-code-router -DestinationPath claude-code-router.zip
압축 파일 두 개(claude-code.zip, claude-code-router.zip)가 생성됩니다. 이걸 망간 자료 전송합니다.
5. 업무망에서 설치
압축 해제 후 각 폴더에서 npm link를 실행합니다:
1
2
3
4
5
cd C:\airgap-packages\claude-code
npm link
cd C:\airgap-packages\claude-code-router
npm link
npm link는 현재 폴더의 패키지를 전역(global)으로 등록합니다. 인터넷 없이도 claude와 ccr 명령어를 사용할 수 있게 됩니다.
6. 설정 파일 복사
인터넷 PC에서 만들었던 config.json도 같이 옮겨야 합니다:
1
C:\Users\{사용자명}\.claude-code-router\config.json
단, api_base_url은 vLLM 서버 주소로 바꿔야 합니다:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"Providers": [
{
"name": "vllm",
"api_base_url": "http://{vLLM서버IP}:{포트}/v1/chat/completions",
"api_key": "not-needed",
"models": ["GLM-4.5-Air-FP8"],
"transformer": {
"use": ["openai"]
}
}
],
"Router": {
"default": "vllm,GLM-4.5-Air-FP8"
}
}
7. 실행 확인
1
2
ccr restart
ccr code
vLLM 서버가 아직 없으니 당연히 연결이 안 됩니다. 다음 글부터 본격적인 구축을 다룹니다.
다음 글
다음 글에서는 실전 예제를 시작합니다. 처음부터 끝까지 직접 따라할 수 있도록 vLLM 서버 구축, 모델 다운로드, Docker 설정, 그리고 망분리 환경으로 이전하는 전 과정을 다룹니다.
시리즈 목차
전체 목차는 AI 활용에서 확인하실 수 있습니다.


