맥 스튜디오로 로컬 LLM을 돌려보니, 개인과 소규모는 느리지만 강하게 써야 했습니다
들어가며
로컬에서 LLM을 돌리는 이야기는 대개 설치 방법부터 시작합니다. 어떤 런타임을 쓰고, 어떤 모델을 받고, 어느 포트를 열어야 하는지부터 설명하죠.
그런데 조금 오래 써보면 더 중요한 질문은 따로 생깁니다. 로컬에서 대형 LLM을 어떻게 유용하게 쓰느냐입니다. 돌아가는 것과 계속 쓰는 것은 전혀 다른 문제이기 때문입니다.
저도 처음에는 Ubuntu + vLLM + 3090 Ti 2장으로 시작했습니다. 그리고 지금은 Mac Studio M3 Ultra(512GB)와 LM Studio로 옮겨와 deepseek, qwen, glm 계열의 큰 모델을 로컬에서 돌리고 있습니다.
이번 글은 설치 가이드가 아닙니다. 3090 두 장에서 왜 한계를 느꼈는지, 왜 맥 스튜디오로 옮겼는지, 그리고 느린 로컬 LLM을 어떻게 실제 작업에 써먹고 있는지 가볍게 정리해보려 합니다.
처음에는 3090 Ti 두 장으로 시작했습니다
초기 구성은 꽤 단순했습니다. 중고 3090 Ti GPU 두 장을 약 220만 원에 구해서 Ubuntu 위에 올리고, 런타임은 vLLM을 사용했습니다.
당시에는 gemma 3가 로컬에서 체감이 좋았던 모델 중 하나였습니다. 아주 단순한 지시를 처리하는 어시스턴트나 작은 워크플로우를 만드는 정도라면 충분히 인상적이었습니다. 다국어 성능도 나쁘지 않았고, 토큰 생성 속도도 당시 기준으로는 꽤 만족스러웠습니다.
실제로 이 환경으로 여러 어시스턴트를 만들고 테스트했습니다.
- 채팅 에이전트
- 타로 카드 리더
- 번역가 성격의 어시스턴트
- 간단한 워크플로우형 작업기
이 단계에서 얻은 결론은 분명했습니다. 로컬 LLM은 이미 장난감 단계는 아니었습니다. 하지만 그렇다고 해서 곧바로 유의미한 에이전트를 만들 수 있는 수준이라고 보기에는 부족함도 많았습니다.
문제는 소프트웨어보다 하드웨어 현실이었습니다
처음에는 vLLM을 선택한 이유도 단순했습니다. 세팅이 비교적 어렵지 않았고, sglang보다 훨씬 널리 알려져 있었기 때문입니다.
그런데 시간이 지나면서 깨달은 건, 집에서 3090 멀티 GPU를 굴릴 때 병목은 런타임 선택보다 훨씬 현실적인 데 있다는 점이었습니다.
- 전기료가 부담스러웠습니다.
- 열기가 너무 심했습니다.
- 집에서 상시 운용하기가 어려웠습니다.
- 무엇보다 제가 정말 돌리고 싶었던 대형 모델은 여전히 무리였습니다.
당시 제가 원했던 건 deepseek v3급 모델을 로컬에서 충분한 맥락으로 다루는 일이었습니다. 그런데 3090 두 장으로는 여기서 한계가 분명했습니다. 작은 모델을 잘 돌리는 것과, 큰 모델을 꾸준히 작업 자산으로 쓰는 것은 전혀 다른 이야기였습니다.
결국 저는 GPU를 정리하고 Mac Studio M3 Ultra(512GB)를 구매했습니다. 이 전환은 단순한 기기 교체가 아니라, 제가 로컬 LLM을 바라보는 방식 자체를 바꾼 선택이었습니다.
맥 스튜디오로 옮기고 나서 가능해진 것들
macOS + LM Studio로 전환한 뒤 가장 크게 달라진 점은, 이전에는 아예 바라보기 어려웠던 모델들이 현실적인 선택지로 들어왔다는 점입니다.
deepseek, glm, Qwen3-235B-A22B 같은 큰 모델을 직접 올려보고 결과를 확인할 수 있게 되자, 저는 성능 자체에는 꽤 놀랐습니다. 추론 품질은 예상보다 더 좋았습니다. 조금만 복잡한 지시를 던져봐도, 예전보다 훨씬 정교하고 안정적인 결과를 내주는 경우가 많았습니다.
다만 동시에 한계도 아주 또렷해졌습니다. pp 성능이 생각보다 느렸고, 실시간 채팅처럼 즉각적인 반응이 필요한 사용 방식에는 분명히 맞지 않았습니다. 자료를 조사할 때부터 느리다는 이야기는 알고 있었지만, 실제로 매일 써보면 그 한계는 훨씬 더 선명하게 체감됩니다.
이 지점에서 저는 기준을 바꿨습니다. 이 모델이 빠른가?보다 이 모델을 어디에 써야 하는가?를 먼저 보기 시작한 겁니다.
느린데도 만족도가 높았던 작업들
재미있게도, 실시간 응답을 포기하고 나니 로컬 LLM은 훨씬 유용해졌습니다.
제가 만족했던 영역은 대부분 비슷했습니다.
- 데이터 분석처럼 정교한 결과가 필요한 작업
- 게임 스토리 작성처럼 시간이 오래 걸려도 되는 작업
- 복잡한 분석 워크플로우처럼 단계가 많은 작업
- OpenHands류 자동 개발 작업처럼 사람 대신 밤새 돌려둘 수 있는 작업
예를 들어 스토리 하나를 만드는 데 40분에서 60분 이상 걸릴 수 있습니다. 실시간 채팅 기준으로 보면 끔찍하게 느린 속도입니다. 하지만 이 작업을 잠들기 전에 3개에서 5개 정도 큐에 넣어두고, 아침에 결과를 받는 방식으로 바꾸면 이야기가 완전히 달라집니다.
느린 대신 결과는 훨씬 크고 정교합니다. 사람은 밤새 기다리지 않고, 다음 날 결과를 검수하고 다음 큐를 넣으면 됩니다.
OpenHands 작업도 비슷했습니다. 즉시 반응하는 코파일럿처럼 쓰기보다는, 작업을 큐에 쌓아놓고 자동으로 돌게 두는 방식이 훨씬 잘 맞았습니다. 이 관점으로 보면 로컬 LLM은 느린 채팅 봇이 아니라 조용히 오래 일하는 작업기에 가깝습니다.
토끼처럼 빠르지 않아도, 거북이처럼 이길 수 있습니다
저는 로컬 LLM을 보면서 자주 토끼와 거북이 이야기를 떠올렸습니다.
클라우드 LLM은 대개 토끼에 가깝습니다. 빠르고 즉답성이 좋고, 바로바로 써먹기 좋습니다. 반면 로컬 대형 모델은 거북이에 가깝습니다. 느리고, 즉시성 기준으로는 답답하고, 잘못 비교하면 금방 실망하게 됩니다.
그런데 평가 기준을 바꾸면 결과도 달라집니다.
실시간 채팅으로 싸우면 로컬 LLM은 자주 집니다. 하지만 큐와 반복 작업, 배치 실행, 야간 처리처럼 꾸준함이 이기는 구조로 가져가면 이야기가 달라집니다. 실제로 저는 이 방식에서 높은 만족도를 얻었습니다. 게다가 전력 소비도 멀티 GPU 대비 훨씬 안정적이었습니다. 체감상 GPU 구성 대비 7배 미만 수준의 전력으로 더 큰 모델을 굴릴 수 있다는 점도 컸습니다.
결국 중요한 건 모델 속도가 아니라, 내 작업을 어떤 리듬으로 설계하느냐였습니다.
제 코드도 결국 큐 중심으로 바뀌었습니다
이건 단순한 감상이 아니라, 실제 구현에도 그대로 반영됐습니다.
제 ai-service 모듈을 보면 로컬 LLM을 실시간 채팅보다 백그라운드 작업기로 바라본 흔적이 꽤 분명합니다.
먼저 모델 연결 자체는 생각보다 단순합니다. RunnableAiModel에서는 vllm과 lm studio를 OpenAI 호환 프로바이더처럼 취급하고 baseUrl만 바꿔 붙일 수 있게 해두었습니다. 즉, 상위 애플리케이션 입장에서는 OpenAI 호환 엔드포인트라는 형태만 맞으면 로컬 백엔드를 비교적 자연스럽게 갈아낄 수 있습니다.
LM Studio를 위한 별도 사용 예도 있습니다. LMStudioVisionClient는 실제로 LM Studio의 /v1 엔드포인트를 기준으로 비전 모델을 붙이도록 구현돼 있습니다. 로컬 VLM을 붙여 이미지 분석까지 이어갈 수 있게 만든 셈입니다.
더 중요한 부분은 실행 방식입니다.
AiAgentExecutor는 워크플로우를 바로 실행하지 않고 DTE 잡으로 큐에 등록합니다. LoopJobService와 LoopWorkflowExecutor는 반복 실행되는 긴 작업을 백그라운드에서 처리하도록 설계돼 있고, 체크포인트와 복구 흐름도 가지고 있습니다. WritingToolExecutor, 멀티 에이전트 워크플로우, 마케팅 생성 파이프라인 역시 전반적으로 즉답형보다는 비동기 실행형에 가깝습니다.
이건 우연이 아닙니다. 느린 모델을 억지로 실시간 인터페이스에 넣는 대신, 느려도 괜찮은 작업을 큐로 흘려보내는 쪽이 훨씬 현실적이기 때문입니다.
짧게 말하면, 저는 로컬 LLM을 이렇게 이해하게 됐습니다.
- 채팅 응답기보다 작업 큐에 더 잘 맞습니다.
- 속도보다 난도와 정교함이 중요한 일에 더 잘 맞습니다.
- 밤새 돌리고 아침에 검수하는 패턴과 궁합이 좋습니다.
- OpenAI 호환 API만 맞추면 기존 서비스 구조에 붙이기도 어렵지 않습니다.
그래서 로컬 LLM은 누구에게 맞을까
이 글을 여기까지 읽었다면 아마 비슷한 고민이 있을 겁니다. 로컬 LLM이 정말 쓸 만한지, 그리고 큰 돈을 들여도 가치가 있는지 말이죠.
제 기준은 꽤 분명합니다.
로컬 LLM은 아래 같은 사람에게 잘 맞습니다.
- 실시간 채팅보다 배치 작업이 더 많은 사람
- 복잡한 생성과 분석을 밤새 돌려두고 싶은 사람
- 큰 모델을 적은 운영비로 계속 활용하고 싶은 사람
- 자기 작업 흐름을 큐 중심으로 재설계할 수 있는 사람
반대로 즉각적인 대화 경험이 가장 중요하다면, 처음에는 분명 답답할 수 있습니다. 그 경우 로컬 LLM은 잘못된 기대 위에 올라간 선택이 될 가능성이 큽니다.
마무리
로컬에서 대형 LLM을 돌리는 일은 생각보다 빨리 설치 성공에서 활용 실패로 넘어갑니다. 모델이 올라간다고 해서 곧바로 유용해지는 것은 아니기 때문입니다.
저는 3090 Ti 두 장 + Ubuntu + vLLM에서 시작해서, 지금은 Mac Studio M3 Ultra(512GB)와 LM Studio로 옮겨왔습니다. 이 과정을 거치며 내린 결론은 단순합니다.
엔터프라이즈 관점이 아닌 소규모와 개인의 로컬 LLM은 빠른 채팅을 대체하는 도구라기보다, 느리지만 강한 작업기를 만드는 쪽에서 훨씬 빛납니다.
만약 이미 맥이 있다면, 그리고 특히 맥 스튜디오급 장비를 갖고 있다면 한 번쯤 이런 방식으로 로컬 LLM을 활용해보는 것을 권하고 싶습니다. 시작은 거창할 필요가 없습니다. 실시간 채팅이 아니라, 오늘 밤 큐에 넣어둘 한 가지 어려운 작업부터 골라보면 됩니다.
생각보다 많은 가능성은 바로 거기서 시작됩니다.