무료 로컬 코드 AI, 전용 모델이 꼭 필요할까 — qwen2.5-coder vs gemma3 내 PC 실측 (2026)
"코딩은 무조건 코딩 전용 AI 모델을 써야 한다." 다들 이렇게 말하고, 도구 커뮤니티를 뒤지면 이 말이 정설처럼 박혀 있습니다. 그런데 이게 재본 사실인지 그냥 굳어진 착각인지는 아무도 숫자로 안 보여주더군요. 코딩 구독료가 매달 통장에서 조용히 빠져나가는 걸 지켜보던 1인 기업가 시네는, 그 정설을 곧이곧대로 믿는 대신 대질을 붙였습니다.
월급 한 푼 안 나가는 코딩 일꾼 둘을 집 그래픽카드에 직접 올렸습니다 — 코딩 전용 qwen2.5-coder:7b와, 손에 이미 있던 범용 gemma3:4b. 둘에게 똑같은 파이썬 문제를 던진 뒤, 나온 코드를 말로만 평가하지 않고 실제로 실행해서 맞는지 틀리는지 눈으로 확인했어요. 코드 실측의 핵심은 '그럴듯해 보인다'가 아니라 '돌아간다'거든요. 궁금한 건 딱 하나였습니다 — 전용 모델이 없으면, 있는 범용 모델로는 코딩을 못 시키나?
뭘 어떻게 테스트했나
돈 한 푼 안 들이고 검증하겠다면서 코드를 눈으로만 훑고 "맞네" 하면, 그 착각의 대가는 나중에 버그로 돌려받습니다. 공짜 일꾼일수록 검수를 건너뛰면 그 뒷수습은 결국 사장 몫이거든요. 무료로 굴리는 녀석이라도 성과는 숫자로 받아내야죠. 그래서 채점 기준부터 실행 가능하게 잡았어요.
- 문제(고정): "파이썬으로 주어진 정수 리스트에서 중복을 제거하고 내림차순 정렬하는 함수
dedup_sort(nums)를 작성하고, 예시 입력[3,1,2,3,1]에 대한 출력도 보여줘." — cinevyze 표준 테스트셋의 코드 태스크(TXT-02)입니다. - 채점(정량): 생성된 코드를 그대로 떼어내 실제 실행. 예시 입력에 더해 엣지 케이스 4종(빈 리스트
[], 원소 하나[5], 음수·중복[-1,-1,0,2,2,2], 전부 같은 값[10,10,10])까지 총 5가지 입력을 함수에 먹여 기대 출력과 대조했습니다. - 모델: 코딩 전용
qwen2.5-coder:7b(약 4.7GB) vs 범용gemma3:4b(약 3.3GB). 둘 다 오픈웨이트·무료이고,ollama로 로컬 그래픽카드에서 구동했습니다(구독료·API 키·인터넷 전부 불필요). - 측정 조건: 각 모델에 같은 요청을 3번씩 반복해 회차 편차를 봤습니다. 측정 시점은 2026년 7월이고, 모델·런타임은 갱신되니 시점 기준으로 읽어주세요.
실측 결과 — 둘 다 정답, 갈린 건 다른 데였다
정확성만 보면 월급 한 푼 안 나가는 두 녀석 다 만점이었습니다. 내놓은 코드를 실제로 돌려 보니, 예시 입력은 물론 엣지 케이스 4종까지 전부 기대값과 일치했어요 — 전용 모델의 존재 이유가 살짝 머쓱해지는 순간이었죠. 아래는 회차값을 뭉개지 않고 그대로 옮긴 표입니다.
| 항목 | qwen2.5-coder:7b (전용) | gemma3:4b (범용) |
|---|---|---|
| 실행검증 | 3회차 × 5입력 = 15건 통과 | 3회차 × 5입력 = 15건 통과 |
| 접근 방식 | sorted(set(nums), reverse=True) (3회 중 2회) |
sorted(list(set(nums)), reverse=True) (3회 전부) |
| 회차별 코드 흔들림 | 2회차만 list(set(...))+.sort() 두 줄로 |
세 번 다 핵심 한 줄 동일(설명 문구는 매번 다름) |
| 순수 생성 속도(토큰/초) | 126.3 · 125.9 · 126.1 | 169.1 · 169.7 · 170.0 |
| 같은 프롬프트의 입력 토큰 수 | 85 | 64 |
| 출력 분량 | 281 · 303 · 339자 | 683 · 985 · 1,047자 |
| 순수 생성 시간 | 1.07 · 1.07 · 1.22초 | 1.93 · 3.13 · 3.16초 |
| 응답 완료 시간 | 12.91 · 3.19 · 3.33초 | 5.30 · 6.60 · 6.62초 |
| 구동 비용 | 무료·오프라인 | 무료·오프라인 |
코드를 눈으로 보지 않고 돌려봤습니다 — 30건 전부 통과
'전부 통과'라는 말만 남기면 그건 결국 주장입니다. 그래서 두 녀석의 6회차 출력에서 함수 정의부만 떼어내 5가지 입력으로 다시 굴렸고, 회차별 결과를 파일로 남겼습니다. 결과는 30건(6회차 × 5입력) 전부 기대값 일치였어요.
- 예시 입력
[3,1,2,3,1]→[3,2,1]· 빈 리스트[]→[]· 원소 하나[5]→[5]· 음수·중복[-1,-1,0,2,2,2]→[2,0,-1]· 전부 같은 값[10,10,10]→[10] - 검증에 쓴 파이썬은 3.14.4입니다. 추출한 함수 원문·입력·기대값·실제 출력은 아래 참고자료의 기록 파일에 그대로 들어 있습니다.
여기서 복붙 검수하는 분들이 걸리기 쉬운 함정을 하나 만났습니다. 두 모델 다 코드블록 안에 자기 사용 예시(nums = [3, 1, 2, 3, 1]과 print(...))를 같이 붙여놨는데, 그걸 통째로 실행하면 모델이 심어둔 print가 먼저 찍혀서 채점 출력이 오염됩니다. def부터 함수 본문 끝까지만 잘라내야 깨끗하게 채점됩니다. AI가 준 코드를 그대로 테스트에 밀어 넣기 전에 잘라낼 곳이 있다는 뜻이죠.
토큰/초 숫자엔 함정이 있습니다
표를 보면 gemma3가 170토큰/초로 qwen(126토큰/초)을 1.34배 앞선 것처럼 보입니다. 그런데 로그를 열어 보니 같은 한국어 프롬프트를 qwen은 85토큰으로, gemma3는 64토큰으로 쪼갰어요. 토큰은 모델마다 다른 자입니다. 자가 다른데 '초당 몇 자'를 그대로 맞대면 사과와 오렌지를 비교하는 셈이죠.
그래서 눈에 보이는 단위인 글자 수로 다시 나눠봤습니다. qwen은 초당 263~283자, gemma3는 314~354자였습니다. 1.34배로 벌어져 보였던 차이가 약 1.2배로 좁혀집니다. 어떤 일꾼을 부려먹을지 고르면서 벤치마크의 토큰/초만 보면 안 되는 이유가 여기 있어요. 클라우드 유료 모델과 같은 문제를 붙였을 때의 시간 구조는 gemma3 대 클라우드 대질 실측에 따로 정리해 뒀습니다.
흔들린 쪽이 기대와 반대였다
같은 문제를 세 번씩 굴려 보니, 코드 형태가 회차마다 흔들린 건 전용 코더 녀석 쪽이었습니다. qwen은 3회 중 2회가 sorted(set(nums), reverse=True) 한 줄, 2회차만 list(set(nums))로 받아 .sort(reverse=True)를 부르는 두 줄짜리였어요(결과는 같습니다). 범용 gemma3는 세 번 다 핵심 한 줄이 글자까지 같았습니다.
그런데 '분량'으로 질문을 바꾸면 답이 뒤집힙니다. gemma3의 출력은 683자 → 985자 → 1,047자로 회차 간 1.53배까지 흔들렸고, qwen은 281자 → 303자 → 339자로 1.21배에 머물렀습니다. 코드 형태의 일관성은 범용 모델이, 분량의 일관성은 전용 모델이 가져간 셈이죠. 자동화 파이프라인에 물릴 거라면 모델 급보다 내가 무엇의 일관성을 원하는지를 먼저 정해야 합니다.
정정 하나. 이 글의 이전 판은 gemma3 출력을 "약 900자"·"3~4배 긴 답"이라고 적었습니다. 평균(905자)으로는 맞지만 683~1,047자라는 범위를 뭉갠 표현이었고, 회차를 짝지어 재보면 2.43배 · 3.25배 · 3.09배(평균 2.9배)라 "3~4배"는 상한을 부풀린 표현이었습니다. 위 회차값으로 바꿨습니다.
콜드 로딩은 qwen에만 잡혔다
응답 완료 시간에서 순수 생성 시간을 빼면 '생성 외 시간'이 남습니다. qwen은 11.84초 · 2.12초 · 2.11초 — 첫 호출에만 약 9.7초가 더 붙었습니다. 4.7GB짜리 녀석을 그래픽카드에 처음 올려 세우는 값이죠. 출근시켜 놓기만 하면 그다음부터는 야근 수당도 없이 계속 받아쓸 수 있습니다.
gemma3는 3.37초 · 3.47초 · 3.46초로 첫 호출에 로딩 페널티가 잡히지 않았습니다. 3.3GB라 빨랐을 수도 있고 직전 테스트에서 이미 메모리에 올라와 있었을 수도 있는데, 남은 로그로는 둘을 구분할 수 없어 확인 불가로 둡니다. 그러니 "gemma3는 콜드 로딩이 없다"로 읽지 말아 주세요 — 이 회차에서 안 잡혔다는 뜻입니다. 모델 크기와 그래픽카드 메모리가 어디서 벽에 부딪히는지는 모델 크기·VRAM 사다리 실측에 정리해 뒀습니다.
그럼 전용 코더 모델, 받아야 하나 말아야 하나
월급 안 주는 일꾼을 하나 더 들일지 말지, 계산기를 두드려 보면 답은 '무엇을 시키느냐'로 좁혀집니다.
- 일상적인 짧은 함수·자잘한 스크립트가 대부분이라면 — 굳이 전용 모델을 따로 받지 않아도 됩니다. 이미 깔려 있는 범용 모델이 정답을 냈고, 오히려 설명이 더 친절했어요. 코딩을 배우는 중이라면 gemma3의 단계별 해설이 되레 교재가 되고, 디스크 4.7GB와 다운로드 시간도 아낍니다.
- 코드를 하루에도 수십 번, 빠른 회전으로 뽑아야 한다면 — 워밍업만 넘기면 전용 모델의 호출당 3.2초대·간결한 출력이 쌓여서 체감 차이를 만듭니다. 유료 클라우드 모델이 같은 작업을 어떤 시간에 처리하는지는 Gemini 3.1 Pro 실무 3종 실측과 함께 보면 감이 잡힙니다.
이 숫자, 이렇게만 읽어주세요
공짜 녀석들을 칭찬하고 끝내면 그건 광고죠. 이 테스트엔 전제가 몇 개 붙고, 그걸 확인하는 건 결국 사람 몫입니다.
- 이건 '쉬운' 문제였습니다.
dedup_sort는 파이썬 기본기로 풀리는 태스크라, 웬만한 최신 모델이면 다 맞힙니다. 알고리즘 설계, 긴 컨텍스트 리팩터링, 여러 파일에 걸친 버그 수정 같은 어려운 과제에선 전용 코더 모델이 더 나은 결과를 낼 여지가 크지만, 그건 이번 쉬운 태스크로는 확인하지 못한 영역이에요. 이 글의 숫자는 '쉬운 과제에서의 하한선 비교'로 읽어주세요. - 속도는 하드웨어·양자화·런타임 설정에 따라 달라집니다. 우리 환경(로컬 그래픽카드·기본 양자화·2026년 7월 기준)의 값이지, 다른 PC에서 똑같이 나온다는 보장은 아닙니다.
- 정확성 점수는 자동 채점이 아니라 '실행 대조'입니다. 직접 만든 엣지 케이스를 실제로 돌려 맞는지 본 것이라, 케이스 밖의 함정까지 다 걸러낸 건 아닙니다. 회차도 모델당 3회뿐이라 법칙으로 못 박진 않겠습니다.
분명한 건 하나입니다 — 그래픽카드만 있으면, 구독료 0원·인터넷 0으로도 간단한 코딩은 이미 충분히 시킬 수 있다는 것. 전용 모델은 그 위에서 '간결함과 빠른 완료'를 얹는 선택지지, '없으면 코딩 자체가 안 되는' 필수품은 아니었습니다.
이 글은 cinevyze 운영자가 해당 모델들을 직접 테스트하고, 생성된 코드를 실제로 실행해 검증한 뒤 결과를 비교·정리·편집했습니다. 무엇을 어떻게 테스트할지·판단·검증은 모두 사람이 했고, 글 다듬는 일부 과정에 AI 도구의 도움을 받았습니다.
참고자료
- qwen2.5-coder 모델 정보 — ollama.com/library/qwen2.5-coder
- gemma3 모델 정보 — ollama.com/library/gemma3
- 실행검증 원본 기록 —
runs/edgecase-verify-2026-07-30.json(6회차 추출 코드 원문·입력 5종·기대값·실제 출력·파이썬 3.14.4·검증 시각) - 회차별 속도·토큰 로그 —
runs/qwen2.5-coder_TXT-02/와runs/gemma3_TXT-02/의0N-invocation.log(tok_per_s·eval_count·prompt_eval_count) - 테스트 방법론 — cinevyze 표준 테스트셋
TXT-02(코드 생성·실행 검증) - 함께 읽기 — gemma3 대 클라우드 대질 · 모델 크기·VRAM 사다리 · Gemini 3.1 Pro 실무 3종
댓글
댓글 쓰기