Mac에서 Gemma 4 로컬 서버 구축 후기 — mlx-lm 설치부터 Claude Code 토큰 절약까지

Apple Silicon · MLX · 로컬 LLM · Claude Code 자동화 | 2026-04-08

Apple Silicon Mac에서 Gemma 4를 완전 로컬로 실행하고, 더 나아가 Claude Code의 gemma-worker 에이전트에 연결해 Sonnet 토큰 소비를 줄이는 방법까지 한 번에 정리합니다. 설치 중 겪은 삽질도 그대로 포함했어요.

⚙️ 환경 & 모델 정보

  • 머신Mac mini M4 · 16 GB 통합 메모리
  • 패키지mlx-lm 0.31.2 · mlx 0.31.1 · Python 3.14 (Homebrew)
  • 모델mlx-community/gemma-4-e4b-it-4bit — 5.25 GB
Apple Silicon GPU 가속 완전 로컬 · 무료 인터넷 최초 1회만 필요

📦 mlx-lm 설치

Homebrew로 설치된 Python 환경에서는 venv(가상환경)를 먼저 만든 뒤 pip으로 설치해야 합니다. 전역 pip 설치는 PEP 668 정책으로 막혀 있어요.

# 1. 가상환경 생성 & 활성화 (최초 1회)
python3 -m venv ~/mlx-env
source ~/mlx-env/bin/activate

# 2. mlx-lm 설치
pip install mlx-lm

Successfully installed mlx-lm-0.31.2 mlx-0.31.1 mlx-metal-0.31.1 ...

💡 다음 터미널 세션부터는

새 터미널을 열 때마다 source ~/mlx-env/bin/activate를 실행해야 mlx_lm 명령어를 쓸 수 있습니다. 아래 쉘스크립트에 포함시켜두면 편해요.


🚀 mlx-lm을 선택한 이유

Mac에서 LLM을 로컬로 돌리는 방법은 여러 가지가 있는데, Apple Silicon 환경에서는 mlx-lm이 가장 효율적인 선택이에요. Ollama나 llama.cpp와 비교했을 때 어떤 점이 다른지 정리해봤습니다.

  • Apple Silicon GPU를 100% 활용 — MLX는 Apple이 직접 만든 ML 프레임워크라 Metal GPU 가속이 네이티브로 붙습니다. Ollama보다 처리 속도가 빠른 경우가 많아요.
  • 통합 메모리(Unified Memory) 최적화 — CPU·GPU가 메모리를 공유하는 Apple Silicon 구조에 맞게 설계되어 메모리 복사 오버헤드가 없습니다.
  • OpenAI API 호환 서버 내장 — mlx_lm.server 한 줄로 OpenAI 형식의 API 서버가 뜨기 때문에, 기존 OpenAI SDK나 curl을 그대로 쓸 수 있어요.
  • HuggingFace 모델 바로 사용 — mlx-community에 올라온 수백 개의 양자화 모델을 모델명 하나로 바로 다운로드·실행 가능합니다.
  • Python 생태계와 완전 통합 — pip로 설치되고 Python 코드에서 바로 load(), generate()로 호출할 수 있어요.
  • 4-bit 양자화(e4b)로 저용량 고성능 — gemma-4-e4b-it-4bit 기준 5.25 GB로 M4 Mac mini 16 GB에서도 여유롭게 실행됩니다.

📊 간단 비교

Ollama: 설치 편의성 최고, 하지만 Metal GPU 활용이 mlx-lm보다 제한적
llama.cpp: 범용성 최고, 하지만 Apple Silicon 최적화는 mlx-lm이 우위
mlx-lm: Apple Silicon 특화 최고 성능 + OpenAI 호환 API + Python 통합


🖥️ 로컬 API 서버 실행

설치가 끝나면 mlx_lm.server로 OpenAI 호환 API 서버를 띄울 수 있어요. 처음 실행 시 HuggingFace에서 모델을 자동으로 다운로드합니다.

mlx_lm.server \
  --model mlx-community/gemma-4-e4b-it-4bit \
  --port 8080

Fetching 8 files: 100%|████| 8/8 [04:02]   ← 최초 1회만 (5.25 GB)
Starting httpd at 127.0.0.1 on port 8080...

💡 두 번째 실행부터는 즉시 로딩

모델이 캐시에 저장되므로 이후 실행은 6~7초 안에 서버가 뜹니다.

서버가 뜨면 바로 curl로 테스트할 수 있어요.

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mlx-community/gemma-4-e4b-it-4bit",
    "messages": [{"role": "user", "content": "안녕, 너는 누구니?"}]
  }'

📝 mlx_run.sh — 한 번에 실행하기

매번 venv 활성화하고 명령어 치기 번거로워서 쉘스크립트를 만들었어요.

#!/bin/bash
# mlx_run.sh
source ~/mlx-env/bin/activate

mlx_lm.server \
  --model mlx-community/gemma-4-e4b-it-4bit \
  --port 8080
# 실행 권한 부여 후 실행
chmod 755 mlx_run.sh
./mlx_run.sh

🤖 Claude Code 연동 — Sonnet 토큰 절약

서버가 실행 중이면 Claude Code에서 로컬 Gemma 4를 서브 에이전트로 붙일 수 있어요. 요약·번역·분류처럼 반복적인 텍스트 작업은 Gemma 4에 자동 위임하고, Sonnet은 코드 작성·설계처럼 진짜 실력이 필요한 작업에만 쓰는 구조입니다.

💰 토큰 절약 원리

Claude Sonnet은 입력·출력 토큰 모두 과금되지만 로컬 Gemma 4는 비용이 0이에요. .claude/agents/ 폴더에 gemma-worker 에이전트를 등록하고, CLAUDE.md에 위임 조건을 명시하면 사용자가 따로 요청하지 않아도 Claude가 판단해서 자동으로 Gemma로 라우팅합니다.

사용자 요청: "이 글 100자로 요약해줘"
Claude가 CLAUDE.md 규칙 확인 → 텍스트 변환 작업으로 판단
gemma-worker 에이전트 자동 호출
localhost:8080으로 요청 전송 → 로컬 Gemma 4가 처리
결과 반환 — Sonnet 토큰 소비 없이 완료
번역·요약·분류 등 bulk 작업일수록 절약 폭이 커집니다

💡 총정리

  • Homebrew Python → venv 활성화 후 pip install mlx-lm (PEP 668)
  • zsh 멀티라인 \ 뒤 공백 없어야 함
  • 두 번째 실행부터 캐시 로딩 → 즉시 서버 기동
  • M4 Mac mini 16 GB 기준 5.25 GB 모델 · Apple Silicon GPU 가속
  • gemma-worker 에이전트 + CLAUDE.md 규칙으로 자동 위임
  • 단순 텍스트 작업은 Gemma 4가 처리 → Sonnet 토큰 0 소비

M4 Mac mini의 통합 메모리와 Metal GPU 가속 덕분에 Gemma 4를 Claude Code의 서브 에이전트로 붙여두면, 비용은 아끼면서 Sonnet은 진짜 어려운 작업에만 집중시킬 수 있어요.

+ Recent posts