로컬 AI 워크스페이스 구축기 — 클라우드 없이 LLM + 코드 실행 + 브라우저 자동화까지
I want everything local – Building my offline AI workspace
TL;DR Highlight
Ollama, Apple Container, Playwright로 클라우드 없이 로컬에서 LLM 채팅·코드 실행·웹 브라우징을 모두 돌리는 오프라인 AI 워크스페이스를 구현했다.
Who Should Read
개인 사진/문서 등 민감한 데이터를 AI로 처리하고 싶은데 클라우드에 올리기 꺼려지는 개발자. 로컬 LLM 환경을 직접 세팅해보려는 Apple Silicon Mac 사용자.
Core Mechanics
- 목표는 ChatGPT/Claude가 제공하는 3가지 기능(LLM 채팅, 코드 실행, 웹 접근)을 전부 로컬에서 재현하는 것. LLM은 Ollama, 코드 실행은 Apple Container(컨테이너당 독립 VM 제공), 브라우저 자동화는 Playwright를 사용했다.
- 처음에 a0.dev로 네이티브 Mac 앱을 만들려 했는데 iOS 전용에 가까워서 실패. Electron + Next.js 래핑도 시도했지만 깔끔하게 안 돼서 결국 assistant-ui 웹 버전으로 타협했다.
- assistant-ui가 랜딩 페이지에 모델 드롭다운을 보여줘서 멀티 LLM 지원이 되는 줄 알았는데 아니었다. ai-sdk를 붙여서 직접 모델 선택 드롭다운을 구현해야 했다.
- Ollama의 tool-calling 지원이 들쭉날쭉하다. deepseek-r1:8b 같은 모델은 Ollama 사이트에서 tool calling 카테고리에 올라와 있지만 실제로 돌리면 'does not support tools' 에러가 뜬다. 오픈소스 생태계가 빠르게 움직이다 보니 문서와 실제 지원 상태가 안 맞는 문제가 있다.
- Apple이 최근 공개한 'Container' 도구를 활용해 AI가 생성한 코드를 호스트 머신이 아닌 격리된 VM 안에서 실행한다. Docker보다 나은 점은 컨테이너마다 완전히 독립된 VM이 뜬다는 것.
- 코드 실행 환경을 MCP(Model Context Protocol) 서버로 노출시켜서, Claude Desktop이나 Gemini CLI 같은 기존 도구에서 설정 한 줄로 바로 연결할 수 있게 만들었다. mcpServers 설정에 HTTP URL만 넣으면 된다.
- 소형 로컬 모델이 아직 클라우드 모델 수준은 아니라서, 로컬 전용으로 제한하지 않고 클라우드 모델도 함께 쓸 수 있게 열어뒀다. 로컬 모델이 발전하면 점진적으로 전환하는 전략.
Evidence
- 하드웨어가 가장 큰 병목이라는 의견이 많았다. 80B+ 파라미터 모델을 돌리려면 대량의 고속 RAM이 필요한데, Mac Mini도 충분한 RAM을 넣으면 2천 달러 이상이고 소비자 등급이라 보기 어렵다는 지적. Framework 데스크탑(128GB 통합 RAM)이 나와도 2~2.5천 달러선이라는 구체적 가격도 언급됐다.
- Berkeley 연구팀이 LEANN이라는 벡터 인덱스를 소개하면서, 로컬 RAG의 스토리지 문제를 지적했다. 수년치 이메일을 벡터DB에 넣으면 50GB를 쉽게 넘는데, LEANN은 임베딩 자체를 저장하지 않아 스토리지를 ~97% 줄인다고 한다. 이런 실행 엔진 + 효율적 지식 인덱스 조합이 '로컬 Jarvis'의 진짜 경로라는 의견.
- 네이티브 데스크톱 앱 학습 데이터가 극히 부족해서 LLM이 제대로 도와주지 못한다는 분석이 있었다. 웹/모바일에 비해 데스크톱 앱 관련 블로그, 오픈소스가 훨씬 적고, 90년대 Windows 데스크톱 개발 황금기와 달리 지금은 커리어로서도 사실상 사장됐다는 배경 설명.
- Cerebras나 Groq 같은 초고속 추론 서비스(1000 tk/s)를 경험하면 로컬의 느린 속도가 참기 어려워진다는 반론도 있었다. Cerebras는 데이터 로깅을 안 한다고 하니 프라이버시 우려도 덜하다는 의견. 다만 diffusion 기반 모델 등 로컬 속도 개선도 기대된다는 답변이 따랐다.
- 클라우드 없이 사는 게 과도한 노력이라는 반론도 있었다. 어차피 업무의 다른 부분은 클라우드에 의존하는데 AI만 로컬로 돌리는 게 무슨 의미냐는 시각. 이에 대해 민감 데이터(사진, 개인 문서) 처리만이라도 로컬로 하는 것이 실용적이라는 재반론이 있었다.
How to Apply
- 개인 사진/영상 편집이나 민감 문서 처리를 AI로 하고 싶은 경우, Ollama + Apple Container 조합으로 데이터가 로컬을 벗어나지 않는 파이프라인을 구성할 수 있다. mcpServers 설정에 coderunner URL만 추가하면 Claude Desktop에서도 바로 코드 실행 가능.
- 로컬 LLM의 tool-calling이 필요한 경우, Ollama 사이트의 카테고리를 믿지 말고 실제로 해당 모델에서 tool call을 날려서 동작 여부를 확인해야 한다. 현재 안정적으로 tool-calling이 되는 모델(qwen3 등)을 먼저 테스트하고 선택할 것.
- 로컬 RAG를 구축하는데 스토리지가 문제라면, LEANN(github.com/yichuan-w/LEANN) 같은 임베딩 미저장 벡터 인덱스를 검토해볼 만하다. 대량 문서(이메일, 노트 등)를 인덱싱할 때 기존 벡터DB 대비 스토리지를 극적으로 줄일 수 있다.
- Mac 네이티브 앱 대신 Next.js 웹앱 + assistant-ui 조합이 현실적이다. Electron 래핑은 삽질이 많으니 피하고, 로컬 웹서버로 띄우는 방식이 개발 속도와 안정성 모두 낫다.
Code Example
// Claude Desktop 또는 Gemini CLI에서 coderunner MCP 연결 설정
{
"mcpServers": {
"coderunner": {
"httpUrl": "http://coderunner.local:8222/mcp"
}
}
}Terminology
관련 논문
OpenKnowledge – Obsidian/Notion의 오픈소스 AI-first 대안
Git 기반 동기화와 Claude/Codex/Cursor 연동을 내장한 로컬 우선 마크다운 에디터로, AI 에이전트의 두 번째 뇌(LLM Wiki)로 활용할 수 있는 오픈소스 도구다.
Unfireable Safety Kernel: AI 에이전트를 위한 Execution-Time AI Alignment
AI 에이전트가 자신의 안전장치를 우회할 수 없도록, 에이전트 프로세스 바깥에 수학적으로 증명된 강제 통제 게이트를 배치하는 아키텍처
RubyLLM: 주요 AI 프로바이더를 모두 지원하는 Ruby 프레임워크
OpenAI, Claude, Gemini 등 주요 AI 프로바이더를 단일 인터페이스로 통합한 Ruby 프레임워크로, Rails 통합과 에이전트 기능까지 지원해 Ruby 개발자가 AI 기능을 빠르게 붙일 수 있다.
Qwen-AgentWorld: 범용 에이전트를 위한 Language World Model
Alibaba Qwen 팀이 AI 에이전트가 행동 결과를 미리 시뮬레이션할 수 있는 'Language World Model'을 공개했다. 에이전트 훈련과 실행 경로 검증에 새로운 패러다임을 제시하는 연구다.
SHERLOC: Code Repair Agent를 위한 구조화된 Diagnostic Localization 프레임워크
버그 위치만 알려주는 게 아니라 '왜, 어떻게 고쳐야 하는지'까지 진단 리포트를 생성해서 코드 수정 에이전트의 성능을 높이는 training-free 프레임워크
peerd – 브라우저에서 완전히 실행되는 AI Agent Harness
백엔드 서버 없이 Chrome/Firefox 확장 프로그램으로만 동작하는 AI 에이전트 실행 환경으로, 브라우저 탭을 직접 조작하고 WASM Linux VM까지 구동할 수 있어 프라이버시와 보안을 동시에 챙길 수 있다.
Related Resources
- https://instavm.io/blog/building-my-offline-ai-workspace
- https://github.com/yichuan-w/LEANN
- https://arxiv.org/abs/2405.08051
- https://github.com/exo-explore/exo
- https://github.com/assistant-ui/assistant-ui
- https://hypersonic.chat/
- https://kasmweb.com/
- https://developer.apple.com/documentation/FoundationModels