안녕하세요. 냐안의별입니다.
토요일 오후 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 들어가기 전에 한 줄이라도 짚어주시면 좋겠습니다.
다음 주에 뵙겠습니다. 🙌
냐안의별 이었습니다.