Windows에서 Mac으로 갈아타며 Vault에 API 서버 + Tailscale 입혀보기

소개

지난주 스터디에는 텔레그램으로 아이디어를 던지면 AI와 디벨롭해서 저장 요청하면
Obsidian Vault에 자동 분류 저장해주는 시스템까지 완성했었습니다!
근데 이번 주초에 스터디장님이신 재엽님의 조언을 얻고 구매한 맥북에어가 도착하면서 ...
맥북으로 작업을 이어서 하려다보니 단축키 부터 다 달라서 너무 어렵더라구요...!!!!!!!!!

윈도우에서 당연하게 쓰던 것들이 맥에서는 다 낯설고,
우당탕탕하다보니 API 키를 통째로 넘겨버리는 사고도 쳤어요 😅 (다행해 (?) 바로 재발급했습니다...)

어쨌든 이번주는 스터디에 나와있는 커리큘럼에 맞춰,
기존 구조에 API 서버 + Tailscale을 붙여서 업그레이드 ..(?) 해보는 것을 목표로 했습니다.

[지난주 As-is]
텔레그램 → AI API → Vault 자동분류 저장
(pc가 켜져있고, 로컬에서만 작동하는 형태)

[이번주 To-be]
텔레그램 → AI API → Vault 자동분류 저장
             +
API 서버 → Tailscale → 외부 어디서든 Vault 조회/저장 가능
  • 외부 = 내 mac이 아닌 모든 곳

진행 방법

  • Step1. Mac 환경 셋업
    윈도우에서 구축해놓은 것을 그대로 처음부터 다시 셋업

# 가상환경 만들기
python3 -m venv venv
source venv/bin/activate  # Windows는 venv\Scripts\activate 였는데 Mac은 다름

# 라이브러리 설치
pip install python-telegram-bot anthropic python-dotenv fastapi uvicorn
  • Vault 구조도 새로 설계

    • 기존 Vault 구조가 너무 단순해서 이번에 같이 갈아엎었어요. ChatGPT랑 그동안 대화한 내용을 기반으로 적절한 vault 구조를 추천받고, 클로드 코드에게 만들어달라고 했습니다.

      📂 00_Home
      📂 01_Identity
      📂 02_Career
      📂 03_AI
      📂 04_Teaching
      📂 05_Brand
      📂 06_Experiments
      📂 07_Network
      📂 08_Review
      📂 99_Archive
    • 프롬프트

      아래 구조로 Obsidian Vault 폴더와 인덱스 마크다운 파일을 만들어줘.
      각 폴더마다 _INDEX.md 파일을 만들고 프론트매터를 붙여줘.
      ---
      title: (폴더명)
      created: 2026-06-03
      tags: []
      status: active
      ---
      • 이렇게 했을 때 폴더 구조는 완성됐는데, 그 안에 내용은 기존 가지고 있는 문서들을 하나하나 직접 매핑해서 채워야 하는건지... 좀 더 효과적으로 빠르게 내용을 넣는 방법이 있을지 궁금합니다! (이것도 클코가 해주려나요...?)


  • Step 2. Tailscale 설치 - "내 Mac에 고정 주소 부여하기"

    tailscale.com/download 에서 Mac 버전 설치 → 구글 로그인 → 맥북 연결하면 고정 IP가 생성

    • Tailscale 사용 이유 : 집에 있는 Mac은 인터넷에서 주소를 찾을 수가 없음. 공유기가 막고 있기 때문에. Tailscale은 그 공유기 벽을 뚫어서 복잡한 서버 배포없이 어디서든 내 Mac을 찾아올 수 있는 비밀 통로를 만들어주는 역할 (...이라고 이해했는데 맞나요? 🙂 )

  • Step 3. FastAPI 서버 만들기 - "Valut에 문 만들기"

    • 지금 텔레그램 봇은 텔레그램과만 연결되어 있음. Valut와 인터페이스된 창구가 텔레그램 하나뿐이라는 의미

    • API 서버를 만드는 이유 : 텔레그램 말고도, claude 같은 LLM, 다른 컴퓨터에서도 접근할 수 있는 문의 역할을 하기 위해서 만드는 것

      • 프롬프트

        Railway 배포 아니고, 로컬 Mac에서 실행하고 Tailscale로 외부 접근할 거야.
        ~/telegram_vault_bot 폴더에 Vault를 조회하고 저장할 수 있는
        간단한 FastAPI 서버 main.py 만들어줘.
        엔드포인트는 두 개:
        1. GET /vault/search?q=검색어 - Vault에서 검색
        2. POST /vault/save - 새 문서 저장
        VAULT_PATH는 .env에서 읽어와줘.
      • 결과

        완료. 두 엔드포인트 모두 동작합니다.
        
        ┌────────────────────────────┬─────────────────────────────────────────┐
        │ GET /vault/search?q=검색어 │ curl "http://localhost:8000/vault/search?q=Career" │
        │ POST /vault/save           │ body: {"title":"제목", "content":"내용", "folder":"03_AI"} │
        └────────────────────────────┴─────────────────────────────────────────┘
        
        API 문서는 http://localhost:8000/docs 로 확인 가능
      • 처음에 그냥 "FastAPI 서버 만들어줘"라고 했더니 Claude Code가 Railway 배포용으로 만들려고 했음. 맥락을 추가해줬을때 다시 제대로 작업을 완료함

  • Step 4. 로컬 테스트 — "일단 내 Mac에서 작동하는지 확인"

    • 서버를 실행하고 실제로 내 옵시디언 Vault를 읽어오는지 확인

      # 서버 실행
      cd ~/telegram_vault_bot
      source venv/bin/activate
      uvicorn main:app --host 0.0.0.0 --port 8000
      
      # Vault 검색 테스트
      curl "http://localhost:8000/vault/search?q=AI"
      결과
      [{"title":"AI 공부 계획 세우기","folder":"03_AI","filename":"2026-06-03 AI 공부 계획 세우기.md","path":"03_AI/2026-06-03 AI 공부 계획 세우기.md","snippet":"---\ntitle: AI 공부 계획 세우기\ncreated: 2026-06-03\ntags: [telegram, ai-conversation]\nstatus: active\n---\n\n## 핵심 요약\n\n* A..."},{"title":"AI Case Studies","folder":"03_AI","filename":"AI Case Studies.md","path":"03_AI/AI Case Studies.md","snippet":"---\ntitle: AI Case Studies\ncreated: 2026-06-03\ntags: []\nstatus: active\n---"},{"title":"AI Learning","folder":"03_AI","filename":"AI Learning.md","path":"03_AI/AI Learning.md","snippet":"---\ntitle: AI Learning\ncreated: 2026-06-03\ntags: []\nstatus: active\n---"},{"title":"03_AI","folder":"03_AI","filename":"_INDEX.md","path":"03_AI/_INDEX.md","snippet":"---\ntitle: 03_AI\ncreated: 2026-06-03\ntags: []\nstatus: active\n---"},{"title":"AI Experiments","folder":"06_Experiments","filename":"AI Experiments.md","path":"06_Experiments/AI Experiments.md","snippet":"---\ntitle: AI Experiments\ncreated: 2026-06-03\ntags: []\nstatus: active\n---"}]%              bogyeong@bogyeong-ui-MacBookAir ~ %
      • AI"를 검색어로 색하니까 03_AI 폴더 안 파일들이 프론트매터까지 포함해서 쭉 나옴.
        "API 서버가 Vault 파일을 직접 읽어서 결과를 돌려준다"는 부분이 정상 작동함을 확인함.

    • Step 5. Tailscale로 외부 접근 테스트 — "진짜 어디서든 되는지 확인"

      • api로 확인한 후 Tailscale IP로 접근 시도

        # GET - 외부에서 Vault 검색
        curl "http://[Tailscale_IP]:8000/vault/search?q=AI"
        
        # POST - 외부에서 Vault에 저장
        curl -X POST "http://[Tailscale_IP]:8000/vault/save" \
          -H "Content-Type: application/json" \
          -d '{
            "title": "Tailscale 테스트",
            "content": "오늘 API 서버 + Tailscale 연동 성공!",
            "folder": "08_Review"
          }'
        • GET 결과: localhost로 했을 때랑 완전히 동일한 결과

        • POST 결과: Obsidian 열어보니 08_Review 폴더에 파일 생김

          맥 os x os x os x os x os x os
    • Step 6. Claude.ai MCP 연결 시도 = 실패

      • "Claude.ai에서 대화하다가 '이거 Vault에 저장해줘' 하면 Obsidian에 바로 꽂히도록 만들어보려고 함.

      • Claude가 알려준 대로 Claude.ai 설정 → 커스텀 커넥터 추가 → Tailscale IP 입력하니까 안됨

        • 이유 : Claude.ai는 보안상 https만 허용해요. 로컬 서버는 http라 막힘

          --> 클로드 추천 해결책 : ngrok으로 로컬 서버에 임시 https 주소를 생성

          구글 문서

