AI 홈서버, Mac mini 당장 안 사도 됩니다 — 노트북에서 시작해 로컬 LLM까지

AI 홈서버, Mac mini 당장 안 사도 됩니다

요즘 OpenClaw이 많이 보인다.

폰에서 작업을 맡기면 집에 있는 컴퓨터가 대신 일해주는 구조. Claude Cowork Dispatch가 나오면서 비슷한 흐름이 아예 제품화되기도 했다. “AI 에이전트 홈서버”라는 개념이 이제 낯설지 않다.

그러면서 Mac mini M4 이야기가 같이 많이 나온다. 조용하고, 작고, 24시간 켜둬도 부담 없고. 로컬 LLM까지 돌릴 수 있는 폼팩터. 나도 결국 샀다.

그런데 몇 달 동안 직접 세팅해보고 나니까 순서가 보였다.

처음부터 Mac mini가 필요했던 건 아니었다. 집에 놀고 있는 노트북 한 대만 있어도 시작할 수 있다, 충분히 필요성을 느끼고 Mac mini로 가도 늦지 않다.

그래서 정리해둔다.


1단계. API만 쓸 거면 노트북으로 충분하다

Claude, ChatGPT, OpenRouter 같은 API를 쓰는 서버라면 무거운 연산은 전부 클라우드에서 돈다. 내 컴퓨터는 그냥 “계속 켜져 있으면서 요청을 중계하는 박스”면 된다. 성능이 중요한 게 아니라 안 꺼지는 게 중요하다.

그래서 나는 안 쓰던 Windows 노트북을 서버로 썼다. Tailscale로 원격 접속 터널을 뚫고, Docker로 OpenClaw 에이전트를 띄우고, Telegram 봇으로 연결했다.

⚙️ 세팅 순서

1. Tailscale 설치 (서버 노트북 + 내 기기 둘 다)
2. SSH 열기 — Windows면 Start-Service sshd + 자동 시작 설정
3. Docker Desktop 설치
4. OpenClaw 받아서 docker compose up -d
5. OpenRouter API 키 등록

여기까지는 순조로웠다.

문제는 그 다음이었다.

🔥 삽질 포인트 — “밤새 서버가 꺼져 있었다”

아침에 VS Code에서 Remote SSH 접속이 안 됐다. connection timed out. 이상했다. 절전 모드는 “안 함”으로 분명히 설정해뒀는데.

원인은 Windows 고급 전원 옵션의 숨겨진 최대절전 타이머였다. 일반 절전을 꺼도 고급 설정에 별도 타이머가 살아있다. 기본값이 180~360분으로 잡혀 있어서 밤새 켜둔 서버가 알아서 잠들어버린다.

서버용 노트북이면 이 체크리스트부터 돌려야 한다.

# 최대절전 완전 차단
powercfg /h off
# 현재 절전 상태 확인
powercfg /a

그리고 GUI에서:
• 덮개 닫을 때 → 아무 것도 안 함
• 고급 전원 → 최대절전 타이머 0
• 하이브리드 절전 끄기
• Windows Update 자동 재시작 → 활성 시간 최대화
• BIOS → After Power Loss → Power On

마지막 한 줄이 생명줄이다. 정전이든 뭐든 전원이 끊겼다가 들어오면 자동으로 켜지도록. 여기에 스마트 플러그(나는 Tapo P100) 하나 추가하면 물리적으로 서버 근처에 갈 수 없는 상황에서도 원격으로 재부팅할 수 있다.

기능보다 전원 설정이 먼저였다.

🔧 Tailscale + SSH 접속 안 될 때

서버가 살아있는데 접속이 안 되면 단계별로 끊어서 본다.

# 1. 네트워크 연결 확인
ping <tailscale IP>
# 2. SSH 포트 열려 있나
Test-NetConnection <IP> -Port 22
# 3. 포트 닫혀 있으면
Start-Service sshd
Set-Service sshd -StartupType Automatic
# 4. 포트는 열렸는데 VS Code가 안 되면
# → .vscode-server 폴더 삭제 후 재연결

Windows에서 tailscale 명령이 PATH에 안 잡히는 경우도 있다. 그럴 땐 전체 경로로 실행하거나 그냥 일반 ping으로 Tailscale IP 찍어도 된다.

& "C:\Program Files\Tailscale\tailscale.exe" ping <IP>
🤖 OpenClaw + OpenRouter

OpenClaw이 Docker로 뜨면 config는 C:\{User설정폴더}\openclaw\.openclaw\openclaw.json에 있다. env에 OPENROUTER_API_KEY 넣고, agents.defaults.model.primary에 쓸 모델 지정. 그리고 재시작.

docker restart openclaw-openclaw-gateway-1
docker logs openclaw-openclaw-gateway-1 --tail 30

로그에 agent model: openrouter/...가 찍히면 성공.

여기까지 오면 내 폰에서 Telegram으로 말을 걸면 노트북에서 에이전트가 일을 처리한다.


