7회차의 To-do 앱에 진짜 기능을 붙이고, 인터넷에 배포해 어디서나 쓸 수 있게 만듭니다. 이번 회차의 목표는 한 가지 기능을 추가하는 게 아니라 '기능 확장 → 디버깅 → 배포 → 운영'이라는 한 사이클을 끝까지 도는 것 — 다음 앱도 같은 사이클로 만들 수 있게.
⚡ 기능 추가 — 한 번에 한 기능
실력이 가장 빨리 느는 패턴 — '아주 작은 기능을 자주, 매번 확인'. 한 번에 모든 걸 요청하면 어디서 깨졌는지 모르고 디버깅이 늪이 됩니다.
- Claude에 '항목별 우선순위(높음/보통/낮음) 표시 기능' 한 가지만 요청
- 결과 확인 → 마음에 들면 다음으로
- '완료된 항목은 흐리게 + 맨 아래로 정렬'
- '카테고리(태그) 추가 + 태그 필터'
- '다크/라이트 모드 토글 + 시스템 설정 따라가기'
- '모바일 친화적으로 반응형 다듬기'
💾 상태 저장 — localStorage·DB
새로고침해도 데이터가 사라지지 않게. 작은 앱은 localStorage, 큰 앱은 DB(Supabase·Firebase).
- localStorage — 브라우저 안에 저장, 그 기기·브라우저에서만. 무료·무제한 가깝게
- sessionStorage — 탭 닫으면 사라짐 (임시)
- IndexedDB — 큰 데이터(이미지·파일) 저장
- Supabase — PostgreSQL DB + 인증 + 무료 시작 (다중 기기·다중 사용자 시)
- Firebase — NoSQL + 인증 + 무료 시작
🌐 외부 API 1 — 날씨 (키 불필요)
가장 쉬운 외부 데이터. API 키 발급 없이 Open-Meteo로 즉시.
- Claude에 아래 프롬프트 그대로
- Claude가 fetch 호출 코드를 자동 작성 + 화면에 표시
- 브라우저 새로고침 → 실제 날씨 확인
- 에러 처리(네트워크 끊김·API 다운)까지 같이 요청해두기
내 To-do 앱 상단에 [서울 현재 기온 + 날씨 아이콘 + 한 줄 코멘트]를 표시해줘.
API: Open-Meteo (https://api.open-meteo.com/v1/forecast), 키 불필요.
파라미터: latitude=37.57, longitude=126.98, current=temperature_2m,weather_code
요구사항:
- 페이지 로딩 시 자동 호출
- 5분 캐시 (localStorage)
- 실패 시 '날씨 정보 없음'으로 폴백, 콘솔에 에러 로그
- 디자인은 본문 톤과 어울리게
🌐 외부 API 2 — 환율·뉴스·기타
- 환율 — exchangerate-api.com (무료 1500회/월, 키 필요)
- 뉴스 — newsapi.org (무료 100회/일, 키 필요)
- Pokemon — pokeapi.co (무료, 키 불필요, 학습용으로 좋음)
- 공휴일 — date.nager.at (무료, 키 불필요)
- 주가 — Alpha Vantage·Yahoo Finance (무료 + 유료)
- 이미지 — Unsplash API (무료, 키 필요)
🤖 ChatGPT API 직접 호출 — 내 앱 안에서
내 앱에 'AI 기능'을 붙입니다. To-do 앱이라면 '오늘 할 일 자동 제안' 같은 기능을 추가.
- platform.openai.com → API keys → Create new secret key
- 받은 키를 .env 파일에 'OPENAI_API_KEY=sk-...' 저장
- Claude에 '내 To-do에 AI 추천 버튼 추가, OpenAI API 사용, 키는 .env에서'
- Claude가 자동으로 fetch 호출 코드 + 키 로딩 코드 작성
- 주의 — 브라우저에서 직접 호출하면 키 노출. 서버 함수(Vercel Serverless) 거쳐야 안전
- Claude에 '키 노출 안 되게 서버 함수로 분리해줘' 한 줄 추가하면 자동 변환
🎨 디자인 — Tailwind·다크 모드·반응형
Claude는 디자인 시스템도 알아서 적용해 줍니다. '이런 느낌으로'만 던지세요.
- Tailwind CSS — 작은 스타일 조각(클래스)을 HTML 태그에 직접 붙여 디자인 (예: bg-blue-500 px-4 py-2 rounded → 파란 버튼이 한 줄로 완성). 별도 CSS 파일·이름 짓기가 없어 Claude가 자주 채택
- 다크 모드 — prefers-color-scheme 자동 감지 또는 토글
- 반응형 — 모바일 → 태블릿 → PC 화면 너비별 자동 조정
- 애니메이션 — '버튼 클릭 시 살짝 흔들리게', '추가될 때 위에서 내려오게'
- 접근성 — '키보드만으로 조작 가능하게', '색맹 친화적 팔레트'
🐛 에러 해결 — 5단계 디버깅 워크플로
에러는 일상. 두려워하지 말고 정해진 절차로 풀면 됩니다.
- 1. 재현 — 어떻게 하면 다시 나는지 정확히
- 2. 콘솔 확인 — F12 → Console → 빨간 줄 전체 복사
- 3. Claude에 던지기 — 에러 + '내가 한 동작' + '기대한 결과'
- 4. 수정 적용 — Claude의 진단·코드 받은 뒤 적용
- 5. 재테스트 — 같은 동작·다른 동작 모두 확인
다음 에러가 났어:
[에러 메시지 전체 붙여넣기]
내가 한 동작:
- 추가 버튼을 빠르게 두 번 눌렀어
기대한 결과:
- 항목 하나만 추가
원인 진단 + 수정 코드 + '다음에 같은 실수 막는 법'까지 알려줘.
🌿 Git 워크플로 — Claude가 대신 해줌
커밋·푸시·되돌리기를 명령어로 외울 필요 없습니다. 자연어로 시키면 됩니다.
- 초기화 — 'Git 초기화하고 첫 커밋 만들어줘'
- 저장 — '여기까지 커밋해줘, 메시지는 "우선순위 기능 추가"'
- 되돌리기 — '직전 커밋으로 되돌려' / '특정 파일만 되돌려'
- 브랜치 — '새 기능용 브랜치 만들고 거기서 작업'
- 푸시(push) — 'GitHub에 푸시해줘' = 내 변경을 원격 저장소로 올리기
- 풀(pull) — 'GitHub 최신 내용 받아와줘' = 원격의 변경을 내 PC로 내려받기
- 머지(merge) — '이 브랜치를 main에 합쳐줘' = 갈라진 작업을 하나로 합치기
- 이력 보기 — '커밋 이력 최근 10개 보여줘'
🔄 push·pull·merge — 협업의 3박자
혼자 한 PC로만 작업하면 커밋만 알면 됩니다. 하지만 여러 기기·여러 사람이 같은 코드를 만지거나, GitHub에 올려 자동 배포(Vercel·Netlify)를 쓰면 push·pull·merge가 필요해져요. 클라우드 문서함에 비유하면 쉽습니다.
- 푸시(push) — 내 변경을 클라우드(GitHub)로 '올리기'. 업로드라고 생각하면 됩니다
- 풀(pull) — 클라우드의 최신 변경을 내 PC로 '내려받기'. 다운로드. 작업 시작 전 'pull 먼저'가 습관
- 머지(merge) — 서로 갈라져 진행된 변경을 '하나로 합치기'. 예: 내 브랜치 작업을 main에 합침
왜 순서가 중요하냐면 — 남(또는 다른 기기의 나)이 먼저 올린 변경이 있는데 pull 없이 내 것만 push하면 충돌이 납니다. 그래서 기본 리듬은 'pull(최신 받기) → 작업·커밋 → push(올리기)'예요.
- 작업 시작 전 — '원격 최신 내용 pull 해줘' (남의 변경 먼저 반영)
- 기능 작업 — 브랜치 만들어 커밋들 쌓기
- 합치기 — 'main으로 merge해줘' (또는 GitHub에서 Pull Request로 검토 후 머지)
- 올리기 — 'push 해줘' → GitHub 반영 → 연결된 사이트 자동 배포
🐙 GitHub에 올리기
- github.com에서 New repository → 이름·공개 여부 선택
- Claude에 '이 GitHub 리포지토리에 푸시하는 법 알려줘 → 그대로 실행'
- 또는 '이 폴더를 GitHub의 [URL]에 푸시해줘' 한 줄로
- 푸시 후 GitHub 페이지에서 파일 확인
- .gitignore에 .env·node_modules 들어갔는지 마지막 확인 (시크릿 노출 방지)
🚀 Vercel 배포 — 1분 안에 인터넷에
- vercel.com → Sign Up → GitHub 계정으로 가입
- Dashboard → 'Add New' → 'Project'
- 방금 푸시한 GitHub 리포지토리 선택 → Import
- 프레임워크 자동 감지(또는 'Other')
- 환경 변수가 필요하면 'Environment Variables'에 추가 (OPENAI_API_KEY 등)
- Deploy 클릭 → 1~2분 대기 → ~~~.vercel.app URL 발급
- URL을 폰·다른 PC·친구에게 공유
🔐 시크릿(비밀 키) 관리 — 가장 중요한 보안
'시크릿'은 API 키처럼 남에게 보이면 안 되는 비밀번호예요. 집 현관 비밀번호나 신용카드 번호라고 생각하면 됩니다 — 한 번 새어 나가면 남이 내 계정으로 AI를 마구 써서 요금 폭탄을 맞을 수 있어요. 그래서 처음부터 '절대 공개되지 않게' 하는 습관이 중요합니다.
❓ 왜 코드에 직접 적으면 안 되나
키를 코드 안에 그냥 써놓고 GitHub에 올리면, 그 코드를 누구나 볼 수 있게 됩니다 — 비밀번호를 대문에 써붙이는 셈이죠. 그래서 키는 코드와 '분리된 비밀 서랍'에 보관하고, 코드는 그 서랍을 '참조'만 합니다. 그 비밀 서랍이 바로 환경 변수예요.
- 내 PC에서 — .env 라는 파일에 키를 적어둠 (이건 '비밀 서랍'. 내 컴퓨터에만 있고 공개 안 됨)
- .gitignore 확인 — '이 파일은 GitHub에 올리지 마' 목록. .env가 여기 있어야 키가 안 새어 나감 (Claude에 '.env를 .gitignore에 넣어줘'라고 하면 끝)
- 배포 서비스에서 — Vercel/Netlify의 설정 화면(Environment Variables)에 키를 따로 넣음. 코드엔 안 적음
- 유출되면 — 즉시 발급한 곳(OpenAI 등)에서 그 키를 '폐기'하고 새 키를 받으세요. 폐기하면 옛 키는 바로 무효화됨
🤖 자동화 — Anthropic Cloud 로 매주 자동 실행 (추천)
'GitHub 푸시 = 자동 배포'를 넘어, 정해진 시간마다 Claude 가 스스로 돌며 데이터 초안을 모으게 만들 수 있습니다. 이 사이트(AI Radar)도 매주 이렇게 최신 정보를 수집하지만, 게시 전에는 운영자가 사실 관계를 직접 검증합니다. 스케줄 실행의 가장 쉬운 길은 Anthropic Cloud 예요. 코드도, 토큰도, YAML 도 필요 없습니다. '/schedule' 로 한 번 등록하면 Anthropic 서버에서 에이전트가 정해진 시간에 알아서 돌아갑니다 — 내 PC 가 꺼져 있어도.
- Claude Code(또는 데스크탑 앱)에서 '/schedule' 입력 — 또는 브라우저로 claude.ai/code/routines 접속
- 무엇을 할지 자연어로 설명 — 어떤 레포·무슨 작업·어떻게 마무리(커밋/푸시)까지 빠짐없이
- 주기 선택 — 예: 매주 월요일 오전 9시 (최소 간격 1시간)
- 모델·레포 확인 후 생성 → 끝. 이후엔 내 PC 없이도 알아서 실행됩니다
⚙️ 심화 — GitHub Actions + setup-token (세밀한 제어·CI 통합)
Anthropic Cloud 로 충분한 경우가 대부분이지만, 기존 CI 파이프라인에 끼우거나(빌드·테스트·머지 게이트) PR·push 같은 이벤트로 트리거하고 싶으면 GitHub Actions 방식이 있습니다. 대신 setup-token 발급·시크릿 등록·YAML 작성이 필요해요.
- 공통 — 둘 다 클라우드에서 자동 실행하고 결과를 git 에 푸시
- Anthropic Cloud(추천) — 토큰·YAML 불필요, '/schedule' 한 번. 구독 한도 그대로 차감(일일 Pro 5·Max 15회), 6/15 과금 분리 영향 없음
- GitHub Actions(심화) — YAML·setup-token 필요. PR·push 이벤트 트리거, 기존 CI 통합에 강함
- 본질 차이 — Actions 는 '내가 짠 고정 스크립트', Cloud 는 '목표만 주면 AI 가 판단'
인증은 'setup-token'을 씁니다. 단 2026-06-15부터 과금이 둘로 나뉩니다 — 터미널에서 직접(대화형) 쓰는 Claude Code는 그대로 내 구독(Pro·Max) 한도로 처리되지만, 자동 실행(GitHub Actions·claude -p 같은 무인)은 구독과 분리된 별도 'Agent SDK 크레딧'(월 Pro $20·Max $100~200, 소진 후 표준 API 요금, 이월 없음)에서 차감됩니다. 앱에서 API 키로 직접 호출하는 건 종전처럼 종량제고요.
- 터미널에서 'claude setup-token' 실행 → 브라우저 인증 → 토큰 발급
- GitHub 리포 → Settings → Secrets and variables → Actions → New repository secret
- 이름 'CLAUDE_CODE_OAUTH_TOKEN', 값에 발급받은 토큰 붙여넣기
- .github/workflows/ 안에 워크플로 YAML 작성 (아래 프롬프트로 Claude 에 시키면 자동 생성)
- Actions 탭에서 수동 실행(workflow_dispatch)으로 한 번 테스트
- 정상 동작하면 cron 스케줄(예: 매주 월요일)로 자동 실행
내 리포에 GitHub Actions 워크플로를 만들어줘.
- 트리거: 매주 월요일 09:00 KST + 수동 실행(workflow_dispatch)
- anthropics/claude-code-action 사용
- 인증: secrets.CLAUDE_CODE_OAUTH_TOKEN (API 키 아님)
- 데이터 갱신 슬래시 명령을 실행한 뒤 변경분을 자동 커밋·푸시
- 권한: contents: write
🌐 도메인 연결 (선택)
- 도메인 구매 — Cloudflare·가비아·Namecheap에서 연 $10~
- Vercel Project → Settings → Domains → Add
- Vercel이 알려주는 DNS 레코드(보통 A 또는 CNAME)를 도메인 관리 화면에 추가
- DNS 전파 대기 (몇 분~몇 시간)
- Vercel이 자동 SSL(HTTPS) 발급 — 완료
🌍 다른 배포 옵션
- Vercel — 가장 쉬움, Next.js·React에 최적, 우리의 기본
- Netlify — Vercel과 거의 동등, 폼·함수 강함
- Cloudflare Pages — 무료 한도 가장 후함, 전세계 CDN
- GitHub Pages — 정적 HTML만, 가장 단순
- Railway·Render — 백엔드·DB 포함 풀스택 호스팅
📊 사용자 분석 도입 (선택)
앱이 누구에게 어떻게 쓰이는지 보면 다음 기능이 보입니다.
- Plausible / Umami — 개인정보 친화 분석, 가볍고 빠름
- Google Analytics — 표준, 깊은 분석
- Vercel Analytics — Vercel 기본 제공, 1줄 추가
🖥️ 언제 CLI가 꼭 필요한가 — GUI 없는 자동화
자동화·운영은 대부분 '화면(GUI)이 없는 환경'에서 돕니다. 그래서 다음 'CLI 심화'는 데스크탑 앱이 아니라 터미널(CLI) 전용이에요. (앱의 통합 터미널에서도 셸 작업은 되지만, 화면이 아예 없는 서버나 '사람이 아닌 프로그램이 호출'하는 경우는 CLI만 가능합니다.)
- CI/CD — GitHub Actions 등 빌드 러너엔 GUI가 없음. 바로 위 setup-token 워크플로가 그 예
- 헤드리스 서버·Docker·SSH 전용 박스 — 데스크탑 앱을 설치·실행할 수 없음 (Node만 있으면 CLI는 어디서나)
- cron·launchd 무인 예약 — 새벽에 호출하는 건 앱이 아니라 명령어
- git 훅·빌드 스텝 — pre-commit 등이 'claude -p'를 서브프로세스로 호출
- 파이프·임베드 — 'git diff | claude -p' 처럼 더 큰 스크립트의 한 부품으로 비대화식 실행
- 일부 설정 명령(/config·/doctor 등)도 터미널 전용 (앱은 GUI 드롭다운으로 대체)
💻 CLI 경로 — 터미널 두려움 깨기 (앱 사용자는 명령을 '말로' 대체)
여기서부터는 터미널로 직접 하는 'CLI 심화 트랙'입니다 — 앱으로 충분하면 건너뛰어도 되고, 자동화·CI·서버 운영으로 갈 사람만 보면 됩니다. 터미널(검은 창)은 마우스 대신 명령어로 컴퓨터에 직접 말하는 창입니다. 우리가 쓸 명령은 10개면 충분하고, 이것조차 Claude Code에 '~ 어떻게 해?' 물어봐도 됩니다.
- pwd — 지금 내 위치(폴더) 확인
- ls — 현재 폴더의 파일 목록 (Windows는 dir)
- cd 폴더명 — 다른 폴더로 이동 / cd .. — 상위 폴더로
- mkdir 폴더명 — 새 폴더 만들기
- touch 파일명 — 빈 파일 생성 (Mac/Linux)
- cat 파일명 — 파일 내용 보기
- mv 원본 대상 — 이동·이름 변경
- cp 원본 대상 — 복사
- rm 파일명 — 삭제 (⚠️ 휴지통 안 거침)
- Ctrl+C — 실행 중인 작업 중단
📁 경로 — 절대 경로 vs 상대 경로
파일을 다룰 때 항상 헷갈리는 부분. 한 번만 잡아두면 됩니다.
- 절대 경로 — / 또는 C:\ 로 시작, 시스템 전체 기준 (예: /Users/me/projects/my-todo)
- 상대 경로 — 현재 위치 기준 (예: ./index.html, ../docs)
- . — 현재 폴더 / .. — 상위 폴더 / ~ — 내 홈 폴더 (Mac/Linux)
- Tab 키 — 폴더·파일 이름 자동 완성 (가장 유용한 단축)
📦 Node.js 설치 (Claude Code의 전제 조건)
- nodejs.org 접속 → LTS(권장) 버전 다운로드
- 설치 마법사 따라 진행 (기본값 그대로 OK)
- 터미널 새로 열고 'node --version' → v18 이상 표시되면 성공
- 'npm --version' 도 같이 확인 (Node.js와 함께 설치)
📦 Claude Code 설치 & 첫 실행
- 터미널에서 'npm install -g @anthropic-ai/claude-code' 실행
- 설치 완료 후 '~/projects' 또는 원하는 곳으로 cd
- 'claude' 입력 → 환영 화면이 보이면 성공
- 첫 실행 시 로그인 안내 → 표시되는 URL을 브라우저에서 열어 인증
- Anthropic 계정으로 로그인 (구글 계정 OK)
- 사용량은 Claude 구독(Pro/Max)에 포함, 또는 별도 API 키
🧭 Claude Code 화면 익히기
- 프롬프트 입력창 — 화면 아래 '>' 표시. 여기에 자연어로 지시
- 응답 영역 — Claude의 답과 실행 결과가 위로 쌓임
- 파일 변경 표시 — 새 파일·수정·삭제가 일어나면 명시적으로 보여줌
- 승인 요청 — 위험한 작업(파일 삭제·외부 호출) 전 [y/n] 물어봄
- Ctrl+C — 작업 중단 / Esc — 입력 취소
- ↑/↓ — 이전 프롬프트 다시 꺼내기
🗣️ 터미널로도 만들어보기 — 같은 To-do (선택)
앞에서 앱으로 만든 To-do를, 이번엔 터미널 명령으로 똑같이. 터미널 흐름을 손에 익히는 용도 — 앱으로 충분하면 건너뛰어도 됩니다.
- 터미널에서 'mkdir my-todo && cd my-todo' (새 폴더 + 이동)
- 'claude' 실행 → 앞 '첫 앱 만들기'의 프롬프트를 그대로 입력
- Claude가 만들 파일을 미리 설명 → y로 승인
- 'ls'로 확인 후 'open index.html'(Mac) / 'start index.html'(Win)로 실행
- 수정도 자연어로 요청 → 브라우저 새로고침해 확인
🔌 IDE 통합 — VS Code / Cursor (터미널에서 함께)
터미널만으로도 충분하지만, 코드 편집 화면을 함께 보면 학습 속도가 훨씬 빠릅니다.
- VS Code 설치 (code.visualstudio.com) — 무료, 가장 보편
- 터미널에서 'code .' → 현재 폴더가 VS Code로 열림
- VS Code의 통합 터미널(Ctrl+`)에서 'claude' 실행 → 코드 + 대화 동시에
- Cursor는 VS Code 포크 + AI 기능 내장 — Claude Code 없이도 자체 AI 사용
⚙️ 권한 모드 & CLI 플래그 — 터미널 직접 제어 (앱은 GUI로 대체)
앱은 GUI라서 'claude -c'나 '--dangerously-skip-permissions' 같은 CLI 플래그를 채팅창에 직접 칠 수 없습니다. 대신 같은 동작을 화면 기능이나 통합 터미널로 합니다 — 앱과 CLI는 같은 엔진·설정(CLAUDE.md·MCP)을 공유하거든요.
- 이어가기('-c' / '--continue') → 사이드바 Sessions에서 이전 세션을 클릭해 재개
- 권한 프롬프트 줄이기 → 상단 권한 모드 드롭다운에서 'Ask permissions' → 'Auto accept edits'로 변경
- 모든 확인을 건너뛰려면 → 앱 상단 권한 모드에서 'Bypass permissions'를 고르면 GUI로 동일 효과(터미널 플래그를 칠 필요 없음). 굳이 CLI가 필요하면 통합 터미널(Ctrl+백틱)에서 'claude --dangerously-skip-permissions -c'
🧰 바이브 코딩의 '하네스 튜닝' — 프롬프트보다 오래가는 실력
이번 회차에서 배운 조각들 — CLAUDE.md, 권한 모드, 커밋 세이프티넷 — 은 사실 하나의 그림입니다. AI 코딩 도구는 '모델 + 그걸 감싼 작업 환경(하네스)'으로 움직이는데, 그 환경을 내 프로젝트에 맞게 조정하는 게 하네스 튜닝이에요. 프롬프트는 한 번 쓰고 사라지지만, 아래 6가지는 파일·설정으로 남아 다음 세션에도 계속 일합니다.
- ① 컨텍스트 — CLAUDE.md에 프로젝트 규칙·빌드 명령·'하지 말 것'을 적어두기. 매 세션 자동으로 읽혀 같은 말을 반복할 필요가 없다.
- ② 도구 — 자주 쓰는 작업은 스크립트·슬래시 커맨드로 묶어 한 줄 명령으로. AI가 부르기 쉬운 도구일수록 실수가 준다.
- ③ 검증 루프 — '고치고 나서 실행·테스트로 확인까지 해줘'를 기본 요구로. AI가 자기 결과를 스스로 채점하게 한다.
- ④ 가드레일 — 권한 모드는 절제된 것부터, 위험한 일은 확인받게. 커밋을 자주 해 언제든 롤백(위 safety net).
- ⑤ 메모리 — 같은 지적을 두 번 하게 되면 그 규칙을 CLAUDE.md에 추가시키기('이거 기억해줘'라고만 해도 됨).
- ⑥ 완료 기준 — '대충 되게'가 아니라 '테스트 통과·화면으로 확인까지'처럼 끝을 미리 정의해주기.
📌 8회차 핵심
- 기능은 작게·자주 — 한 번에 한 기능, 매번 확인 후 다음.
- 외부 API로 실시간 데이터, ChatGPT API로 'AI 내장 기능'까지.
- 에러는 5단계 디버깅 — 재현·콘솔·Claude에 던지기·수정·재테스트.
- Git 커밋이 safety net — 중요한 작업 전엔 무조건.
- 하네스 튜닝 — CLAUDE.md·도구·검증 루프·가드레일·메모리·완료 기준을 '시스템'으로 만들어두면 프롬프트보다 오래간다.
- Vercel 1분 배포 + 환경 변수로 시크릿 보호 — GitHub 푸시가 곧 배포. (폰 설치·스토어 출시는 10회차)
- GitHub 푸시 = 자동 배포 — 진짜 '내 서비스'가 되는 순간.
- 자동화는 Anthropic Cloud '/schedule' 로 — 토큰·YAML 없이, 내 PC 꺼져 있어도 클라우드에서 매주 자동 실행.
- 세밀한 제어·CI 통합이 필요하면 GitHub Actions + setup-token (심화).