월 20달러 AI 툴을 로컬 모델로 교체했다: 내 풀스택
출처: Dev.to
저는 Copilot에 매달 $20을 내고, 사이드 프로젝트마다 Claude API를 찾아다녔습니다. 그러다 계산해 보니, Copilot, 코드 리뷰 SaaS 체험판, 가끔씩 쓰는 ChatGPT Plus까지 합쳐서 매달 실제 돈을 태우고 있었습니다. 4GB 모델 하나면 제 컴퓨터에서 충분히 처리할 수 있는 작업들을 말이죠. 그래서 모든 것을 다 허물고 로컬‑우선으로 다시 구축했습니다. 아래는 정확히 어떤 스택을 사용했는지, 각 요소가 무엇을 대체했는지, 그리고 아직도 클라우드에 비용을 내는 부분을 정리한 표입니다.
내가 사용하던 비용 vs 현재 사용 비용
| 작업 | 클라우드 도구 | 지불 금액 | 로컬 대체 | 현재 |
|---|---|---|---|---|
| 자동완성 + 인라인 채팅 | GitHub Copilot | $10/월 | qwen2.5-coder:7b via Continue | $0 |
| 코드 리뷰 | 리뷰 SaaS | ~$15/월 | 로컬 리뷰 프롬프트 + qwen | $0 |
| 커밋 메시지 | Copilot / Cursor | 번들 포함 | qwen2.5-coder:1.5b git hook | $0 |
| 내 문서에 대한 Q&A | ChatGPT Plus | $20/월 | Ollama + 로컬 RAG | $0 |
| 복잡한 추론 / 배포 | Claude API | 토큰당 결제 | 여전히 Claude (토큰당 결제) | 토큰당 결제 |
정기 구독료는 대략 $45/월에서 $0으로 줄었습니다. Claude는 여전히 토큰당 결제하지만, 실제로 필요한 경우에만 사용하므로 월 몇 달러 수준으로 감소했습니다.
이 모든 것이 특수한 것이 아닙니다. 저는 Windows 노트북에 WSL2를 통해 다음 사양으로 실행합니다: Ryzen 7, 32GB RAM, 8GB VRAM을 가진 RTX GPU. 여기서 GPU가 가장 큰 역할을 합니다. 7B 모델은 8GB VRAM에 들어가며 인터랙티브하게 응답합니다. 1.5B 모델은 GPU가 없더라도 CPU만으로 충분히 동작하므로, 백그라운드 작업에 주로 사용합니다.
CPU만 있는 경우에도 아래 모든 것이 동작합니다. 다만 작은 모델을 사용하게 되고, 긴 프롬프트는 더 오래 걸린다는 점을 감안해야 합니다. 구독을 취소하기 전에 스스로에게 솔직해지세요.
자동완성
자동완성은 가장 의심받는 부분이므로 여기서부터 시작합니다. 저는 VS Code의 Continue 확장 프로그램을 Ollama에 연결해 사용합니다. 설정은 순수 JSON입니다:
{
"models": [
{
"title": "qwen-chat",
"provider": "ollama",
"model": "qwen2.5-coder:7b"
}
],
"tabAutocompleteModel": {
"title": "qwen-autocomplete",
"provider": "ollama",
"model": "qwen2.5-coder:1.5b"
}
}
두 모델을 의도적으로 사용합니다. 자동완성은 속도가 가장 중요하므로 1.5B 모델을 쓰며, 제 GPU에서는 1초 이내에 제안을 반환합니다. 실제 답변이 필요할 때는 7B 모델을 사용합니다.
Copilot만큼 좋은가요? 아니요, 그리고 거짓말도 하지 않겠습니다. Copilot의 다중 라인 완성은 더 똑똑하고, 레포 전체에 대한 이해도도 뛰어납니다. 하지만 제가 이미 타이핑하고 있는 한 줄을 마무리하거나, 루프를 닫거나, 명백한 객체 리터럴을 채우는 정도라면 로컬 모델이 충분히 좋습니다. 일주일 정도 사용해 보니 차이를 거의 느끼지 못했습니다. 차이는 길고 새로운 완성에서 드러나는데, 그때는 오히려 스스로 생각하고 싶으니까요.
코드 리뷰
SaaS에 비용을 내어 diff에 코멘트를 달게 하는 대신, 제 워크플로에 작은 리뷰 단계를 직접 만들었습니다. 스테이징된 diff를 Ollama에 전달하고, 집중된 프롬프트를 사용합니다:
review() {
git diff --staged | ollama run qwen2.5-coder:7b \
"You are a senior reviewer. Point out bugs, missing error
handling, and unsafe patterns in this diff. Be specific and
terse. If it looks fine, say so. Diff follows:"
}
핵심은 프롬프트를 좁히는 것입니다. 7B 모델에 “이 코드를 리뷰해줘”라고 하면 애매한 칭찬만 나오지만, “버그, 누락된 에러 처리, 위험한 패턴을 찾아줘”라고 하면 실제로 적용 가능한 피드백을 얻습니다. 미처 잡아내지 못하는 건 아키텍처 수준의 문제나 전체 시스템 이해가 필요한 경우이며, 이는 여전히 사람의 눈이 필요합니다. 저는 이를 피곤하지 않은 두 번째 눈으로 활용합니다.
커밋 메시지 자동 생성
아래 스크립트는 백그라운드에서 완전히 동작하며, 저는 전혀 신경 쓰지 않습니다. prepare-commit-msg 훅이 스테이징된 diff를 작은 모델에 전달합니다:
#!/usr/bin/env bash
set -euo pipefail
diff=$(git diff --staged)
[ -z "$diff" ] && exit 0
msg=$(printf '%s' "$diff" | ollama run qwen2.5-coder:1.5b \
"Write a concise git commit message in imperative mood, under
72 chars for the subject. Output only the message, no quotes.")
printf '%s\n' "$msg" > "$1"
여기서도 1.5B 모델을 의도적으로 사용합니다. 작업이 충분히 제한적이라 작은 모델이 정확히 처리하고, 속도가 중요합니다. 저는 결과를 직접 읽고 수정하지만, 주제 줄은 80% 정도 정확히 생성하고 나머지는 손볼 뿐입니다. 1GB 모델이 0.5초 만에 무료로 해 주니, 구독료를 내는 건 말도 안 되는 일입니다.
로컬 RAG (문서 검색)
이 부분이 제가 ChatGPT Plus를 조용히 대체한 영역입니다. 예전엔 프로젝트 README와 메모를 복사‑붙여넣기해서 “프로바이더 추상화를 어떻게 했지?”라고 물었죠. 이제는 로컬 검색 환경을 구축했습니다. 문서는 nomic-embed-text 로 Ollama를 통해 임베딩되고, 벡터는 로컬 스토어에 저장됩니다. 쿼리는 관련 청크를 끌어온 뒤 7B 모델에 전달됩니다:
const embed = async (text: string): Promise<any> => {
const res = await fetch("http://localhost:11434/api/embeddings", {
method: "POST",
body: JSON.stringify({ model: "nomic-embed-text", prompt: text }),
});
const data = await res.json();
return data.embedding;
};
전체 과정이 오프라인입니다. 제 노트, 아직 공개되지 않은 코드, 구상 중인 아이디어가 절대 머신을 떠나지 않죠. 스마트 계약 보안 작업을 하는 입장에서는 클라우드에 고객 코드나 미공개 결과를 올리는 것이 큰 위험이었는데, 이제는 그런 고민이 사라졌습니다.
언제 클라우드 Claude를 쓰는가
“로컬‑우선”이 곧 “로컬‑전용”이라는 뜻은 아닙니다. 저는 두 가지 상황에서 Claude API를 여전히 사용합니다.
- 복잡한 추론 – spectr‑ai가 세 계약이 어떻게 상호 작용해 공격 경로를 만들 수 있는지 추론해야 할 때, 로컬 모델은 엉망이 됩니다. Claude는 다단계 추론에 훨씬 강력하므로, spectr‑ai의 깊은 감사 모드는 기본적으로 Claude를 사용합니다.
- 프로덕션 품질 – spectr‑ai와 AbiLens는 모두
provider플래그를 가집니다. 개발·데모·프라이버시가 중요한 경우는--provider ollama로 Ollama를 쓰고, 최고의 감사를 원하고 비용을 지불해도 괜찮은 경우는 Claude로 라우팅합니다. 처음부터 만든 프로바이더 추상화 덕분에 한 줄만 바꾸면 됩니다:
const provider = createProvider(options.provider); // "ollama" | "claude"
즉, 하루 종일 쓰는 작업은 로컬, 드물게 최첨단 모델이 필요하거나 다른 사람이 결과를 의존하는 경우에만 클라우드라는 규칙을 따릅니다.
비용과 품질
이걸 “무료”라고 포장한다면 거짓말이 됩니다.
- 품질 격차 – 패턴 인식, 코드 자동완성, 요약 등에서는 차이가 작지만, 새로운 추론이나 긴 컨텍스트 작업에서는 Claude가 확실히 앞섭니다.
- 속도 – 전적으로 하드웨어에 달려 있습니다. GPU에서는 7B 모델이 인터랙티브하게 동작하지만, CPU만 있으면 긴 프롬프트가 1분 이상 걸릴 수도 있습니다. 무료 점심