Scheduled Tasks로 자동화하기
⏱️ 15분
정해진 시간에 Claude Code가 자동으로 프롬프트를 실행하도록 예약하는 방법을 배웁니다.
목차
- 🎯 Scheduled Tasks란?
- ⚙️ 기본 사용법
- ⏰ Cron 표현식
- 💡 실용적인 예제
- 📋 Task 관리
- 🎨 고급 사용법
- 🎓 실전 패턴
- 🛠️ Skill 및 /loop과 연동
- 📚 핵심 정리
- ⚠️ 주의사항
- 🔍 디버깅
- ✅ 완료
🎯 Scheduled Tasks란?
Scheduled Tasks는 정해진 시간에 자동으로 Claude에게 프롬프트를 보내는 기능입니다.
실생활 비유
스마트폰의 알람과 비슷합니다:
- 매일 오전 9시: “오늘 할 일 정리”
- 매주 금요일: “주간 리포트 작성”
- 매시간: “에러 로그 확인”
작동 방식
┌─────────────────────────────────────┐
│ 매일 오전 9시 │
└─────────────────────────────────────┘
↓ 트리거
┌─────────────────────────────────────┐
│ Claude Code │
│ 1. git status 실행 │ ← 자동 실행
│ 2. 커밋 분석 │
│ 3. 리포트 작성 │
│ 4. 결과 표시 │
└─────────────────────────────────────┘
↓ 완료된 작업 확인
중요 특징:
- Claude Code가 실행 중일 때만 작동 (유휴 상태에서 실행)
- 세션 기반 (기본) 또는 영구 저장 (durable) 가능
- 반복 작업은 7일 후 자동 만료
⚙️ 기본 사용법
대화 중 생성
Claude Code 대화 중 자연어로 요청하면 됩니다:
매일 오전 9시에 Git 커밋 요약을 자동으로 해줘
Claude가 자동으로 CronCreate 도구를 사용하여 작업을 예약합니다.
직접 요청 예시
5분마다 테스트 실행 상태를 확인해줘
평일 오전 9시에 TODO 주석을 찾아서 정리해줘
1시간 후에 배포 상태를 확인하도록 알려줘
⏰ Cron 표현식
Cron 표현식은 실행 시간을 지정합니다. Claude Code는 사용자의 로컬 시간대를 사용합니다.
기본 형식
분 시 일 월 요일
* * * * *
자주 사용하는 패턴
| 표현식 | 의미 | 용도 |
|---|---|---|
*/5 * * * * | 5분마다 | 빈번한 모니터링 |
7 * * * * | 매시간 (7분에) | 정기 점검 |
57 8 * * * | 매일 오전 8시 57분 | 일일 리포트 |
3 9 * * 1-5 | 평일 오전 9시 3분 | 업무 시작 시 |
15 15 * * 5 | 매주 금요일 오후 3시 15분 | 주간 정리 |
30 10 1 * * | 매월 1일 오전 10시 30분 | 월간 작업 |
팁: 분산 실행 시간
정각(00분)과 30분은 피하세요!
많은 사용자가 “매일 9시”라고 요청하면 모두 0 9 * * *가 되어 서버에 부하가 집중됩니다.
# ❌ 피할 것
"0 9 * * *" # 정각 (모든 사용자가 동시 실행)
"30 10 * * *" # 30분 (역시 집중)
# ✅ 권장
"3 9 * * *" # 9시 3분
"57 8 * * *" # 8시 57분 (조금 일찍)
"7 * * * *" # 매시간 7분
언제 정각을 사용하나요?
- 사용자가 정확한 시간을 명시: “정확히 9시에”, “9시 정각에”
- 회의 시간과 맞춰야 할 때
- 다른 시스템과 동기화가 필요할 때
💡 실용적인 예제
예제 1: 매일 Git 상태 요약
요청:
매일 아침 9시쯤에 Git 커밋 요약해줘
Claude가 자동으로 생성:
- Cron:
3 9 * * *(9시 3분, 정각 피함) - Prompt: “어제부터 오늘까지의 Git 커밋을 요약하고, 진행 중인 작업을 정리해주세요”
효과:
- 최근 커밋 내역 확인
- 진행 중인 작업 정리
- 오늘 할 일 제안
예제 2: 주간 코드 리뷰
요청:
매주 월요일 오전에 지난 주 코드 변경사항 리뷰해줘
Claude가 자동으로 생성:
- Cron:
15 10 * * 1(월요일 10시 15분) - Prompt: “지난 주의 코드 변경사항을 리뷰하고, 개선이 필요한 부분을 찾아주세요”
효과:
- 지난 주 커밋 분석
- 코드 품질 확인
- 개선 포인트 제안
예제 3: 정기 테스트 실행
요청:
3시간마다 테스트 실행하고 실패하면 분석해줘
Claude가 자동으로 생성:
- Cron:
7 */3 * * *(3시간마다 7분에) - Prompt: “전체 테스트를 실행하고, 실패한 테스트가 있으면 원인을 분석해주세요”
효과:
- 테스트 자동 실행
- 실패 시 원인 분석
- 수정 방안 제안
예제 4: 의존성 업데이트 확인
요청:
매주 월요일에 package.json 의존성 확인해줘
Claude가 자동으로 생성:
- Cron:
30 9 * * 1(월요일 9시 30분) - Prompt: “package.json의 의존성을 확인하고, 업데이트가 필요한 패키지를 알려주세요”
효과:
- 오래된 패키지 확인
- 보안 취약점 체크
- 업데이트 우선순위 제안
📋 Task 관리
Task 목록 보기
요청:
예약된 작업 목록 보여줘
Claude가 CronList 도구를 사용하여 목록을 표시합니다.
출력 예시:
ID: cron_abc123
Schedule: 3 9 * * *
Prompt: Git 커밋 요약
Type: Recurring (7일 후 만료)
Storage: Session-only
ID: cron_def456
Schedule: 15 10 * * 1
Prompt: 주간 리포트
Type: Recurring (7일 후 만료)
Storage: Durable
Task 삭제
요청:
첫 번째 예약 작업 삭제해줘
또는
Git 커밋 요약 작업 취소해줘
Claude가 CronDelete 도구를 사용하여 작업을 삭제합니다.
모든 Task 삭제
요청:
모든 예약 작업 삭제해줘
🎨 고급 사용법
세션 기반 vs 영구 저장
세션 기반 (기본):
- Claude Code 세션 내에서만 유효
- 프로그램 종료 시 사라짐
- 임시 작업에 적합
요청 예시:
5분마다 빌드 상태 확인해줘
영구 저장 (Durable):
.claude/scheduled_tasks.json에 저장- Claude Code 재시작 후에도 유지
- 장기 작업에 적합
요청 예시:
매일 아침 Git 커밋 요약해줘. 계속 유지되도록 해줘.
일회성 vs 반복 작업
반복 작업 (기본):
- 매번 실행되고 7일 후 자동 만료
- 정기적인 모니터링에 적합
요청 예시:
매일 오전 9시에 TODO 주석 찾아줘
일회성 작업:
- 한 번만 실행 후 자동 삭제
- 미래의 특정 시점에 알림
요청 예시:
1시간 후에 배포 상태 확인해줘
내일 오전 9시에 회의 자료 준비 상기시켜줘
복잡한 프롬프트
여러 단계의 작업도 예약 가능합니다:
요청:
매주 월요일 오전에 주간 리포트 작성해줘:
1. 지난 주 완료된 기능
2. 새로 추가된 버그
3. 이번 주 계획
4. 팀원들에게 공유할 내용
조건부 실행
프롬프트에 조건을 포함할 수 있습니다:
요청:
매일 아침에 Git 상태를 확인하고, 커밋되지 않은 변경사항이 있으면 알려줘
🎓 실전 패턴
패턴 1: 아침 대시보드
요청:
평일 아침 9시에 개발 대시보드 보여줘:
1. Git 브랜치 상태
2. 미완료 TODO 주석 개수
3. 실패한 테스트 여부
4. 최근 에러 로그
효과: 평일 아침마다 프로젝트 상태를 한눈에 확인합니다.
생성되는 Cron: 3 9 * * 1-5
패턴 2: 금요일 정리
요청:
매주 금요일 오후 5시에 주말 전 정리해줘:
1. 모든 브랜치를 main과 비교
2. 머지되지 않은 변경사항 확인
3. 다음 주 우선순위 제안
효과: 주말 전에 작업 상태를 정리하고 다음 주를 준비합니다.
생성되는 Cron: 15 17 * * 5
패턴 3: 야간 분석
요청:
매일 새벽 2시에 코드 분석해줘:
1. 전체 코드에서 TODO, FIXME, HACK 주석 찾기
2. 복잡도가 높은 함수 찾기
3. 중복 코드 탐지
효과: 야간에 자동으로 코드 품질을 분석합니다.
생성되는 Cron: 7 2 * * *
패턴 4: 정기 백업 확인
요청:
매일 오전 10시에 백업 상태 확인해줘:
1. 최근 커밋이 원격에 푸시되었는지 확인
2. 중요한 변경사항이 로컬에만 있는지 체크
3. 백업이 필요하면 알림
효과: 정기적으로 백업 상태를 점검합니다.
생성되는 Cron: 30 10 * * *
🛠️ Skill 및 /loop과 연동
Scheduled Task에서 Skill 호출
Scheduled Task에서 Skill을 직접 호출할 수 있습니다.
요청 예시:
매일 오전 9시에 /my-first-plugin:gs 실행해줘
Claude가 자동으로 skill 호출을 포함한 cron을 생성합니다.
/loop Skill 사용
/loop skill은 더 간단한 반복 작업에 적합합니다.
기본 사용법:
/loop 5m "빌드 상태 확인해줘"
5분마다 프롬프트를 실행합니다.
/loop vs Scheduled Tasks 비교:
| 기능 | /loop | Scheduled Tasks |
|---|---|---|
| 설정 | 간단 (간격만 지정) | 정밀 (Cron 표현식) |
| 시간 지정 | 간격 기반 (5m, 1h) | 절대 시간 (매일 9시) |
| 용도 | 임시 모니터링 | 정기 작업 |
| 예시 | “5분마다 확인” | “매일 오전 9시” |
/loop 예제:
# 5분마다 테스트 실행
/loop 5m "npm test 실행하고 실패하면 알려줘"
# 기본 간격 (10분)
/loop "Git 상태 확인해줘"
# 1시간마다
/loop 1h "의존성 업데이트 확인해줘"
언제 어떤 것을 사용하나요?
Scheduled Tasks 사용:
- 매일 특정 시간에 실행 (오전 9시)
- 특정 요일에 실행 (매주 월요일)
- 정확한 스케줄 필요
/loop 사용:
- 일정 간격으로 반복 (5분마다)
- 임시 모니터링
- 빠른 설정 필요
📚 핵심 정리
사용 방법 요약
Task 생성:
매일 오전 9시에 Git 커밋 요약해줘
Task 목록:
예약된 작업 목록 보여줘
Task 삭제:
Git 커밋 요약 작업 취소해줘
간단한 반복 작업:
/loop 5m "빌드 상태 확인해줘"
Cron 표현식 치트시트
# 매일 (정각 피하기)
3 9 * * * # 오전 9시 3분 ✅
57 8 * * * # 오전 8시 57분 ✅
0 9 * * * # 오전 9시 정각 (피하기) ❌
# 주기적
*/5 * * * * # 5분마다
7 * * * * # 매시간 7분 ✅
0 */2 * * * # 2시간마다 정각 (가능하면 피하기)
# 특정 요일
15 9 * * 1 # 월요일 오전 9시 15분 ✅
3 9 * * 1-5 # 평일 오전 9시 3분 ✅
45 17 * * 5 # 금요일 오후 5시 45분 ✅
# 특정 날짜
30 10 1 * * # 매월 1일 오전 10시 30분 ✅
15 9 15 * * # 매월 15일 오전 9시 15분 ✅
사용 시나리오
매일 반복 작업:
- 아침 Git 커밋 요약
- 정기 테스트 실행
- 로그 확인
주간 반복 작업:
- 주간 코드 리뷰
- 의존성 업데이트 확인
- 금요일 작업 정리
정기 점검:
- 보안 취약점 스캔
- 성능 모니터링
- 백업 상태 확인
⚠️ 주의사항
실행 조건
Claude Code가 유휴 상태일 때만 실행됩니다:
- 대화 중일 때는 실행 안 됨
- 다른 작업 처리 중일 때는 대기
- 컴퓨터가 꺼져 있으면 실행 안 됨
놓친 작업 처리:
- 세션 기반: 다음 실행 시간까지 대기
- Durable 일회성: 재시작 시 캐치업 가능
7일 자동 만료
반복 작업은 7일 후 자동으로 만료됩니다:
- 무한정 실행되지 않음
- 장기 작업이 필요하면 다시 설정
- 일회성 작업은 영향 없음
매일 오전 9시 작업을 생성
→ 7일 후 자동 삭제됨
→ 필요하면 다시 생성
작업 시간
너무 오래 걸리는 작업은 피하세요:
적합:
- ✅ 상태 확인, 요약
- ✅ 로그 분석
- ✅ 코드 리뷰
부적합:
- ❌ 전체 빌드
- ❌ 배포 작업
- ❌ 대규모 마이그레이션
프롬프트 작성
명확하고 구체적으로:
좋은 예:
- ✅ “Git 커밋을 요약하고 TODO를 찾아줘”
- ✅ “테스트를 실행하고 실패하면 원인을 분석해줘”
- ✅ “package.json에서 오래된 의존성을 찾아줘”
나쁜 예:
- ❌ “뭔가 해줘”
- ❌ “확인해봐”
- ❌ “체크”
중복 방지
비슷한 작업이 겹치지 않도록:
나쁜 예:
매일 오전 9시에 Git 상태 확인해줘
매일 오전 9시 5분에 Git 커밋 확인해줘 # 중복!
좋은 예:
매일 오전 9시에 Git 상태와 커밋을 함께 확인해줘
세션 vs Durable
세션 기반 (기본):
- 임시 모니터링에 적합
- 메모리에만 저장
- 프로그램 종료 시 사라짐
Durable:
- 장기 작업에 적합
- 파일에 저장 (
.claude/scheduled_tasks.json) - 재시작 후에도 유지
- “계속 유지”를 명시적으로 요청할 때만 사용
🔍 디버깅
Task가 실행되지 않을 때
1. 예약 목록 확인:
예약된 작업 목록 보여줘
작업이 제대로 등록되어 있는지 확인합니다.
2. Claude Code 상태 확인:
Task는 다음 조건에서만 실행됩니다:
- ✅ Claude Code가 실행 중
- ✅ 유휴 상태 (대화 중이 아님)
- ✅ 다른 작업 처리 중이 아님
3. 시간대 확인:
Cron 표현식은 로컬 시간대를 사용합니다:
9시는 사용자의 로컬 9시- 시간대 변환 불필요
4. Cron 표현식 테스트:
온라인 도구로 표현식 확인:
예시:
3 9 * * 1-5 → 평일 오전 9시 3분
*/5 * * * * → 5분마다
5. 7일 만료 확인:
반복 작업은 7일 후 자동으로 삭제됩니다:
작업이 언제 생성되었는지 확인해줘
6. Durable 여부 확인:
세션 기반 작업은 Claude Code 재시작 시 사라집니다:
이 작업이 영구 저장되었는지 확인해줘
✅ 완료
Scheduled Tasks로 정기적인 작업을 자동화하는 방법을 배웠습니다!
배운 것:
- ✅ Scheduled Tasks 개념 (CronCreate, CronList, CronDelete)
- ✅ Cron 표현식 사용법
- ✅ 세션 기반 vs Durable 저장
- ✅ 반복 작업 vs 일회성 작업
- ✅ /loop skill을 활용한 간단한 반복
- ✅ 7일 자동 만료 정책
- ✅ 실용적인 자동화 패턴
핵심 개념:
- 자연어로 작업 예약 가능
- Claude가 CronCreate 도구를 사용하여 자동 생성
- 유휴 상태에서만 실행
- 정각(00분, 30분)은 피하는 것이 좋음
- 세션 기반은 재시작 시 사라짐
- Durable로 설정하면 영구 저장 가능
- 반복 작업은 7일 후 자동 만료
실용 팁:
- 간단한 반복:
/loop 5m "작업"사용 - 정확한 시간: Scheduled Tasks 사용
- 임시 작업: 세션 기반 (기본)
- 장기 작업: Durable 옵션
- 일회성 알림:
recurring: false
다음에는: Headless 모드로 프로그래밍 방식으로 Claude Code를 실행하는 방법을 배웁니다.