안녕하세요. 냐안의별입니다.
토요일 오후 3시, 카페 창가였습니다. 아메리카노 얼음이 쨍그랑 한 번 울리고, 폰 화면 위로 햇빛이 비스듬히 떨어졌어요. 80페이지짜리 증권사 PDF 링크를 복사해 텔레그램 입력창에 붙이고 — 엄지로 send. 잠금화면을 내리고 책을 폈습니다.
저쪽 끝(맥미니)에서는 이런 일이 벌어지고 있었어요.
14:53:02 PDF 5.7MB 다운로드 시작
14:53:18 80페이지 PNG 변환 (200dpi)
14:54:47 챕터 3개로 분할 → 하위 에이전트 3개 병렬 호출
14:57:30 Obsidian vault에 노트 3장 작성
14:58:11 Theme_Research_Index 업데이트 + 통합 가이드 작성
5분 뒤 진동. 폰을 들었더니 vault에 챕터별 요약 노트 세 장이 떠 있었어요. 내 손은 링크 하나만 던졌는데, 맥미니는 그 5분 동안 다운로드·페이지 분할·챕터별 요약·인덱스 갱신까지 다 했더라고요. 두 번째 진동이 오는 줄 알고 폰을 한 번 더 확인했습니다.
한국사이트 스크린샷
이게 2주차 강의가 약속한 그림 — "맥미니가 1인 비서, 폰은 그 비서에게 말 거는 전화기" 가 진짜로 굴러간 한 장면이었어요. 이번 주 후기는 그 한 주 통째 정리입니다.
🛠 환경 미리 안내
저는 맥미니로 했지만, 맥북·구형 아이맥·라즈베리파이 4 이상도 같 은 패턴이 됩니다. 24시간 켜둘 수 있는 컴퓨터면 OK
결론만 빨리 보고 싶으시면 → 아래 ⏱ 30분 스타터 키트 부터 펴주세요
검증 환경 (재현용): macOS 15.x · Claude Code 최신 · Python 3.13 · ttyd 1.7+ · Tailscale
[📷 이미지 자리: week2-overview.png — 자동 업로드 됨, 아래 첨부 사진에서 끌어다 이 위치로]
수업 전 — 이번 주는 뭘 한다고 했나
1주차에 깔린 그림은 이거였어요.
기능(1주차) → 사용자 UI(2주차) → 시스템 UI(3주차) → 표준 UI(4주차)
이번 주는 사용자 UI, 다시 말해 사람이 직접 손에 들고 쓰는 인터페이스. 강의 마지막에 강사님이 한 줄 던지셨던 그게 그대로 이번 주제가 됐습니다.
"2주차 텔레그램 봇이 호출할 게 바로 이 슬래시 커맨드들이다."
저는 사실 1주차 끝나고 일주일 동안 텔레그램 봇을 미리 만들어 둔 상태였어요. 그래서 이번 주는 "내가 만든 게 강의에서 말한 그 그림에 진짜로 들어맞는가" 를 확인하는 시간이기도 했습니다.
수업 중 — 텔레그램 봇이라는 "다리"
핵심 그림은 단순했어요.
폰(텔레그램) ──▶ 봇 ──▶ claude -p "<메시지>" ──▶ 맥미니의 vault 작업
──▶ 결과를 다시 텔레그램으로
봇은 두뇌가 아니라 다리라는 게 가장 큰 포인트였습니다. 헤르메스처럼 모델이 봇 안에 들어있는 게 아니라, 봇은 그냥 메시지를 받아 claude CLI에 흘려보내는 통로. 두뇌는 어디까지나 맥미니의 Claude Code예요.
그래서 폰에서 보낸 자연어 한 줄이 → 맥미니 안에서 파일을 만들고, 코드를 고치고, MCP 서버를 부르고, 결과를 다시 폰으로 흘려보냅니다. 폰이 키보드가 되고, 맥미니가 본체가 되는 구조.
이번 강의에서 새로 배운 거 정리하면:
BotFather에서 봇 토큰 받기 — 사실상 "봇 만들기"의 99%
봇 코드는 long-polling 한 파일이면 끝 — 외부 의존성 0개로도 충분
launchd로 부팅 시 자동 실행 —
KeepAlive: true만 켜두면 죽어도 알아서 살아남--output-format stream-json— Claude의 사고·도구호출·결과를 한 줄짜리 JSON으로 흘려보내고, 봇이 그걸 파싱해서 "🔧 Edit: bot.py" 같은 사람 말로 폰에 중계합니다. 예를 들면 이런 게 들어옵니다:{"type":"tool_use","name":"Edit","input":{"file_path":"bot.py","old_string":"...","new_string":"..."}}봇이 이 JSON을 보고 폰에는 "🔧 Edit: bot.py" 한 줄로 압축해서 띄워주는 거예요. 봇의 정체가 여기서 드러나요 — 봇은 두뇌가 아니라 번역기입니다.
bypassPermissions— 폰에서는 "이거 해도 돼?" 팝업을 띄울 데가 없으니 미리 켜둬야 함--resume <세션ID>— 메시지끼리 맥락이 이어지게./new치면 새 대화
봇 코드는 사실상 이렇게 한 폴더 안에 다 들어있어요.
~/telegram-vault-bot/
├── bot.py # 메인 (long-polling + claude 실행 + 스트리밍)
├── set-token.py # BotFather 토큰 안전 저장 스크립트
├── .env # 토큰·허용 유저·작업 폴더·권한 (600, git X)
├── state.json # 세션 ID 보관 (대화 맥락 유지용)
├── bot.out.log # 표준 출력
└── bot.err.log # 에러
이걸 다 합치면, 폰에서 보낸 "오늘 일지 정리해줘" 한 마디가 맥미니의 vault에 그대로 노트 한 장으로 떨어집니다. 이게 진짜 됩니다.
💬 체감 사례: 지난 일주일 동안 이 봇이 폰에서 받은 사진·파일만 22개입니다. 모임 사진, 화이트보드 메모, 자료 PDF — 폰에서 텔레그램으로 쏘면 맥미니의
~/gpters-photos/에 알아서 떨어져요. 1주차 후기에 들어간 사진들도 다 이렇게 들어왔습니다.
자세한 봇 구조·운영 방법은 [[2026-05-23-telegram-vault-bot]] 노트로 따로 정리해뒀습니다.
📖 모르는 용어가 나왔다면 (한 줄 사전)
launchd — 맥의 자동시작·복구 매니저. 부팅하면 켜고, 죽으면 살리고, 로그도 모아줌. 윈도우의 "작업 스케줄러" 같은 것
stream-json — Claude의 사고·도구 호출을 JSON 한 줄씩 실시간으로 흘려보내는 출력 옵션. 봇이 그걸 사람 말로 번역해서 폰에 띄움
bypassPermissions — Claude가 "이거 해도 돼?" 묻지 않고 바로 실행하는 모드. 폰에선 승인 팝업을 띄울 데가 없어서 미리 켜둠 (대신 허용 유저 화이트리스트 필수)
Tailscale — 내 기기들끼리만 보이는 비밀 네트워크. 인터넷 노출 없이 폰·노트북·맥미니를 한 사설망에 묶음 (1주차 끝에 깔아둠)
수업 후 — 1주일 동안 진짜로 시켜본 것들
여기부터는 강의에서 직접 다룬 건 아니지만, 1주차 끝나고 2주차까지 일주일 동안 실제로 폰·노트북에서 맥미니 1·2번에 시키면서 알게 된 것들이에요. 강의에서 깔린 그림이 일상에 어떻게 녹는지 보여드리고 싶어서 한 묶음으로 남깁니다.
🪟 1) 윈도우 노트북에서 맥미니에 작업 시키는 게 — 진짜 신세계
이게 이번 주에 제일 좋았던 부분입니다.
한국사이트 스크린샷
저는 평소에 윈도우 노트북도 자주 씁니다. 외출할 때, 카페에서 글 쓸 때, 거실 소파에서. 카페에서 노트북 팬이 도르륵 돌 때마다 "아, 맥미니 앞에 있었으면…" 했었어요. 그동안은 맥미니에 화면 공유(TeamViewer)로 접속해 쓰던 게 다였는데 — 이제는 그 팬 소리가 안 납니다. 무거운 건 다 맥미니가 하니까요.
지금은 윈도우 노트북에서 이렇게 합니다:
✅ SSH — 그냥 윈도우 터미널에서 맥미니로 들어감
윈도우 11 PowerShell이나 Windows Terminal에서:
ssh <맥미니계정>@<Tailscale-IP>
이거 한 줄이면 맥미니2 안에 들어가 있습니다. (IP는 Tailscale이 깔아준 사설 IP고, 1주차 끝나고 깐 Tailscale이 여기서 진가를 발휘했어요.)
들어간 뒤엔 그냥 맥미니 본체에 앉아있는 거랑 똑같아요.
claude -p "오늘 KB증권 보고서 요약해줘"한 줄이면 맥미니에서 Claude가 돕니다.hermes -z "...."도 동일.vault 안 파일도 그냥
vim이나nano로 고침.무거운 작업도 윈도우 노트북 배터리가 아니라 맥미니가 다 처리. 노트북은 키보드만 두드림.
처음 했을 때 솔직히 "이게 왜 이렇게 좋지?" 싶었어요. 노트북 발열도 없고, 팬도 안 돌고, 배터리도 안 닳습니다. 무거운 건 다 맥미니가 합니다.
✅ ttyd — 브라우저에서 맥미니 터미널을 그대로
SSH는 좋은데, 가끔 SSH가 안 깔린 환경(공용 PC, 누구 노트북 빌렸을 때 등)에서도 맥미니를 만지고 싶을 때가 있더라고요. 그래서 깐 게 ttyd예요.
ttyd는 터미널을 브라우저로 보여주는 도구입니다. 맥미니에서 한 번 띄워두면, 어디서든 브라우저로 http://<Tailscale-IP>:7681 열고 ID/비번 한 번 치면 맥미니 zsh 셸이 그대로 떠요.
설정도 간단했어요. brew install ttyd → launchd plist 한 장 (포트 7681, 입력 허용, basic auth, 로그인 셸) → 끝. 브라우저만 있으면 맥미니 터미널이 손바닥에 들어옵니다. 자세한 옵션은 [[web-terminal]] 노트로 따로 정리해뒀어요.
카페 모니터에서, 누구 아이패드에서, 심지어 폰 브라우저에서도 됩니다. (폰은 키보드가 작아서 텔레그램 봇이 더 편하긴 합니다.)
💡 보안 메모: ttyd를 외부 인터넷에 노출하면 위험합니다. Tailscale 안에서만 접근되게 막아뒀고, basic auth도 켰어요. 공개 사이트엔 IP·계정명 마스킹도 같이 적용했습니다.
✅ 정리하면
상황
도구
윈도우 노트북에서 키보드 작업
SSH
누구 컴퓨터 빌렸을 때 / 브라우저만 됨
ttyd
폰 들고 자연어로 시키고 싶음
텔레그램 봇
폰에서 화면 직접 봐야 함
TeamViewer (옛날 방식, 가끔만)
그동안 TeamViewer 하나로 다 떼웠는데, 셋으로 나뉘니까 각자 진짜 잘하는 일만 합니다. 1주차 강의 동기였던 "어떻게 하면 핸드폰에서도 맥미니에서 직접 작업하는 것처럼 AI 도구들을 사용할 수 있을까?" 라는 질문이, 이번 주를 거치면서 폰·윈도우 노트북·브라우저 세 갈래로 동시에 풀린 느낌입니다.
🧭 왜 이 조합인가 (의사결정 기록)
SSH+ttyd > TeamViewer: 화면 스트리밍이 아니라 텍스트 채널이라 4G에서도 즉답, 노트북 발열·배터리 제로
launchd > cron/nohup: macOS 표준이라 OS 업데이트 후에도 살아남고,
KeepAlive로 죽으면 알아서 부활 (참고: macOS 13+부터는launchctl bootstrap gui/$(id -u) <plist>가 권장 —load는 deprecated이지만 여전히 동작)bypassPermissions > 매번 승인: 폰엔 승인 팝업을 띄울 GUI가 없음 → 안 켜면 봇이 첫 파일 수정에서 멈춤. 대신 3중 방벽 필수:
.env의TELEGRAM_ALLOWED_USERS화이트리스트 (모르는 사람 차단)
WORK_DIR을 vault로 좁히고.claude/settings.json의permissions.deny로~/.ssh/**,**/.env,Bash(rm -rf*)등 명시 차단Tailscale ACL 로 tag 기반 디바이스 격리 (가입만으로는 평면망, ACL 안 깔면 같은 tailnet 모두에서 보임)
(원격 작업 큰 그림은 [[remote-work]] 노트 참고.)
⚡ 2) 헤르메스 + 클로드 + 코덱스를 같이 굴리기 시작함
저는 그동안 헤르메스(텔레그램·디스코드 봇), 클로드 코드, 코덱스 CLI 를 따로따로 썼어요. 그런데 이번 주에 처음으로 세 놈을 동시에 굴리는 방법을 알게 됐습니다.
한국어 웹사이트 스크린샷
(이건 강의 범위 밖이라 짧게.) 핵심은 ~/ai-agents/에 둔 작은 셸 스크립트 두 개예요.
~/ai-agents/parallel.sh \
"hermes:오늘 매크로 뉴스 3개" \
"codex:이 함수 리팩토링" \
"claude:KB증권 PDF 80장 요약"
# → 셋이 동시에 돌고, ~/ai-agents/logs/<시각>/에 결과 모임
한 줄 치면 셋이 동시에 뜁니다. KB증권 80페이지짜리 하반기 전략 보고서를 분석할 때 — 혼자 다 읽기엔 주의가 무거워서 클로드 하위 에이전트 3개에게 챕터별로 분담시켰는데 너무 잘 돌아서 신기했어요. 같은 원리로 헤르메스·코덱스까지 묶으면 더 큰 일도 동시에 분할 가능합니다.
⚠️ 삽질 노트: hermes·codex가 같은 ChatGPT 토큰을 공유하더라고요. 한 번에 4개 이상 동시에 굴렸다가 429 (요청 너무 많음) 떴어요. 그 래서 동시 실행 ≤3 권장.
🤖 3) 텔레그램 봇이 진짜 손이 되는 순간들
지난 일주일 동안 폰 텔레그램으로 진짜 별별 걸 다 시켰는데, 그중 인상 깊었던 거 몇 개.
새벽에 누워서 일지 쓰기 — "오늘 한 일 정리해서 vault에 넣어줘" 한 줄. 5분 뒤 vault에 노트 한 장이 떠 있음.
외출 중에 갑자기 떠오른 종목 메모 — "두산에너빌리티 어제 종가랑 KB증권 보고서 언급 내용 정리해서 Stocks/에 저장" 같은 거.
이번 주 KB 보고서 다운로드 + PDF 분리 + 요약 + Obsidian 저장 — 이게 진짜 압권. 카페에서 폰으로 bit.ly 링크 하나 던졌더니, 맥미니가 알아서 PDF 받고, 80장으로 분리하고, 챕터별 요약하고, Obsidian에 저장하고, 인덱스까지 업데이트. "내가 한 거라곤 링크 하나 던진 것뿐" 인 게 신기했어요.
사진 자동 저장 — 폰에서 텔레그램으로 사진 쏘면
~/gpters-photos/에 자동으로 들어옴. 1주차 후기 사진들이 다 이렇게 들어온 거예요.
특히 ③ 같은 흐름이 진짜 "맥미니가 1인 비서고, 폰은 그 비서한테 말 거는 전화기" 그림을 실감하게 해줬습니다.
📊 4) 한 주 동안 vault에 쌓인 것들 — 진짜 작업내역
말로만 하면 와닿지 않을 것 같아서, 한 주간 llm-wiki 저장소에 쌓인 커밋을 카테고리별로 묶었습니다.
카테고리
이번 주
1주차
변화
AI 데일리 다이제스트
8
1
+7
홈페이지 인프라
6
4
+2
인덱스·허브 노트
4
2
+2
보안 · 마스킹
2
0
+2
작업일지·후기
2
1
+1
페르소나·메타
2
0
+2
리서치
1
0
+1
합 계
25
8
+17
1주차엔 vault 만들고 첫 글 한 편 쓰는 게 다였는데, 2주차엔 3배가 됐어요. 이 중에서 체감상 80% 이상이 폰 텔레그램이나 윈도우 노트북 SSH로 시킨 거예요. 맥미니 앞에 직접 앉아서 친 건 진짜 몇 개 안 됩니다. 특히 데일리 다이제스트는 "오늘 AI 뉴스 정리해서 다이제스트 노트 만들고 커밋해줘" 한 줄로 끝나요.
🐛 5) 다음 사람이 안 빠질 함정 체크리스트
매끄럽게 된 건 하나도 없어요. 다 삽질이었는데 — 다음에 같은 길 가실 분 위해 체크리스트로 남깁니다.
시스템 설정 → 일반 → 공유 → 원격 로그인 GUI 토글 필수 (터미널
systemsetup은 Full Disk Access로 막힘. 모르고 30분 헤맴)hermes·codex는 같은 ChatGPT 토큰 공유 → 동시 실행 ≤3 (4개 던졌다가 429 떴음. 헤르메스만 갑자기 "메시지는 받는데 답 안 하는" 좀비 상태 되면
hermes auth재인증)"봇 재시작" 명령은 지연 실행으로 →
(sleep 30; launchctl kickstart -k gui/$(id -u)/<라벨>) &(봇이 자기를 죽이는 셈이라 즉시 재시작하면 응답 끊김)ttyd는 Tailscale 내부만 + basic auth 필수 (외부 노출 금지)
.env권한 600, git 밖 (토큰 유출 시 BotFather/revoke→ 새 토큰)macOS TCC 팝업(화면녹화/FDA)은 원격 승인 불가 → 맥 앞에서 1회 직접 클릭
💪 삽질은 짜증이 아니라 근육이에요. 그때는 짜증나는데, 한 번 박힌 건 다음엔 1분이면 끝납니다.
🛠 6) 따라 해보고 싶으시다면 — 30분 스타터 키트
한국어 텍스트가 있는 웹사이트
이 글 보고 "나도 폰에서 맥미니 부려보고 싶은데..." 싶으시면 정확히 이 다섯 단계입니다. 제가 처음 했을 땐 함정 두 개 만나서 50분쯤 걸렸어요. 그 함정들을 위 §5에 미리 깔아뒀으니, 매끄럽게 가면 30분 안엔 첫 응답 받으실 거예요.
BotFather에
/newbot→ 토큰 받기 (5분)텔레그램 앱에서
@BotFather검색 → 채팅 시작/newbot입력 → 이름·아이디 정하라는 안내대로 입력마지막에 길쭉한 토큰 한 줄이 옴 (
123456789:ABC...) — 이게 봇의 비밀번호. 잘 챙겨두기
bot.py골격을 폴더에 — 자세한 코드는 [[2026-05-23-telegram-vault-bot]] 노트에 풀스펙 (3분).env에 토큰·내 텔레그램 ID 박기 — 봇에게/whoami한 번 보내면 ID 알려줍니다 (5분)launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/<라벨>.plist— 부팅 시 자동 시작 + 죽으면 부활 (2분) ⚠️ 막히면 §5 체크리스트 1번 (SSH GUI 토글)폰에서 "안녕" — 응답 오면 성공. 안 오면 §5 체크리스트 위에서부터 한 줄씩 (1분)
🎯 핵심 통찰: 봇 만들기의 99%는 1번(BotFather 토큰)입니다. 나머지는 launchd +
claude -p한 줄이면 다 굴러가요.
한 단계 더 가고 싶다면:
[[2026-05-23-telegram-vault-bot]] — 봇 명령어·plist·.env 풀스펙
[[remote-work]] / [[web-terminal]] — SSH·ttyd 통합 정리
Tailscale ACL 공식 문서 — 3주차 가기 전 ACL 한 줄로 디바이스 격리
마무리 — 두뇌는 두고, 다리만 늘려라
1주차에 "vault라는 기능 계층"이 깔렸다면, 2주차엔 그 vault를 어디서든 부를 수 있는 인터페이스 계층이 얹어졌습니다. 부르는 방법이 텔레그램 봇 하나만이 아니더라고요 — SSH, ttyd, 멀티에이전트 디스패처. 상황마다 손에 잡히는 가장 편한 도구를 골라 쓰는 그림이 됐어요.
이번 주의 진짜 통찰은 사실 도구 목록이 아니라 이거였습니다.
"봇은 두뇌가 아니라 다리다. 두뇌를 옮기지 말고, 다리만 늘려라."
두뇌(맥미니의 Claude)는 한 자리에 두고, 그 두뇌에 닿는 손만 폰·노트북·브라우저로 세 개로 늘렸어요. 그러니까 어디서 키보드를 두드리든 결국 같은 두뇌가 일을 합니다. 좋은 인터페이스는 본체를 잊게 합니다 — 맥미니는 보이지 않을 때 가장 잘 일했어요.
1주차 끝에 카파시가 던진 한 줄, "I want to write notes that LLMs can read." — 1주차엔 그 말을 좇아 LLM이 읽을 수 있는 노트를 썼다면, 2주차엔 그 노트를 내가 어디 있든 LLM이 대신 쓰게 됐어요. Karpathy의 한 줄이 한 계단 내려와 손에 잡힌 한 주였습니다.
그래서 한 주 뒤에서 보니, 이건 도구를 늘리는 게 아니라, 내가 있어야 할 자리를 줄이는 일이었다는 생각이 들어요. 일·도구·내 시간에 대한 작은 태도 하나가 같이 바뀐 한 주였습니다.
⚠️ 다만 한 줄 솔직하게 — 지금 구조의 가장 큰 약점은 모든 다리가 한 본체에 매달려 있다는 것이에요. 맥미니가 죽으면 폰도 노트북도 다 멍해집니다. 단일 장애점(single point of failure). 3주차에 Tailscale·API가 깔리면 두뇌 자체를 어떻게 이중화할지 한 번 더 고민할 거리가 생기겠죠.
맥미니는 더 이상 책상 위에 있지 않아요. 제 주머니 안에 있습니다.
📮 여러분께 묻고 싶은 한 가지
여러분의 '본체'는 어디 있고, '다리'는 몇 개인가요? 한 줄로 적어주세요 — 다음 주 후기에 익명으로 모아서 인용하겠습니 다. ✍️
🗓 그리고 ─ 다음 주 / 마무리 행정
3주차 — 시스템 UI (Tailscale + API): 이번 주 SSH/ttyd가 이미 Tailscale 위에서 굴렀으니 도입은 부드러울 것 같고, API까지 더해지면 다음 단계 그림이 나옵니다.
4주차 — 표준 UI (MCP): 그때쯤이면 헤르메스·코덱스까지 한 호흡으로 묶이는 그림이 진짜 완성될 것 같아요.
강의에 살짝 아쉬웠던 점: 봇 만들기까지는 잘 따라갔는데 봇 운영 후 안정성·디버깅 (launchd 재시작 타이밍, 토큰 만료 같은 운영 함정) 얘기가 없어서 일주일 동안 혼자 부딪히며 알아갔어요. 3주차 Tailscale + API 들어가기 전에 한 줄이라도 짚어주시면 좋겠습니다.
다음 주에 뵙겠습니다. 🙌
냐안의별 이었습니다.