Cron 표현식 생성기

단계별 빌더로 Cron 표현식을 시각적으로 생성

빠른 프리셋

월별 일

요일

Cron 표현식

0 9 * * *

minute hour day(month) month day(week)

Cron 표현식 생성기란?

Cron 표현식 생성기는 직접 작성하는 대신 시각적 인터페이스를 통해 Cron 스케줄 문자열을 구성하는 도구입니다. Cron 표현식은 반복 작업의 실행 시점을 정의하는 5개 필드(분, 시, 월별 일, 월, 요일)로 이루어진 문자열입니다. 이 형식은 1979년 원래의 Unix cron 데몬에서 유래했으며, 현재 crontab, Kubernetes CronJob, GitHub Actions, AWS EventBridge, Google Cloud Scheduler, 그리고 수십 개의 작업 스케줄링 라이브러리에서 사용됩니다.

Cron 표현식을 기억에 의존해 작성하는 것은 버그의 흔한 원인입니다. 다섯 개 필드는 직관적이지 않은 방식으로 상호작용합니다. 예를 들어 분 필드의 스텝 값 */15는 0, 15, 30, 45에 실행되지만, 5/15는 분 5부터 시작해 5, 20, 35, 50에 실행됩니다. 월별 일과 요일 필드를 와일드카드가 아닌 값으로 함께 사용하면 AND가 아닌 OR 조건이 만들어지는데, 이는 경험 많은 엔지니어도 종종 놀라는 부분입니다. 시각적 생성기는 원하는 스케줄을 선택하면 올바른 구문을 자동으로 생성해 이러한 모호함을 제거합니다.

Cron 생성기는 Cron 파서와 다릅니다. 파서는 기존 표현식을 받아 일반 언어로 설명합니다. 생성기는 반대 방향으로 작동합니다. 필요한 스케줄을 입력하면 도구가 일치하는 Cron 문자열을 출력합니다. 새로운 예약 작업을 만들 때는 생성기를, 기존 작업을 감사하거나 디버깅할 때는 파서를 사용하세요.

이 Cron 생성기를 사용하는 이유

Cron 표현식을 직접 작성하려면 필드 순서, 값 범위, 연산자 규칙을 모두 외워야 합니다. 필드 하나가 잘못 들어가면 매일 실행되어야 할 작업이 매분 실행됩니다. 이 생성기를 사용하면 스케줄을 시각적으로 선택하고 결과를 클릭 한 번으로 복사할 수 있습니다.

🖱️
시각적 스케줄 빌더
드롭다운과 토글로 분, 시, 일, 월, 요일 값을 선택합니다. 각 필드를 변경할 때마다 Cron 표현식이 실시간으로 업데이트됩니다. 구문을 외울 필요가 없습니다.
🔒
개인정보 보호 우선 처리
모든 생성 작업은 브라우저에서 실행됩니다. 스케줄 데이터가 서버로 전송되지 않습니다. Cron 표현식과 작업 설정이 기기에 남아 있습니다.
즉시 출력 및 미리보기
빌드하는 동안 생성된 Cron 표현식과 다음 예약 실행 시간 미리보기를 즉시 확인합니다. 설정에 복사하기 전에 스케줄이 올바른지 검증하세요.
📋
계정 불필요
페이지를 열고 바로 구축을 시작하세요. 로그인, API 키, 설치가 필요 없습니다. 최신 브라우저가 있는 모바일을 포함한 모든 기기에서 작동합니다.

Cron 생성기 활용 사례

프론트엔드 개발자
관리자 패널과 스케줄링 UI를 위한 Cron 표현식을 구축합니다. 데이터베이스에 Cron 문자열을 저장하는 사용자용 스케줄 선택기에 올바른 구문을 생성하세요.
백엔드 엔지니어
Celery, Sidekiq, Bull과 같은 작업 큐를 위한 Cron 표현식을 만듭니다. 스케줄 문자열을 생성하고 다음 실행을 확인한 후 작업 설정에 붙여넣으세요.
DevOps / SRE
Kubernetes CronJob, CI/CD 파이프라인, 인프라 자동화를 위한 Cron 스케줄을 생성합니다. 구문 실수 없이 백업 기간, 인증서 갱신, 로그 순환에 대한 표현식을 구축하세요.
QA 엔지니어
통합 테스트를 위해 특정 간격으로 트리거되는 테스트 Cron 표현식을 만듭니다. 스케줄러 동작을 검증하기 위해 예측 가능한 실행 시간을 생성하는 스케줄을 만드세요.
데이터 엔지니어
ETL 파이프라인 트리거와 데이터 동기화 스케줄을 위한 Cron 표현식을 구축합니다. 정확한 타이밍으로 추출, 변환, 적재 단계가 겹치지 않는 스케줄을 생성하세요.
학생 / 학습자
시각적 빌더로 실험하며 Cron 구문을 학습합니다. 개별 필드를 변경하면서 표현식과 다음 실행 시간이 어떻게 바뀌는지 확인하세요. 와일드카드, 범위, 스텝 값에 대한 직관을 쌓아보세요.

