Qwen Coder & DeepSeek 로컬 실행하기: 2026년형 무료 AI 페어 프로그래머 설정
요약
Qwen Coder와 DeepSeek 모델을 활용하여 구독료 없이 로컬 환경에서 AI 페어 프로그래머를 구축하는 방법을 소개합니다. Ollama와 Continue.dev를 사용하여 개인정보를 보호하며 오프라인에서도 코딩 자동 완성 및 리팩토링을 수행할 수 있습니다.
핵심 포인트
- Ollama와 Continue.dev를 활용한 완전 무료 로컬 AI 설정
- 보안 및 프라이버시 강화를 위한 오프라인 코딩 환경 구축
- 사용자 RAM 용량에 따른 최적의 모델(Qwen, DeepSeek) 선택 가이드
- 자동 완성용 경량 모델과 채팅용 고성능 모델의 혼합 사용 전략
당신은 Copilot을 위해 매달 10달러에서 20달러를 지불하고 있습니다. 그럴 필요 없습니다. 2024년형 노트북으로도 자동 완성 (autocomplete), 리팩토링 (refactors), 그리고 "이 함수를 설명해줘"와 같은 작업을 완전히 오프라인으로 수행할 수 있는 충분히 좋은 코딩 모델을 실행할 수 있습니다. API 키도, 텔레메트리 (telemetry)도, 토큰당 비용 청구도 없습니다. 여기 제가 16GB 사양의 머신에서 실행 중인 정확한 2026년형 설정이 있습니다.
2026년에 왜 로컬인가
2년 전만 해도 로컬 코딩 모델은 장난감 수준이었습니다. 자동 완성 (autocomplete)은 느렸고 제안 내용은 소음과 같았습니다. 하지만 이제 바뀌었습니다. qwen2.5-coder와 deepseek-coder-v2는 이제 진정으로 유용하며, 도구들도 따라잡았습니다. Ollama가 이 모델들을 제공하고, Continue.dev가 이를 당신의 에디터에 연결하며, 이 모든 것이 당신이 이미 소유하고 있는 하드웨어에서 실행됩니다.
핵심은 간단합니다:
- 무료. 구독료도, 사용량 제한도 없습니다.
- 프라이빗 (Private). 당신의 독점적인 코드는 절대 머신을 떠나지 않습니다. 이는 스마트 컨트랙트 (smart contracts)나 NDA(비밀 유지 계약) 하에 있는 작업을 할 때 매우 중요합니다.
- 오프라인. 비행기 안에서, 지하실에서, 혹은 기업 방화벽 뒤에서도 작동합니다.
트레이드오프 (tradeoff)는 품질과 지연 시간 (latency)입니다. 우리는 이 두 가지 모두에 대해 솔직할 것입니다.
모델 선택하기 (그리고 RAM에 맞추기)
이것은 경험의 성패를 결정짓는 결정입니다. 머신이 실제로 메모리에 담을 수 있는 모델을 선택하세요. 그렇지 않으면 디스크로 스필 (spill)되어 매우 느려집니다.
# 빠르고 어디든 적합함 (8GB+)
ollama pull qwen2.5-coder:1.5b # ~1.0GB
ollama pull qwen2.5-coder:3b # ~1.9GB
...
대략적인 규칙: 모델 파일 크기가 최솟값이며, 여기에 컨텍스트 (context)와 OS를 위해 몇 GB를 더 추가해야 합니다. 16GB 머신에서 4.7GB 모델은 쾌적합니다. 동일한 머신에서 20GB 모델은 쾌적하지 않습니다.
| 모델 | 크기 | 권장 RAM | 용도 |
|---|---|---|---|
qwen2.5-coder:1.5b | 1.0GB | 8GB | 자동 완성 (Autocomplete), 빠른 반복 작업 |
| ... | |||
deepseek-coder-v2는 16b MoE (mixture-of-experts) 모델이므로, 파일 크기가 시사하는 것보다 더 강력한 성능을 발휘합니다. 토큰당 불과 몇십억 개의 파라미터 (parameters)만 활성화되기 때문입니다. qwen2.5-coder:7b가 얕은 답변을 줄 때 제가 찾는 모델입니다. |
양자화 (quantization)에 관한 참고 사항: 해당 파일 크기는 Ollama가 제공하는 기본 4-bit 양자화 (4-bit quants) 모델입니다. 노트북 환경에서는 이 설정이 적절합니다. 약간 더 나은 결과물을 위해 qwen2.5-coder:7b-instruct-q8_0와 같이 더 높은 정밀도의 태그를 가져올 수 있지만, 메모리 사용량과 속도 비용이 대략 두 배로 늘어납니다. 일상적인 코딩 작업에서는 그 차이를 느끼지 못했습니다. 우선 기본값으로 시작하세요.
16GB 환경에서의 실제 제 설정은 다음과 같습니다: 인라인 자동 완성 (inline autocomplete)을 위해 qwen2.5-coder:1.5b를 사용합니다 (속도가 빠르지 않으면 무용지물이기 때문입니다). 2초 정도는 기다릴 수 있는 채팅 사이드바용으로는 qwen2.5-coder:7b를 사용합니다. 가끔 발생하는 까다로운 문제를 위해 deepseek-coder-v2를 다운로드(pull)해 두되 로드(load)는 하지 않은 상태로 유지하며, 필요할 때 Ollama가 이를 교체하여 불러오도록 합니다.
Ollama 설치 및 실행
# Linux / WSL
curl -fsSL https://ollama.com/install.sh | sh
...
서버를 시작합니다. 서버는 localhost:11434에서 대기합니다:
ollama serve
서버가 작동 중인지, 모델이 응답하는지 확인합니다:
ollama run qwen2.5-coder:7b "Write a TypeScript debounce function"
코드가 출력된다면, 로컬 LLM이 정상적으로 작동하는 것입니다. 나머지는 모두 연결 작업일 뿐입니다.
Continue.dev를 사용하여 에디터에 연결하기
Continue.dev는 Ollama를 에디터 어시스턴트로 변환해 주는 오픈 소스 확장 프로그램입니다. 채팅, 인라인 편집 (코드를 하이라이트하고 Cmd/Ctrl+I를 눌러 변경 사항 설명), 그리고 탭 자동 완성 (tab autocomplete) 기능을 제공합니다. VS Code 또는 JetBrains 마켓플레이스에서 설치한 후, 로컬 모델을 가리키도록 설정하세요.
~/.continue/config.yaml 파일을 편집합니다:
name: Local pair programmer
version: 1.0.0
schema: v1
...
두 개의 모델, 두 개의 역할입니다. 1.5b 모델은 밀리초 단위의 속도가 중요한 탭 자동 완성의 긴밀한 피드백 루프를 처리합니다. 7b 모델은 더 나은 답변을 위해 짧은 대기 시간을 감수할 수 있는 채팅 및 다중 행 편집을 처리합니다.
VS Code를 재시작하고, Continue 사이드바를 연 다음 현재 열려 있는 파일에 대해 질문해 보세요. 이 도구는 에디터의 컨텍스트 (context)를 읽고 여러분의 실제 코드에 기반하여 로컬에서 답변을 제공합니다.
만약 Continue를 건너뛰고 공식적인 Copilot 스타일의 훅 (hook)을 사용하고 싶다면, 최신 VS Code 버전에서는 채팅 패널에서 http://localhost:11434를 가리키는 Ollama를 커스텀 모델 제공자 (custom model provider)로 추가할 수 있습니다. 하지만 자동 완성 (autocomplete) 튜닝 측면에서는 여전히 Continue가 더 유연한 옵션입니다.
알아둘 만한 점 한 가지는, 자동 완성 (autocomplete)과 채팅 (chat)은 내부적으로 서로 다른 프롬프트 형식 (prompt formats)을 사용한다는 것입니다. Continue는 여러분이 autocomplete 역할을 할당하면, Qwen Coder 모델들이 학습된 FIM (fill-in-the-middle) 템플릿을 선택하여 이 과정을 대신 처리해 줍니다. 만약 인라인 제안 (inline suggestions)이 깨져서 나온다면, 이는 거의 항상 채팅 전용 모델이 자동 완성 역할을 할당받았기 때문입니다. qwen2.5-coder 제품군은 모든 크기에서 FIM (fill-in-the-middle)을 지원하며, 이것이 제가 두 작업 모두에 이 모델을 사용하는 이유입니다.
fetch를 이용한 30초 정상 작동 확인
어떤 에디터 통합 기능을 신뢰하기 전에, 서버에 직접 요청을 보내보세요. Ollama는 OpenAI 호환 엔드포인트 (endpoint)를 노출하므로, SDK 없이도 다음과 같이 작동합니다:
const response = await fetch("http://localhost:11434/v1/chat/completions", {
method: "POST",
headers: { "Content-Type": "application/json" },
...
API 키도 필요 없고, 계정도 필요 없습니다. 만약 이 요청이 "더하기 대신 빼기를 합니다"라는 답변을 반환한다면, 여러분의 로컬 페어 프로그래머 (pair programmer)는 온라인 상태이며 그 위에 무엇이든 구축할 수 있습니다.
스트리밍 UI (토큰 단위로 생성되는 효과)를 구현하려면, stream: true로 설정하고 응답 본문 (response body)을 스트림 (stream)으로 읽으세요. OpenAI와 동일한 엔드포인트 구조를 가지므로, OpenAI를 대상으로 하는 클라이언트 라이브러리라면 베이스 URL (base URL)만 변경하여 바로 사용할 수 있습니다.
지연 시간 (Latency): 실제로 기대할 수 있는 것
수치는 전적으로 하드웨어에 따라 달라지므로, 조작된 벤치마크 (benchmarks) 대신 제 사양(16GB RAM, 내장 GPU, Windows의 WSL2)에서 확인한 결과를 공유합니다:
- 시작 후 첫 호출은 느립니다. 모델은 메모리에 한 번 로드됩니다.
qwen2.5-coder:7b의 경우 몇 초 정도 걸립니다. 그 이후에는 워밍업(warm) 상태를 유지합니다. 1.5b를 이용한 자동 완성(Autocomplete)은 켜두기에 충분할 만큼 즉각적입니다. 그것이 해당 역할에 작은 모델을 사용하는 유일한 이유입니다.- **
7b를 이용한 채팅(Chat)**은 약 1~2초 내에 스트리밍이 시작되며 편안한 속도로 읽을 수 있습니다. 긴 멀티 파일 프롬프트(multi-file prompts)는 더 느립니다. - 실제 GPU를 사용하면 모든 것이 바뀝니다. 외장 NVIDIA 카드가 장착된 머신에서는 동일한 모델들이 몇 배 더 빠르게 실행되며, 더 큰 모델들도 실용적으로 사용할 수 있습니다. 순수 CPU 환경이라면
1.5b나3b모델을 사용하세요. 그렇지 않으면 계속 기다려야 할 것입니다.
팁: ollama serve를 하루 종일 백그라운드에서 실행 상태로 유지하세요. 요청마다 시작하고 중단하지 마세요. 매번 로딩 비용을 지불하게 됩니다.
성능 팁 (Performance tips)
- 자동 완성용 작은 모델 하나, 채팅용 큰 모델 하나를 사용하세요.
deepseek-coder-v2에게 탭 완성(tab completion)을 맡기지 마세요. 지연 시간(latency)이 흐름을 끊습니다. - 코드 작성 시
temperature: 0으로 설정하세요. 창의적인 답변이 아닌 결정론적(deterministic)인 답변이 필요합니다. - 모델을 RAM 용량에 맞추세요. Ollama가 디스크로 스와핑(swapping)을 시작하면 즉시 성능 저하를 느끼게 됩니다. 모델 크기를 낮추세요.
- 컨텍스트 윈도우(context window)를 줄이세요. 32k 토큰이 필요하지 않다면 말입니다. 컨텍스트가 작을수록 메모리 사용량이 적고 응답 속도가 빨라집니다. 모델의 Continue 설정이나 커스텀
Modelfile에서 설정하세요. - 로그인 시 모델을 미리 로드(Warm)하세요. 시작 시
ollama run qwen2.5-coder:7b ""명령어를 한 번 실행해 두면 모델이 프리로드(preload)되어 첫 번째 실제 프롬프트가 느려지는 것을 방지할 수 있습니다. - 모든 구조화된 출력(structured output)을 검증하세요. 작은 모델은 가끔 JSON 형식을 망가뜨립니다. Zod로 파싱하고 실패 시 재시도하세요.
로컬 모델이 충분한 경우 (그리고 그렇지 않은 경우)
저는 하루 중 대부분의 시간을 로컬 모델을 사용하며, 문제가 정말 어려울 때만 Claude를 찾습니다. 솔직한 구분 기준은 다음과 같습니다:
| 작업 (Task) | 로컬 (Local) (7b / deepseek) | 클라우드 사용 (Reach for cloud) |
|---|---|---|
| 인라인 자동 완성 (Inline autocomplete) | 훌륭함 (Great) | 과함 (Overkill) |
| ... |
클라우드는 여전히 어려운 추론 (Reasoning)과 최신 API에 대한 지식 측면에서 승리합니다. 하지만 하루의 대부분을 차지하는 작고 반복적인 코딩 질문들의 양을 고려할 때, 로컬 모델은 단순히 "대체용으로 충분한" 수준이 아니라, 그 자체로 충분히 훌륭합니다. 2024년에 존재했던 품질 격차는 일상적인 업무 영역에서는 대부분 해소되었습니다.
제가 실행하는 환경
저의 AI 스마트 컨트랙트 감사(Smart-contract auditor) 도구인 spectr-ai를 구축할 때, 바로 이러한 이유로 엔진을 특정 제공자(Provider)에 종속되지 않도록 설계했습니다. 동일한 분석을 Claude를 대상으로 실행할 수도 있고, Ollama를 대상으로 실행할 수도 있습니다:
# 로컬, 무료, API 키 불필요, 컨트랙트가 기기를 절대 떠나지 않음
pnpm --filter @spectr-ai/engine dev -- \
--model ollama:qwen2.5-coder:1.5b examples/vulnerable.sol
스마트 컨트랙트 작업에서 "기기를 절대 떠나지 않는다"는 부분은 있으면 좋은 기능(Nice-to-have) 정도가 아닙니다. 감사(Audit) 고객들은 아직 공개되지 않은 자신들의 코드가 제3자 API로 전송되는 것을 원하지 않습니다. 로컬 모델을 통해 개인정보를 보호하는 1차 검토(First pass)를 수행한 다음, 흥미로운 결과들을 Claude로 에스컬레이션(Escalate)합니다.
Copilot 구독을 갱신하기 전에 qwen2.5-coder:7b를 실행하고, Continue를 연결하여 일주일 동안 사용해 보세요. 설정에는 20분이 소요되며, 그 이후에는 월 비용이 0달러입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기