API 키 없이, 코드가 외부로 나가지 않고, 월 구독료 없이. Qwen3-Coder + OpenCode 조합은 Claude Code의 로컬 대안 중 현재 가장 현실적인 선택입니다.
핵심 요약 → OpenCode = 터미널 기반 오픈소스 코딩 에이전트, Claude Code와 동일한 UX, 75+ 프로바이더 지원 → Qwen3-Coder-30B-A3B: 총 30B 파라미터, 활성 3B — RTX 4090 1대로 실행 가능 → Qwen3-Coder-Next (80B/3B): 2026년 2월 출시, SWE-Bench Verified 70.6% → LM Studio: 로컬 추론 서버, OpenAI 호환 API → OpenCode가 그대로 붙음 → Qwen Code: Qwen 공식 오픈소스 에이전트 (Claude Code fork 기반) → 핵심 설정 함정: OpenCode 컨텍스트 길이 최소 16K 요구, Qwen 채팅 템플릿 수동 설정 필요 → 비용: $0 (추론 비용 없음) vs Claude Code 월 수만 원
왜 로컬 코딩 에이전트인가
# API 코딩 에이전트 vs 로컬 코딩 에이전트
API 에이전트 (Claude Code / Codex CLI):
✅ 최고 성능
✅ 관리 불필요
❌ 월 $20~200+ 구독 + 토큰 비용
❌ 소스코드가 외부 서버로 전송
❌ 기업 CISO 정책에 막힘
로컬 에이전트 (OpenCode + Qwen3-Coder):
✅ API 비용 $0
✅ 소스코드 방화벽 밖으로 안 나감
✅ 인터넷 연결 없어도 동작
✅ 오픈소스 — 커스터마이징 가능
❌ 성능 gap (SWE-Bench: 70.6% vs Claude Sonnet 79.6%)
❌ GPU 필요 (RTX 4090 또는 Apple M2 Ultra+)
❌ 초기 설정 필요
Qwen3-Coder-Next는 80B 총 파라미터에 3B 활성 파라미터로 Claude Sonnet 4.5에 필적하는 코딩 벤치마크 성능을 달성합니다. 활성 파라미터가 3B뿐이므로 고사양 소비자용 GPU에서도 실행이 현실적입니다.
1. 모델 선택 — 하드웨어별 최적 조합
# 모델별 하드웨어 요구사항 (2026.05 기준)
Qwen3-Coder-30B-A3B-Instruct (권장 시작점):
총 파라미터: 30B 활성: 3B
VRAM 요구: FP16 ~20GB / Q4 ~10GB
최소 GPU: RTX 4090 (24GB) 1대
Apple: M2 Max (32GB) 이상
SWE-Bench: ~65%
Qwen3-Coder-Next (최고 성능):
총 파라미터: 80B 활성: 3B
VRAM 요구: FP16 ~50GB / Q4 ~25GB
최소 GPU: RTX 4090 2대 또는 RTX 5090 1대
Apple: M2 Ultra (192GB) 이상
SWE-Bench: 70.6%
Qwen3.6-35B-A3B (밸런스):
총 파라미터: 35B 활성: 3B
VRAM 요구: Q4 ~12GB
최소 GPU: RTX 4090 (24GB) 1대
SWE-Bench: ~67%
# 하드웨어별 추천
RTX 4090 (24GB): Qwen3-Coder-30B-A3B Q4
RTX 4090 × 2: Qwen3-Coder-Next Q4
Apple M2 Max (32GB): Qwen3-Coder-30B-A3B-Instruct-MLX-4bit
Apple M2 Ultra (64GB): Qwen3-Coder-Next-MLX-4bit
CPU 전용 (RAM 64GB): Qwen3.6-7B-A3B (성능 타협)
2. LM Studio 설치 + 모델 로드
# LM Studio 다운로드
# https://lmstudio.ai/download
# macOS / Windows / Linux 지원
# 설치 후 CLI 초기화
lms bootstrap # CLI 초기화 (설치 후 1회)
# 터미널에서 모델 다운로드 (선택사항)
lms get qwen3-coder-30b-a3b-instruct-mlx-4bit # Apple Silicon
lms get qwen3-coder-30b-a3b-instruct-gguf-q4 # NVIDIA GPU
# LM Studio GUI 설정 (핵심 설정 3가지)
1. 모델 로드
검색창에: Qwen3-Coder-30B-A3B-Instruct-MLX-4bit
다운로드 → Load Model 클릭
2. 컨텍스트 길이 설정 ← 중요!
Load 탭 → Context Length: 32768 (최소 16384)
GPU Offload: Max
→ OpenCode가 16K+ 컨텍스트 강제 요구
3. 로컬 서버 활성화
Developer 탭 (CTRL+2) → Status: Running
→ http://localhost:1234/v1 에서 OpenAI 호환 API 시작
# 서버 동작 확인
curl http://localhost:1234/v1/models
# 정상 응답 예시:
# {
# "data": [{
# "id": "qwen3-coder-30b-a3b-instruct-mlx-4bit",
# "type": "model"
# }]
# }
3. Qwen 채팅 템플릿 설정 — 가장 흔한 함정
OpenCode에서 Qwen3-Coder-30B를 사용하려면 Qwen의 기본 채팅 템플릿을 수동으로 설정해야 합니다. 이 설정 없이는 모델이 툴 호출을 올바르게 실행하지 못합니다.
# LM Studio GUI에서 채팅 템플릿 설정
Model Settings 탭 → Chat Template 섹션
다음 시스템 프롬프트 추가:
"You are Qwen, a helpful coding assistant.
When using tools, always follow the tool calling format exactly.
Do not add extra text before or after tool calls."
Tokenization → Chat Template:
chatml 선택 (또는 Custom 선택 후 아래 적용)
# 채팅 템플릿 문제 확인 방법
# 아래처럼 직접 API 테스트
import requests
import json
response = requests.post(
"http://localhost:1234/v1/chat/completions",
json={
"model": "qwen3-coder-30b-a3b-instruct-mlx-4bit",
"messages": [{"role": "user", "content": "Hello"}],
"tools": [{
"type": "function",
"function": {
"name": "test_tool",
"description": "테스트 툴",
"parameters": {
"type": "object",
"properties": {
"message": {"type": "string"}
}
}
}
}]
}
)
result = response.json()
# tool_calls가 올바르게 파싱되는지 확인
# 없으면 → 채팅 템플릿 설정 재확인
print(json.dumps(result, indent=2, ensure_ascii=False))
4. OpenCode 설치
# macOS (Homebrew)
brew install sst/tap/opencode
# 또는 공식 설치 스크립트
curl -fsSL https://opencode.ai/install | sh
# Windows (winget)
winget install opencode
# npm (플랫폼 무관)
npm install -g opencode-ai
# 설치 확인
opencode --version
5. OpenCode + LM Studio 연결 설정
# 방법 1: /connect 커맨드 (UI 방식, 권장)
opencode # OpenCode 실행
# 내부에서:
/connect # 프로바이더 선택 화면
# → "LM Studio" 선택
# → API Key 입력: "lm-studio" (아무 값이나 가능)
# → Base URL: http://localhost:1234/v1
// 방법 2: config.json 직접 편집
// 위치: ~/.opencode/config.json (없으면 생성)
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"lmstudio": {
"npm": "@ai-sdk/openai-compatible",
"name": "LM Studio (Local)",
"options": {
"baseURL": "http://localhost:1234/v1"
},
"models": {
"qwen3-coder-30b-a3b-instruct-mlx-4bit": {
"name": "Qwen3-Coder-30B (Local)"
}
}
}
},
"model": "lmstudio/qwen3-coder-30b-a3b-instruct-mlx-4bit",
"small_model": "lmstudio/qwen3-coder-30b-a3b-instruct-mlx-4bit"
}
# 인증 등록 (config 수정과 별개로 필요)
opencode auth login
# Provider: lmstudio (또는 Other 선택)
# API Key: lm-studio (임의값 — LM Studio는 키 검증 안 함)
# OpenCode 재시작 후 모델 확인
/models # lmstudio/qwen3-coder... 표시되면 성공
6. vLLM 사용 시 — 서버 배포 환경
# vLLM으로 Qwen3-Coder 서빙 (GPU 서버)
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen3-Coder-30B-A3B-Instruct \
--served-model-name Qwen3-Coder-30B-A3B-Instruct \
--port 8000 \
--max-model-len 32768 \
--tensor-parallel-size 2 # GPU 2대 병렬
// vLLM → OpenCode 설정
// ~/.opencode/config.json
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"vllm": {
"npm": "@ai-sdk/openai-compatible",
"name": "vLLM (Local Server)",
"options": {
"baseURL": "http://192.168.1.100:8000/v1"
},
"models": {
"Qwen3-Coder-30B-A3B-Instruct": {
"name": "Qwen3-Coder-30B (vLLM)"
}
}
}
},
"model": "vllm/Qwen3-Coder-30B-A3B-Instruct",
"small_model": "vllm/Qwen3-Coder-30B-A3B-Instruct"
}
7. Ollama 사용 시 — 가장 간단한 방법
# Ollama 설치 (macOS)
brew install ollama
# Qwen3-Coder 모델 다운로드
ollama pull qwen3-coder:30b-a3b # 30B MoE 버전
# 서버 시작
ollama serve # http://localhost:11434
# OpenCode에서 Ollama 연결
opencode auth login
# Provider: ollama
# API Key: ollama (임의값)
// Ollama → OpenCode config
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "Ollama (Local)",
"options": {
"baseURL": "http://localhost:11434/v1"
},
"models": {
"qwen3-coder:30b-a3b": {
"name": "Qwen3-Coder-30B (Ollama)"
}
}
}
},
"model": "ollama/qwen3-coder:30b-a3b"
}
// ⚠️ Ollama 주의사항:
// Qwen 기본 채팅 템플릿이 LM Studio와 다를 수 있음
// 툴 호출 실패 시 → Modelfile에서 TEMPLATE 직접 설정
8. OpenCode 실전 사용
# 프로젝트 디렉토리에서 실행
cd ~/my-project
opencode
# 주요 내부 명령
/models # 모델 전환
/connect # 프로바이더 추가
/providers # 현재 연결된 프로바이더 목록
/cost # 현재 세션 토큰 사용량 (로컬이면 $0)
# 에이전트에게 작업 지시
> 이 프로젝트의 README를 읽고 FastAPI 엔드포인트 추가해줘
> 테스트가 실패하고 있어, 원인 찾아서 고쳐줘
> authentication.py 파일의 보안 취약점 찾아줘
# Claude Code와 동일한 UX:
# - 파일 읽기/쓰기 자동
# - bash 명령 실행
# - 멀티파일 편집
# - 결과 확인 후 계속
9. Qwen Code — 공식 오픈소스 에이전트 (대안)
Qwen Code는 터미널용 오픈소스 AI 에이전트로 Qwen 시리즈 모델에 최적화되어 있습니다. OpenAI·Anthropic·Gemini 호환 API, Alibaba Cloud, OpenRouter, Fireworks AI를 지원합니다. 프레임워크와 Qwen3-Coder 모델이 모두 오픈소스이며 함께 발전합니다.
# Qwen Code 설치 (npm)
npm install -g @qwen/qwen-code
# 또는 pip
pip install qwen-code
# 로컬 LM Studio 연결
export OPENAI_API_KEY="lm-studio"
export OPENAI_BASE_URL="http://localhost:1234/v1"
qwen --model qwen3-coder-30b-a3b-instruct-mlx-4bit
# OpenCode vs Qwen Code 선택 기준:
# OpenCode: 75+ 프로바이더, 클라우드 ↔ 로컬 전환 쉬움
# Qwen Code: Qwen 모델과 가장 잘 맞음, Skills·SubAgents 내장
10. 성능 최적화 팁
# 로컬 에이전트 성능 극대화 설정
# 1. 컨텍스트 길이 최적화
# - 너무 짧으면 에이전트가 컨텍스트 잃음 (Thrashing)
# - 너무 길면 처리 속도 저하
OPTIMAL_CONTEXT = {
"RTX_4090": 32_768, # 24GB VRAM
"M2_Max_32GB": 32_768,
"M2_Ultra_64GB": 65_536,
"RTX_4090x2": 65_536,
}
# 2. 양자화 선택
QUANTIZATION_GUIDE = {
"Q4_K_M": "최소 VRAM, 성능 95% 유지 (권장)",
"Q5_K_M": "VRAM 25% 증가, 성능 98% 유지",
"Q8_0": "VRAM 50% 증가, 성능 99% 유지",
"FP16": "원본 성능, VRAM 2배 필요",
}
# 3. 배치 크기
# LM Studio: Settings → GPU → Max Batch = 512 (기본 512)
# vLLM: --max-num-seqs 256 (병렬 요청 수)
# 4. 스트리밍 활성화
# OpenCode: 기본 스트리밍 ON
# → 첫 토큰까지 대기 시간 체감 단축
Claude Code vs OpenCode + Qwen3-Coder 비교
# 실전 비교 (2026.05 기준)
항목 Claude Code OpenCode + Qwen3-Coder-30B
─────────────────────────────────────────────────────────────────────
SWE-Bench Verified 79.6% ~65% (30B) / 70.6% (Next)
월 비용 $20~200+ + 토큰 $0 (초기 GPU 비용 제외)
소스코드 외부 전송 있음 (Anthropic) 없음 (완전 로컬)
설치 난이도 낮음 중간 (GPU 설정 필요)
컨텍스트 1M 토큰 32K~64K (LM Studio 설정)
속도 (토큰/초) ~80 t/s RTX 4090: ~40 t/s (Q4)
멀티모달 ✅ ❌ (텍스트만)
Computer Use ✅ ❌
인터넷 없이 사용 ❌ ✅
기업 CISO 통과 어려움 쉬움 (데이터 로컬)
결론:
성능 최우선 → Claude Code
비용·프라이버시 → OpenCode + Qwen3-Coder
기업 보안 요구사항 → OpenCode (+ 내부 서버 vLLM)
트러블슈팅 — 자주 겪는 문제
# 문제 1: 툴 호출이 안 됨 (가장 흔함)
# 원인: 채팅 템플릿 설정 미흡
# 해결:
# LM Studio → Model Settings → Chat Template → chatml 선택
# 또는 Qwen 공식 채팅 템플릿 수동 입력
# 문제 2: "context length exceeded" 오류
# 원인: OpenCode 최소 16K 컨텍스트 요구
# 해결: LM Studio Load 탭 → Context Length 32768로 변경
# 문제 3: OpenCode 모델 인식 안 됨
# 원인: config.json 모델 ID 불일치
# 해결: LM Studio API에서 정확한 모델 ID 확인
curl http://localhost:1234/v1/models | python3 -m json.tool
# → id 필드의 정확한 문자열을 config.json에 사용
# 문제 4: 속도 너무 느림
# 해결: Q4_K_M 양자화 사용 + GPU Offload 100% 확인
# Apple: Metal GPU 가속 활성화 확인
# NVIDIA: CUDA 버전 확인 (vLLM은 CUDA 12.1+)
# 문제 5: 인증 오류
# 해결: opencode auth login 재실행
# Provider ID가 config.json의 provider 키와 일치하는지 확인
결론
✅ 지금 바로 시작할 수 있는 조합
- RTX 4090 보유: Qwen3-Coder-30B-A3B Q4 + LM Studio + OpenCode
- Apple M2 Max: Qwen3-Coder-30B-A3B-MLX-4bit + LM Studio + OpenCode
- GPU 서버: Qwen3-Coder-Next + vLLM + OpenCode
✅ 로컬 에이전트가 확실히 유리한 케이스
- 소스코드 외부 전송이 정책상 불가한 기업
- API 비용을 줄이고 싶은 개인 개발자
- 인터넷 없는 환경 (오프라인, 보안망)
- 실험적 코드베이스 — 모델에게 보여주기 꺼려지는 코드
❌ API 에이전트가 여전히 더 나은 케이스
- 최고 성능 필요 (SWE-Bench 79.6% vs 70.6%)
- GPU 없음
- Computer Use 필요
- 멀티모달 입력 필요
'AI 개발' 카테고리의 다른 글
| AI 코딩 도구 6파전 — Cursor, Copilot, Claude Code, Windsurf, Kiro, Cline 완전 비교 (0) | 2026.06.01 |
|---|---|
| AI 코딩 도구 Eval 설계 — Claude Code·Cursor·Copilot 팀 도입 전 성능 측정 방법론 (0) | 2026.05.29 |
| Antigravity 쿼터 사태 전말 — 출시 2일, 9배 증가, Flash Low 긴급 출시까지 6일의 기록 (0) | 2026.05.29 |
| Cloudflare가 LLM 추론을 두 단계로 쪼갠 이유 — Workers AI 인프라 완전 해부 (0) | 2026.05.27 |
| LiteLLM Load Balancing 4편 — 시맨틱 라우팅, 커스텀 전략, 실전 아키텍처 3가지 (0) | 2026.05.26 |