자주 사용하는 Cron 스케줄 프리셋

아래 표는 가장 자주 사용되는 스케줄의 Cron 표현식을 나열합니다. 대부분의 프로덕션 작업은 이러한 패턴 중 하나에 해당합니다. 개별 필드를 수정해 실제 타이밍에 맞게 조정하세요.

스케줄표현식일반적인 용도
Every minute* * * * *Health checks, queue polling
Every 5 minutes*/5 * * * *Metrics collection, cache refresh
Every 15 minutes*/15 * * * *API sync, dashboard updates
Every hour0 * * * *Log rotation, report generation
Every 6 hours0 */6 * * *Database backups, digest emails
Daily at midnight0 0 * * *Nightly batch jobs, cleanup scripts
Daily at 9 AM0 9 * * *Daily reports, notification digests
Weekdays at 9 AM0 9 * * 1-5Business-hours tasks, standup reminders
Every Monday at midnight0 0 * * 1Weekly reports, dependency updates
First of every month0 0 1 * *Billing runs, monthly aggregation
Every Sunday at 2:30 AM30 2 * * 0Full backups during low-traffic window
January 1st at midnight0 0 1 1 *Annual reports, license renewals

Cron 표현식의 구성 요소

모든 Cron 표현식은 왼쪽에서 오른쪽으로 읽는 정확히 5개의 필드로 구성됩니다. 각 필드는 특정 값과 연산자를 허용합니다. 이 규칙을 알면 프로덕션에서 만날 수 있는 모든 스케줄을 작성할 수 있습니다.

5개 필드 Cron 표현식 구조:
*min0-59
*hour0-23
*day1-31
*month1-12
*weekday0-6

네 가지 연산자가 각 필드 내에서 값을 매칭하는 방식을 제어합니다. 조합해서 사용할 수 있습니다. 예를 들어 요일 필드의 1-5/2는 월요일, 수요일, 금요일을 의미합니다(범위 1-5, 스텝 2).

연산자구문예시결과
Wildcard** (minute)Every minute
Lista,b,c1,15 (day)1st and 15th
Rangea-b9-17 (hour)9 AM through 5 PM
Step*/n*/10 (minute)Every 10 minutes
Range+Stepa-b/n10-30/5 (min)10, 15, 20, 25, 30

코드 예제

Node.js, Python, Go, bash에서 Cron 스케줄을 생성하고 등록하는 방법:

JavaScript (Node.js)
import { CronJob } from 'cron';

// Build a cron expression: every weekday at 9:00 AM
const expression = '0 9 * * 1-5';

const job = new CronJob(expression, () => {
  console.log('Running weekday morning task');
});
job.start();

// Programmatic expression building
function buildCron({ minute = '*', hour = '*', dom = '*', month = '*', dow = '*' }) {
  return `${minute} ${hour} ${dom} ${month} ${dow}`;
}

const expr = buildCron({ minute: '0', hour: '*/6', dow: '1-5' });
console.log(expr); // → "0 */6 * * 1-5"
Python
from crontab import CronTab

# Create a new cron job for the current user
cron = CronTab(user=True)

# Build a job: run backup.py every day at 2:30 AM
job = cron.new(command='python3 /home/user/backup.py')
job.setall('30 2 * * *')

print(job)           # → 30 2 * * * python3 /home/user/backup.py
print(job.is_valid()) # → True

# Schedule every 15 minutes on weekdays
job2 = cron.new(command='/usr/bin/sync-data')
job2.minute.every(15)
job2.dow.during('MON', 'FRI')

cron.write()  # Save to user's crontab

# Verify next run time
from croniter import croniter
from datetime import datetime

it = croniter('30 2 * * *', datetime.now())
print(it.get_next(datetime))  # → next 2:30 AM timestamp
Go
package main

import (
    "fmt"
    "strings"
    "github.com/robfig/cron/v3"
)

// BuildCron constructs a 5-field cron expression from parts
func BuildCron(minute, hour, dom, month, dow string) string {
    fields := []string{minute, hour, dom, month, dow}
    return strings.Join(fields, " ")
}

func main() {
    // Generate: every weekday at 9 AM
    expr := BuildCron("0", "9", "*", "*", "1-5")
    fmt.Println(expr) // → 0 9 * * 1-5

    // Validate and schedule it
    c := cron.New()
    _, err := c.AddFunc(expr, func() {
        fmt.Println("Running scheduled task")
    })
    if err != nil {
        fmt.Printf("Invalid expression: %v\n", err)
        return
    }
    c.Start()
}
Bash (crontab)
# Open the crontab editor to add a new job
crontab -e

