devlog.md

[이미지분석_로컬에이전트] Ollama 프리징 삽질기, 원인은 숨은 파일창_02

Ollama 데스크톱 앱이 멈춘 것 같다는 신고로 시작해서, 결국 macOS 파일 선택창 자체가 화면에 안 보이는 상태로 앱 전체를 붙잡고 있다는 걸 프로세스 스택까지 까보고서야 알아냈다. 그 김에 헤르메스 에이전트에 비전 기능을 어떻게 연결할지 정리하고, 로컬 비전 모델 두 개를 직접 붙여봤다.

1단계: "멈췄는데 안 꺼져요"

처음엔 Ollama 전체가 죽은 줄 알았다. ps aux로 프로세스를 보니 ollama serve와 모델을 물고 있는 llama-server는 멀쩡했고, API에 직접 curl을 쏴봐도 5초 만에 정상 응답이 왔다. 즉 백엔드는 살아있고 GUI 셸만 먹통이었다. 터미널에서 GUI 프로세스만 kill -9로 정리하고 재실행하니 일단 풀렸다.

2단계: 이미지 첨부 버튼에서 재발

다음 날 이미지 입력을 위해 채팅창의 + 버튼을 눌렀더니 똑같은 증상이 다시 나타났다. 이번엔 우클릭 메뉴의 Quit 버튼조차 비활성화될 만큼 완전히 멈춰서, 강제 종료 외엔 방법이 없었다. 로그(~/.ollama/logs/app.log)를 뒤져보니 마침 0.32.7에서 0.32.14로 가는 업데이트가 이미 다운로드까지 돼 있어서 앱을 통째로 교체 설치했다. 하지만 재현됐다.

3단계: 캐시도 범인이 아니었다

이 앱이 Electron이 아니라 Go + 네이티브 WKWebView 조합이라는 걸 로그에서 확인하고, WebKit 저장소(~/Library/WebKit/com.electron.ollama)가 깨졌을 가능성을 의심해 백업 후 초기화했다. 그래도 증상은 그대로였다. 이 시점에서 "겉핥기 재시작"으로는 안 풀린다는 게 분명해졌다.

4단계: 프로세스 스택을 직접 떠봤다

화면 접근 권한 없이도 원인을 볼 수 있는 방법이 있다 — sample <pid> 3으로 멈춘 프로세스의 스레드 스택을 3초간 샘플링하는 것이다. 결과는 명확했다. 메인 스레드가 -[NSSavePanel runModal] 안에 갇혀 있었다. 즉 앱이 죽은 게 아니라 파일 선택창이 실제로 모달 상태로 떠서 이벤트를 기다리고 있는데, 그 창이 화면에는 안 보이는 상태였다. Ollama를 프론트로 올리고 Esc를 눌러도 풀리지 않았는데, 재샘플링해보니 여전히 같은 지점에 멈춰 있었다.

5단계: 우회로 마무리

이 macOS 버전(26.5.2, 최신/베타 계열)과 앱의 네이티브 파일 다이얼로그 구현 사이의 호환성 버그로 결론 내렸다. 대신 파일을 Finder에서 채팅창으로 직접 드래그 앤 드롭했더니 문제없이 이미지가 들어갔다. NSSavePanel 경로 자체를 건너뛰는 방식이라 버그를 완전히 우회할 수 있었다.

헤르메스 에이전트 연결 검토

이 참에 이 로컬 비전 기능을 텔레그램 기반 헤르메스 에이전트에도 쓸 수 있을지 확인했다. 헤르메스의 config.yaml을 뜯어보니 텔레그램 툴셋에 vision이 이미 켜져 있었고, 두뇌 모델인 qwen35-hermes 자체도 /api/tags 기준 vision capability를 갖고 있었다. 별도 모델을 auxiliary.vision에 지정하지 않아도 기본 라우팅이 메인 모델을 그대로 쓰기 때문에, 추가 설정 없이 텔레그램에 사진을 보내는 것만으로 될 가능성이 높다는 걸 코드 레벨에서 확인했다.

gemma4:12b vs qwen35-hermes 실측 비교

그래도 굳이 비전 전용으로 따로 설치해둔 gemma4:12b가 더 나을지 궁금해서, 같은 스크린샷 한 장을 두 모델에 동일한 프롬프트로 직접 돌려봤다.

항목gemma4:12bqwen35-hermes
소요 시간224.7초207.4초
생성 토큰1435787
정확도화면 요소 모두 정확히 인식동일 + 세부 아이콘까지 추가로 포착

결과는 오히려 qwen35-hermes가 더 빠르면서 디테일도 근소하게 앞섰다. 굳이 비전 모델을 따로 분리할 실익이 없다고 판단해 gemma4:12b는 삭제했다.

Trouble Shooting

증상원인해결 방법
Ollama GUI가 완전 무응답, 우클릭 Quit도 비활성화GUI 셸(Electron 유사 프로세스) 자체가 행(hang) 걸림백엔드(ollama serve, llama-server)는 그대로 두고 GUI 프로세스만 kill -9
0.32.14로 업데이트하고 캐시까지 초기화해도 + 버튼에서 동일 증상 재발업데이트/캐시 문제가 아니라 별개의 근본 원인이 있었음sample <pid> 3으로 스레드 스택을 직접 확인하는 방식으로 전환
Ollama를 프론트로 올리고 Esc를 눌러도 모달이 안 풀림네이티브 파일 선택창(NSSavePanel)이 렌더링되지 않은 채 모달로 떠서 key window가 안 됨 (macOS 버전 호환성 버그로 추정)+ 버튼 대신 Finder에서 채팅창으로 파일을 직접 드래그 앤 드롭

느낀 점 / 다음에 할 일

GUI가 "그냥 멈췄다"로 보일 때도 화면 접근 권한 없이 sample/spindump로 스레드 스택까지 내려가 보면 정확한 지점이 나온다는 걸 다시 확인한 하루였다. 겉보기 재시작·업데이트·캐시 초기화는 증상을 없애는 시도였을 뿐, 진짜 원인은 스택 트레이스 한 번으로 끝났다. 비전 모델 비교도 벤치마크 수치를 믿기보다 실제 이미지로 직접 붙여보는 쪽이 훨씬 정확하다는 걸 재확인했다. 다음엔 헤르메스 텔레그램으로 실제 이미지를 보내 vision 툴이 설정 변경 없이 잘 도는지 실사용 테스트를 해볼 참이다.

댓글