2단계. 잘 돌아간다. 그런데 청구서가 온다.

노트북 서버의 진가는 Heartbeat를 붙이면서부터 드러났다.

Heartbeat는 OpenClaw에 있는 기능인데, 말 그대로 에이전트가 주기적으로 스스로 깨어나서 할 일을 체크하는 구조다. 내가 말을 걸지 않아도 설정한 시간마다 한 번씩 에이전트가 상황을 본다. HEARTBEAT.md에 체크리스트를 적어두면 그걸 보고 판단한다.

# HEARTBEAT.md
- 받은 메일함에 급한 거 있으면 요약해서 알려줘.
- 오늘 일정 중에 준비 필요한 미팅 있으면 30분 전에 알람.
- Notion Seed Log에 오늘 들어온 씨앗 중 Stage가 Sprout 이상이면 정리.
- 아무 것도 없으면 HEARTBEAT_OK.

내 경우는 아침 브리핑, 받은 편지함 트리아지, Notion 씨앗 숙성 체크 같은 걸 걸어뒀다. 일반 Chat에서는 내가 말을 걸어야 답한다. Heartbeat는 내가 말을 안 걸어도 알아서 일한다.

이게 챗봇과 에이전트의 차이다.

에이전트로 쓰려면 누군가는 24시간 켜져 있어야 한다. 그게 서버 노트북의 역할이었다.

그런데 이 구조에는 비용이 따라붙는다.

Heartbeat는 간격마다 토큰을 쓴다. 30분에 한 번씩이라면 하루 48번, 한 달이면 1,440번. 체크리스트가 길어지면 컨텍스트가 같이 커지고, 모델이 좋을수록 확인이 정확한 대신 단가가 올라간다. 나는 OpenRouter를 경유해서 Claude와 GPT 계열을 섞어 쓰고 있었는데, 월 청구서가 꾸준히 올라갔다.

24시간 편한 대신 24시간 토큰을 먹는 구조였다.

그래서 생각했다. 루틴한 Heartbeat 체크는 로컬 LLM으로 돌리고,
진짜 중요한 판단만 API로 넘기면 되지 않을까. 하이브리드.

이게 Mac mini로 갈 이유였다.

3단계. Mac mini 헤드리스 세팅

24GB 램에 M4 프로세서. 별도 GPU 서버를 맞추는 것보다 조용하고, 전기 덜 먹고, 24시간 켜둬도 부담 없는 폼팩터. 로컬 LLM용 홈서버로는 꽤 맞는 선택이었다.

모니터 없이 쓸 거니까 헤드리스 세팅. 내 경우는 회사에서 초기 세팅만 하고 집으로 들고 와서 운영하는 방식이었다.

🏢 회사 30분: 초기 세팅

• Mac mini → HDMI → 모니터
• 키보드 + 마우스 (USB-C 젠더 필요)
• macOS Setup Assistant
집 Wi-Fi 미리 등록 (이게 제일 중요)
• Apple ID 로그인
• 시스템 설정 → 공유 → 화면 공유 ON, 원격 로그인 ON

집 Wi-Fi를 회사에서 미리 등록해둬야 집에 도착하자마자 자동 접속된다.
이거 까먹으면 집에 와서 모니터 없이 처음부터 다시 해야 한다.

🍺 Homebrew + Tailscale
# Homebrew 설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Apple Silicon은 /opt/homebrew에 설치됨
which brew
# Tailscale 설치
brew install tailscale
🏠 집 도착 후: SSH로만 운영
# iPad/노트북에서
ssh 사용자명@Mac_Mini_IP

이 시점부터 Mac mini에는 아무것도 안 꽂혀 있다. 전원 케이블과 랜선(또는 Wi-Fi)만. 모든 조작은 SSH로 한다.

🔥 삽질 포인트 — Tailscale 기기가 두 대로 잡힌다

Tailscale 관리 페이지를 보니 내 Mac mini가 두 대로 잡혀 있었다.

leeui-macmini (offline) — 예전 설치 흔적
leeui-macmini-1 (active) — 현재 쓰는 맥

같은 이름이 이미 있어서 -1이 자동으로 붙은 거다. https://login.tailscale.com/admin/machines에서 offline 기기를 Remove하면 깔끔해진다.

그리고 Tailscale CLI 버전은 메뉴바 앱 없이 tailscaled가 데몬으로 동작한다. 로그인 항목에 tailscaled가 걸려 있으면 부팅 시 자동 시작된다.

🔥 삽질 포인트 — Ollama 응답이 중간에 끊긴다

gemma4:26b를 띄워두고 쓰다가 답 작성 중에 뚝 끊기는 일이 반복됐다. 화면이 켜져 있을 땐 되고, 꺼지면 안 됐다.

원인은 “디스플레이가 꺼져 있을 때 자동으로 잠자지 않게 하기” 옵션이 OFF였던 것.
헤드리스 운영인데 디스플레이 기준으로 sleep이 걸리는 게 말이 안 되는 것 같지만 기본값이 그렇다.
이 옵션을 ON으로 바꿔야 Mac mini가 진짜로 24시간 돈다.

