작성 기준: macOS (Apple Silicon) + Ollama GUI 앱 환경
작성일: 2026-04-19 | 환경: Mac Studio M4 Max, macOS Sequoia, Ollama 최신 버전
1. 왜 선행 설정이 필요한가
macOS에서 Ollama를 기본 설정 그대로 실행하면 아래 문제가 발생합니다.
- 모델이 5분 후 자동 언로드되어 다음 요청 시 다시 로딩 시간이 발생
- 동시 요청 수가 자동으로 결정되어 대형 모델(30B+) 사용 시 메모리 초과 위험
- Apple Silicon GPU 가속이 명시되지 않아 백엔드가 불명확하게 동작할 수 있음
아래 3가지 환경변수를 사전에 설정해 두면 이 문제를 모두 해소할 수 있습니다.
2. 설정해야 하는 환경변수 3가지
| 변수명 | 권장값 | 설명 |
|---|---|---|
OLLAMA_KEEP_ALIVE |
-1 |
모델을 메모리에 영구 유지 (자동 언로드 비활성화) |
OLLAMA_NUM_PARALLEL |
1 |
동시 처리 요청 수 제한 (메모리 안정성 확보) |
OLLAMA_BACKEND |
mlx |
Apple Silicon GPU(Metal) 가속 백엔드 명시 |
3. 방법 1 — .zshrc에 추가
터미널에서 ollama run 등 CLI를 직접 사용하는 경우에 적용됩니다.
~/.zshrc 에 아래 3줄 추가
export OLLAMA_KEEP_ALIVE=-1 export OLLAMA_NUM_PARALLEL=1 export OLLAMA_BACKEND=mlx
적용
source ~/.zshrc
⚠️ .zshrc는 Ollama GUI 앱에 적용되지 않습니다.
Ollama macOS 앱은 터미널 셸이 아닌 launchd(시스템 데몬)가 실행합니다. launchd는 .zshrc를 읽지 않으므로, export 선언이 Ollama 앱 프로세스에 전달되지 않습니다. 메뉴바 앱을 사용하는 경우 반드시 아래 방법 2를 함께 적용해야 합니다.
| 실행 방식 | .zshrc 적용 여부 |
|---|---|
터미널에서 ollama serve 직접 실행 |
✅ 적용됨 |
| Ollama macOS 앱 (메뉴바 아이콘) | ❌ 적용 안 됨 |
4. 방법 2 — macOS LaunchAgents 등록 (재부팅 후에도 유지)
~/Library/LaunchAgents/에 plist 파일을 만들어, 로그인 시 자동으로 launchctl setenv를 실행시키는 방식입니다. Ollama GUI 앱에도 환경변수가 전달되며, 재부팅 후에도 유지됩니다.
plist 파일 생성
아래 명령어를 터미널에 그대로 붙여넣어 실행합니다.
mkdir -p ~/Library/LaunchAgents cat > ~/Library/LaunchAgents/local.ollama.env.plist <<'PLIST' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>local.ollama.env</string> <key>ProgramArguments</key> <array> <string>/bin/sh</string> <string>-c</string> <string> /bin/launchctl setenv OLLAMA_KEEP_ALIVE -1; /bin/launchctl setenv OLLAMA_NUM_PARALLEL 1; /bin/launchctl setenv OLLAMA_BACKEND mlx; </string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> PLIST
plist 검증 및 로드
# plist 문법 검증 plutil -lint ~/Library/LaunchAgents/local.ollama.env.plist # 로드 (기존 로드된 경우 해제 후 재로드) launchctl unload ~/Library/LaunchAgents/local.ollama.env.plist 2>/dev/null launchctl load ~/Library/LaunchAgents/local.ollama.env.plist
적용 확인
launchctl getenv OLLAMA_KEEP_ALIVE launchctl getenv OLLAMA_NUM_PARALLEL launchctl getenv OLLAMA_BACKEND
정상 적용 시 아래와 같이 출력됩니다:
% launchctl getenv OLLAMA_KEEP_ALIVE -1 % launchctl getenv OLLAMA_NUM_PARALLEL 1 % launchctl getenv OLLAMA_BACKEND mlx
💡 값이 정상 출력되었다면 Ollama 앱을 완전히 종료 후 다시 실행해야 실제 프로세스에 반영됩니다.
macOS 메뉴바 Ollama 아이콘 → Quit Ollama → 앱 다시 실행
5. 최종 동작 확인
Ollama 재실행 후 아래 명령어로 모델 상태를 확인합니다.
ollama ps
UNTIL 컬럼이 Forever로 표시되면 OLLAMA_KEEP_ALIVE=-1 이 정상 적용된 것입니다.
6. 실행 순서 문제 — 환경변수가 간헐적으로 적용 안 되는 경우
LaunchAgents는 launchd가 로그인 시 등록된 plist를 모두 실행하지만, 실행 순서는 보장되지 않습니다.
Ollama가 로그인 항목(Login Items)에 등록되어 있거나 자동 시작이 설정된 경우, 환경변수 주입 스크립트보다 Ollama 앱이 먼저 뜨는 타이밍이 발생할 수 있습니다. 이 경우 Ollama는 환경변수가 없는 상태로 이미 실행된 뒤라서 설정이 반영되지 않습니다.
⚠️ 증상: 재부팅 후 launchctl getenv 결과는 정상이지만, ollama ps에서 UNTIL이 Forever가 아닌 경우 — Ollama가 먼저 뜬 것입니다.
해결 방법 — 더미 요청으로 프로세스를 깨운 뒤 재시작하기
환경변수를 주입한 뒤 Ollama를 실행하고, 의미 없는 더미 요청을 한 번 전송해 프로세스가 새 환경을 읽도록 강제로 깨웁니다. 그런 다음 완전히 종료 후 재시작하면 OLLAMA_KEEP_ALIVE=-1이 정상 반영됩니다. 기존 plist를 아래 내용으로 교체합니다.
cat > ~/Library/LaunchAgents/local.ollama.env.plist <<'PLIST' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>local.ollama.env</string> <key>ProgramArguments</key> <array> <string>/bin/sh</string> <string>-c</string> <string> /bin/launchctl setenv OLLAMA_KEEP_ALIVE -1; /bin/launchctl setenv OLLAMA_NUM_PARALLEL 1; /bin/launchctl setenv OLLAMA_BACKEND mlx; sleep 3; open -a Ollama; sleep 5; curl -s http://127.0.0.1:11434/api/generate -d '{"model":"qwen3.6:35b","prompt":"hi","keep_alive":-1,"stream":false}' > /dev/null 2>&1; # 실제 사용하는 모델명으로 변경 sleep 2; osascript -e 'quit app "Ollama"'; sleep 3; open -a Ollama; </string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> PLIST
변경 후 재로드합니다:
launchctl unload ~/Library/LaunchAgents/local.ollama.env.plist 2>/dev/null launchctl load ~/Library/LaunchAgents/local.ollama.env.plist
💡 이 방식의 동작 순서:
① 로그인 시 plist 스크립트 실행
② 환경변수 3개 즉시 주입 (launchctl setenv)
③ 3초 대기 후 Ollama 앱 실행
④ 5초 대기 (Ollama 완전 기동 확보)
⑤ 더미 요청 전송 — 프로세스가 새 환경변수를 읽도록 강제로 초기화
⑥ Ollama 정상 종료 후 3초 대기
⑦ Ollama 재실행 — 이 시점부터 KEEP_ALIVE=-1 완전 반영
주의: 이 방식을 사용하는 경우 macOS 로그인 항목(시스템 설정 → 일반 → 로그인 항목)에서 Ollama의 자동 시작을 반드시 비활성화해야 합니다. 그대로 두면 Ollama가 두 번 실행됩니다.
7. 두 가지 방법 비교
| 항목 | .zshrc | LaunchAgents plist |
|---|---|---|
| 터미널 CLI 적용 | ✅ | ✅ |
| Ollama GUI 앱 적용 | ❌ | ✅ |
| 재부팅 후 유지 | ✅ (셸 기준) | ✅ |
| 설정 복잡도 | 낮음 | 중간 |
✅ Ollama macOS 앱을 사용하는 경우에는 .zshrc 설정만으로는 부족합니다. LaunchAgents 방식을 반드시 병행하십시오.