# Add a cron job without opening an editor:
# Run cleanup.sh every Sunday at 3 AM
(crontab -l 2>/dev/null; echo "0 3 * * 0 /home/user/cleanup.sh") | crontab -

# Generate and add a job: every 10 minutes, log disk usage
EXPR="*/10 * * * *"
CMD="df -h >> /var/log/disk-usage.log"
(crontab -l 2>/dev/null; echo "$EXPR $CMD") | crontab -

# Verify the job was added
crontab -l | tail -1
# → */10 * * * * df -h >> /var/log/disk-usage.log

# Remove all cron jobs (use with caution)
# crontab -r

자주 묻는 질문

Cron 표현식의 올바른 필드 순서는 무엇인가요?
표준 5개 필드 순서는 분(0-59), 시(0-23), 월별 일(1-31), 월(1-12), 요일(0-6, 0은 일요일)입니다. 이 순서는 POSIX에 의해 정의되며 crontab, Kubernetes, GitHub Actions, 대부분의 Cron 라이브러리에서 사용됩니다. Quartz Scheduler와 같은 일부 도구는 초 필드를 앞에 추가해 6개 필드로 만들지만, 5개 필드 구조가 범용 기본값입니다.
'매 N분마다' Cron 표현식을 어떻게 생성하나요?
분 필드에 스텝 연산자를 사용하세요: */N. 5분마다 실행하려면 */5 * * * *, 15분마다 실행하려면 */15 * * * *를 사용합니다. 스텝 연산자는 필드 범위를 균등하게 나눕니다. */7은 시간 경계를 넘어 매 7분마다 실행되지 않으며, 분 0, 7, 14, 21, 28, 35, 42, 49, 56에 실행된 후 다음 시간에 0으로 재설정됩니다.
매월 마지막 날에 실행되는 Cron 표현식을 생성할 수 있나요?
표준 POSIX Cron에는 '월의 마지막 날' 연산자가 없습니다. crontab이나 Kubernetes CronJob에서 0 0 L * *를 작성할 수 없습니다. 대안으로는 28-31일로 스케줄을 잡고 셸 검사([ $(date +%d -d tomorrow) -eq 01 ])를 추가하거나, L 수정자를 지원하는 Quartz와 같은 확장된 Cron 구현을 사용하는 방법이 있습니다. AWS EventBridge 속도 표현식은 기본적으로 마지막 날을 지정할 수도 있습니다.
Cron 생성기와 Cron 파서의 차이는 무엇인가요?
Cron 생성기는 스케줄링 요구사항(예: '평일 오전 9시마다')을 입력받아 올바른 Cron 표현식(0 9 * * 1-5)을 출력합니다. Cron 파서는 반대로 동작합니다. 기존 표현식을 받아 사람이 읽을 수 있는 설명을 생성합니다. 새로운 스케줄을 만들 때는 생성기를, 기존 스케줄을 검토하거나 디버깅할 때는 파서를 사용하세요.
Cron 작업이 겹치는 것을 어떻게 방지하나요?
Cron 자체는 겹치는 실행을 방지하지 않습니다. 매분 실행되도록 예약된 작업이 90초 걸리면 두 인스턴스가 겹칩니다. 이를 방지하려면 잠금 파일(bash의 flock), 분산 잠금(Redis, etcd), 또는 스케줄러의 내장 동시성 정책을 사용하세요. Kubernetes CronJob에는 Forbid 또는 Replace로 설정할 수 있는 concurrencyPolicy 필드가 있습니다. Celery와 같은 애플리케이션 수준 스케줄러에서는 solo 풀이나 작업 수준 잠금을 사용하세요.
Cron에서 첫 번째 요일은 0인가요, 1인가요?
POSIX Cron에서 0은 일요일이고 6은 토요일입니다. 대부분의 구현에서 0과 7 모두 일요일을 나타냅니다. Quartz Scheduler는 다른 관례를 사용해 1이 일요일, 7이 토요일입니다. 시스템이 요일 이름(SUN, MON, TUE)을 지원한다면 플랫폼 간 혼란을 피하기 위해 숫자 대신 이름을 사용하세요.
특정 시간대에 맞는 Cron 표현식을 어떻게 생성하나요?
전통적인 crontab은 시스템의 로컬 시간대를 사용합니다. 일부 시스템에서는 crontab 파일에서 TZ 변수를 설정할 수 있습니다(TZ=America/New_York). Kubernetes CronJob은 버전 1.25부터 .spec.timeZone 필드를 지원합니다. AWS EventBridge와 Google Cloud Scheduler는 스케줄별로 시간대를 지정할 수 있습니다. 항상 설정 내 Cron 표현식 옆에 예상 시간대를 문서화하세요.