결과와 배운 점

배운 점과 나만의 꿀팁을 알려주세요.

  • 지난주까지는 텔레그램만 내 Vault에 연결된 상태였는데, API 서버를 만드니까 텔레그램 말고 뭐든 붙일 수 있는 인터페이스 구조도 가능하다는 것을 배웠습니다!

  • Claude Code 한테 맥락을 구체적으로 안줬을때 완전히 다른 코드가 나오니까 역시나 맥락을 잘 줘야 한다는 것도 다시 느낄 수 있었습니다.

  • 계속 클로드한테 "해줘"만 반복하다 보니까 이게 지금 뭘 위해서 하는 작업인지 계속 놓치게 되는 경우가 많아서 저의 경우는 뭔가 작업을 해주면 "그거 왜하는 건데?", "무슨 의미인데"라고 되물어보며 조금 늦더라도 왜와 무슨 의미를 파악하면서 하다 보니 이해도가 높아져서 좋았습니다!

과정 중에 어떤 시행착오를 겪었나요?

Claude.ai MCP https 관련 : 로컬 서버는 http인데 Claude.ai는 https만 받아요. ngrok으로 해결 가능하고 다음 주에 도전할 예정입니다!

도움이 필요한 부분이 있나요?

Vault 폴더 구조는 완성했는데 안에 내용을 어떻게 빠르게 효율적으로 채워야 하는지 모르겠습니다!
마찬가지로 클로드 코드에게 시키면 될지...클로드 코드로 요청했을때 정말 잘 구분해서 매핑해주는지도 궁금합니다. 경험해보신 분들은 알려주시면 감사하겠습니다 🙂

앞으로의 계획이 있다면 들려주세요.

  • ngrok으로 https 연결 → Claude.ai MCP 연동 완성

  • "이거 Vault에 저장해줘" → Claude.ai에서 바로 Obsidian에 꽂히는 구조

  • 텔레그램으로 Claude Code 호출 → Next.js 프로젝트 코드 직접 수정

밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.