참고로 gemma4:26b는 24GB 램에서 18~20GB를 쓴다. 꽤 빠듯하다. 불안정하면 12b로 내리는 것도 방법.
지금은 이런 저런 Tool Call 해보는데, 복잡한 응답은 잘 안되는 경우도 많다. 최적점 찾아봐야지 ㅎㅎ

🔧 데몬 관리 — 프로세스가 엉키지 않게

헤드리스 운영에서 제일 자주 쓴 명령어들.

# 프로세스 이름으로 죽이기
pkill -9 프로세스이름
# 로그인 항목 확인
launchctl list | grep -i claw
# Ollama 내리기/올리기
launchctl unload ~/Library/LaunchAgents/com.ollama.ollama.plist
launchctl load ~/Library/LaunchAgents/com.ollama.ollama.plist
# OpenClaw gateway 올리기 (kickstart 에러 시)
launchctl bootstrap gui/$UID ~/Library/LaunchAgents/ai.openclaw.gateway.plist
openclaw gateway start

$UID는 현재 사용자 ID. echo $UID로 확인한다. 보통 501이다.

🖥️ 화면이 진짜 필요할 때 — RVNC Viewer

SSH로 대부분 해결되는데 가끔 GUI가 필요하다. 그때는 RVNC viewer

# Mac mini에서 화면 공유 활성화
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
# IP 확인
ipconfig getifaddr en0

Ipad에 RealVNC Viewer 설치, Mac 로그인 계정/비번으로 접속. Tailscale 주소 쓰면 외부 네트워크에서도 된다.

📌 세션 유지 — tmux

SSH가 끊겨도 작업 세션이 살아있으려면 tmux가 답이다.

# 세션 시작
tmux new -s claude
# 여기서 claude 같은 거 실행
# detach (터미널 닫아도 세션 유지)
Ctrl+B, D
# 돌아와서 재접속
tmux attach -s claude

출근길에 모바일로 tmux attach해서 어제 띄워둔 세션 그대로 이어가는 게 가능하다.


4단계. 그리고 Claude Cowork이 왔다

여기까지 세팅하고 잘 쓰고 있는데 Anthropic이 Claude Cowork에 Dispatch 기능을 research preview로 내놨다.

몇 달 동안 내가 만든 건 폰에서 작업 던지면 서버 컴퓨터가 받아서 일하고 결과 돌려주는 시스템이었다. Cowork Dispatch가 하는 일이 정확히 그거다.

폰에서 Claude에게 작업을 맡기고, 다른 일을 하다가 돌아오면 끝나 있는 구조. 데스크톱 Claude가 로컬 파일, 커넥터, 설치된 플러그인, 컴퓨터 제어까지 쓸 수 있다.

OpenClaw이 DIY라면 Cowork Dispatch는 Anthropic이 만든 매니지드 버전이다. 직접 세팅해본 사람 입장에서 차이가 선명하게 보인다.

🦞 OpenClaw (DIY)

• Docker Compose로 직접 띄움
• 원하는 모델 자유롭게 (OpenRouter, 로컬 Ollama 등)
• 24/7 백그라운드 실행 가능, cron 등록 가능
• 세팅 비용 = 시간 + 조금의 삽질

🤖 Cowork Dispatch (매니지드)

• QR 코드 스캔 30초 세팅
• Claude만 사용 (모델 선택 제한)
• 세션 기반 — 컴퓨터가 켜져 있고 Claude Desktop이 열려 있어야 함
• Pro/Max 플랜 필요

둘 다 써보고 나니까 이렇게 정리된다.

“제품 써보고 싶다”면 Cowork이 빠르다. 30초 세팅. 어제까지 없던 걸 오늘 쓸 수 있다.

“내 것으로 만들고 싶다”면 OpenClaw이다. 모델 바꾸고, 로컬 LLM 붙이고, 스케줄 돌리고, 로그 뜯어보고. 대신 전원 설정부터 launchctl까지 다 내가 책임진다.

한 가지 덧붙이자면, 직접 세팅해본 뒤에 Cowork을 쓰는 감각이 다르다. 제품 뒤에서 뭐가 돌고 있는지 대충 그려진다.


순서 다시 정리

1. 놀고 있는 노트북으로 시작 — API 기반이면 이걸로 충분
2. 전원·네트워크 안정화 — 기능보다 인프라가 먼저
3. API 비용이 아까워질 때 Mac mini — 로컬 LLM이 필요해지는 시점
4. 매니지드 서비스도 병행 — Cowork 같은 건 쓰면서 배운다

Mac mini는 좋은 기계다. 근데 모든 사람의 1단계는 아니다.
집에 안 쓰는 노트북이 있으면 거기서 시작해보고 필요성을 느끼면, 그때 사도 늦지 않다.

나도 그렇게 했다.

댓글 남기기