Cron Expression Parser

Cron 표현식을 사람이 읽을 수 있는 설명으로 파싱하고 다음 실행 시간을 미리보기

예시 시도

Cron 표현식

minute hour day(month) month day(week)

사람이 읽을 수 있는 설명

At 9:00 AM, Mon, Tue, Wed, Thu, Fri

필드 분석

Minute

0

0–59

Hour

9

0–23

Day (month)

*

1–31

Month

*

1–12

Day (week)

1-5

0–6

다음 10개 예약 실행

12026-03-26 09:00:00
22026-03-27 09:00:00
32026-03-30 09:00:00
42026-03-31 09:00:00
52026-04-01 09:00:00
62026-04-02 09:00:00
72026-04-03 09:00:00
82026-04-06 09:00:00
92026-04-07 09:00:00
102026-04-08 09:00:00

Cron 표현식 파싱이란?

Cron 표현식은 공백으로 구분된 다섯 개의 필드로 이루어진 문자열로, 반복 실행 일정을 정의합니다. 이 형식은 1979년 Ken Thompson이 Version 7 Unix를 위해 처음 작성한 Unix cron 데몬에서 유래했습니다. 각 필드는 시간 단위를 나타냅니다: 분, 시, 일(월 기준), 월, 요일(주 기준). Cron 표현식을 파싱한다는 것은 이 간결한 표기법을 사람이 읽을 수 있는 설명과 구체적인 향후 실행 시간 목록으로 변환하는 것을 의미합니다.

표준 5개 필드 형식은 Linux와 macOS의 crontab, GitHub Actions와 GitLab CI 같은 CI/CD 플랫폼, AWS(EventBridge), Google Cloud Scheduler, Azure Functions의 클라우드 스케줄러, 그리고 모든 주요 프로그래밍 언어의 작업 스케줄링 라이브러리에서 사용됩니다. 일부 시스템은 초 필드나 연도 필드를 추가해 6개 또는 7개 필드로 형식을 확장하지만, POSIX가 정의한 5개 필드 구조는 모든 구현이 공유하는 기본 기준입니다.

Cron 표현식을 직접 해석하는 것은 오류가 발생하기 쉽습니다. 필드 간의 상호작용이 직관적이지 않은 일정을 만들기 때문입니다. 예를 들어 0 9 1-7 * 1은 '첫 번째 주의 매주 월요일'이 아니라 '매월 1일~7일 또는 매주 월요일'을 의미합니다. Cron 파서는 각 필드를 확장하고 결합 규칙을 적용해 작업이 실제로 실행될 타임스탬프를 명확하게 보여줌으로써 이러한 모호함을 제거합니다.

이 Cron 파서를 사용하는 이유

설정 파일에서 30 */6 1,15 * * 같은 Cron 표현식을 읽고 정확히 언제 실행되는지 파악하려면 다섯 개 필드에 걸친 계산이 필요합니다. 이 파서가 그 작업을 즉시 처리합니다.

즉시 파싱
Cron 표현식을 입력하거나 붙여넣으면 사람이 읽을 수 있는 설명과 다음 10개 예약 실행 시간이 즉시 표시됩니다. 제출 버튼도, 페이지 새로고침도 필요 없습니다.
🔒
개인정보 보호 우선 처리
모든 파싱은 브라우저에서 로컬로 실행됩니다. Cron 표현식과 일정 데이터가 기기를 벗어나지 않습니다.
📋
필드별 분석
다섯 개 필드 각각을 개별적으로 파싱하고 해석된 값을 표시합니다. 어떤 필드가 일정을 제어하는지 한눈에 파악할 수 있습니다.
🔄
계정 불필요
페이지를 열고 바로 파싱을 시작하세요. 로그인, API 키, 설치가 필요 없습니다. 최신 브라우저가 있는 모든 기기에서 작동합니다.

Cron 파서 활용 사례

프론트엔드 개발자
관리자 대시보드와 스케줄링 UI에서 Cron 표현식을 백엔드로 전송하기 전에 검증합니다. 드롭다운에서 사용자가 선택한 일정이 폼에서 생성된 Cron 문자열과 일치하는지 확인하세요.
백엔드 엔지니어
예상치 않은 시간에 실행되는 예약 작업을 디버깅합니다. 작업 큐 설정(Celery, Sidekiq, Quartz)에서 Cron 표현식을 붙여넣고 다음 실행 시간이 예상과 일치하는지 확인하세요.
DevOps / SRE
CI/CD 파이프라인, Kubernetes CronJob, 클라우드 스케줄러 설정의 Cron 일정을 감사합니다. 배포 전에 백업 작업, 인증서 갱신, 정리 스크립트의 타이밍이 올바른지 검증하세요.
QA 엔지니어
테스트 환경의 예약 작업이 프로덕션 일정과 일치하는지 검증합니다. 프로덕션에서 실행 누락이 발생하기 전에 월 또는 요일 필드의 오프-바이-원 오류를 잡아내세요.
데이터 엔지니어
ETL 파이프라인과 데이터 동기화 작업의 Cron 트리거를 확인합니다. 추출 시간대가 겹치지 않고 하위 의존성에 충분한 여유 시간이 있는지 검증하세요.
학생 / 학습자
다양한 표현식을 실험하며 결과를 실시간으로 확인하면서 Cron 구문을 학습합니다. 와일드카드, 범위, 스텝 값이 어떻게 상호작용하는지 직관을 쌓으세요.

Cron 표현식 구문 참조

표준 Cron 표현식은 공백으로 구분된 다섯 개의 필드로 구성됩니다. 각 필드는 정수, 와일드카드, 범위, 목록, 스텝 값을 허용합니다. 아래 표는 각 필드의 허용 범위와 연산자를 보여줍니다.

필드범위연산자설명
Minute0–59* , - /Minute within the hour
Hour0–23* , - /Hour of the day (24-hour)
Day (month)1–31* , - /Day of the month
Month1–12* , - /Month of the year (or JAN–DEC)
Day (week)0–6* , - /Day of the week (0 = Sunday, or SUN–SAT)

네 가지 특수 문자가 각 필드 내에서 값을 매칭하는 방식을 제어합니다:

문자이름동작
*WildcardMatches every possible value in the field. * in the minute field means "every minute."
,ListSeparates individual values. 1,15 in the day field means "the 1st and 15th."
-RangeDefines an inclusive range. 1-5 in the day-of-week field means "Monday through Friday."
/StepDefines an interval. */10 in the minute field means "every 10 minutes." 5/15 means "5, 20, 35, 50."

대부분의 스케줄링 요구를 충족하는 일반적인 Cron 표현식입니다:

표현식일정
* * * * *Every minute
0 * * * *Every hour (at minute 0)
*/15 * * * *Every 15 minutes
0 9 * * *Every day at 9:00 AM
0 9 * * 1-5Weekdays at 9:00 AM
30 2 * * 0Every Sunday at 2:30 AM
0 0 1 * *First day of every month at midnight
0 0 * * 1Every Monday at midnight
0 0 1 1 *January 1st at midnight (yearly)
0 */6 * * *Every 6 hours
5,35 * * * *At minute 5 and 35 of every hour
0 9-17 * * 1-5Every hour from 9 AM to 5 PM, weekdays

코드 예제

주요 언어에서 Cron 표현식을 파싱하고 다음 실행 시간을 계산하는 방법:

JavaScript (Node.js)
import cronstrue from 'cronstrue';

// Parse cron to human-readable text
cronstrue.toString('0 9 * * 1-5');
// → "At 09:00 AM, Monday through Friday"

cronstrue.toString('*/15 * * * *');
// → "Every 15 minutes"

// Validate with cron-parser and get next run times
import { parseExpression } from 'cron-parser';

const interval = parseExpression('30 2 * * 0');
console.log(interval.next().toISOString());
// → next Sunday at 02:30 UTC

// Iterate over the next 5 runs
for (let i = 0; i < 5; i++) {
  console.log(interval.next().toString());
}
Python
from crontab import CronTab
from croniter import croniter
from datetime import datetime

# Parse and describe a cron expression
cron = CronTab('0 9 * * 1-5')
print(cron.next(default_utc=True))
# → seconds until next run

# Get the next 5 run times with croniter
base = datetime.now()
cron_iter = croniter('0 9 * * 1-5', base)
for _ in range(5):
    print(cron_iter.get_next(datetime))
# → next 5 weekday 09:00 timestamps

# Check if a specific time matches
print(croniter.match('*/15 * * * *', datetime(2026, 3, 25, 10, 30)))
# → True (minute 30 is divisible by 15)
Go
package main

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

func main() {
    // Parse a standard 5-field cron expression
    parser := cron.NewParser(cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow)
    schedule, err := parser.Parse("0 9 * * 1-5")
    if err != nil {
        panic(err)
    }

    // Calculate the next 5 run times
    now := time.Now()
    for i := 0; i < 5; i++ {
        now = schedule.Next(now)
        fmt.Println(now)
    }
    // → next 5 weekday 09:00 timestamps
}
Bash (crontab)
# List current user's cron jobs
crontab -l

# Edit cron jobs interactively
crontab -e

# Add a job: run backup.sh every day at 2:30 AM
# (append to crontab via pipe)
(crontab -l 2>/dev/null; echo "30 2 * * * /home/user/backup.sh") | crontab -

# Check syntax with a dry-run parse (requires cronie or busybox)
# The system will reject invalid expressions when saving

# View cron logs on systemd-based Linux
journalctl -u cron --since "1 hour ago"

자주 묻는 질문

5개 필드와 6개 필드 Cron 표현식의 차이는 무엇인가요?
표준(POSIX) Cron 형식은 분, 시, 일(월 기준), 월, 요일(주 기준)의 5개 필드를 가집니다. Quartz Scheduler와 Spring 같은 일부 도구는 앞에 초 필드를 추가해 6개 필드로 만듭니다. AWS EventBridge는 끝에 연도 필드를 추가해 6개 필드를 사용합니다. 이 파서는 crontab, GitHub Actions, Kubernetes CronJob, 대부분의 스케줄링 라이브러리와 호환되는 표준 5개 필드 형식을 지원합니다.
Cron은 월별 일과 요일을 어떻게 함께 처리하나요?
두 필드 모두 제한되어 있는 경우(*가 아닌 경우), Cron은 OR 논리를 사용합니다. 즉, 어느 한 조건이 참일 때 작업이 실행됩니다. 예를 들어 0 9 15 * 1은 '매월 15일 오전 9시 또는 매주 월요일'을 의미합니다. 이것이 자주 혼란을 일으키는 원인입니다. 두 필드 모두 *로 설정되면 작업은 매일 실행됩니다.
Cron이 사용하는 시간대는 무엇인가요?
전통적인 crontab은 시스템의 로컬 시간대로 실행됩니다. Kubernetes CronJob은 기본적으로 kube-controller-manager 시간대(일반적으로 UTC)를 사용하지만, Kubernetes 1.25부터 선택적 .spec.timeZone 필드를 지원합니다. AWS EventBridge와 Google Cloud Scheduler는 일정별로 시간대를 지정할 수 있습니다. Cron 작업을 배포하기 전에 항상 스케줄러가 사용하는 시간대를 확인하세요.
Cron으로 30초마다 작업을 실행할 수 있나요?
표준 5개 필드 Cron은 분 단위 미만의 스케줄링을 지원하지 않습니다. 최소 간격은 1분(*/1 또는 *)입니다. 30초마다 실행하려면 초 필드가 있는 6개 필드 Cron(Quartz, Spring), 30초 대기 후 재실행하는 래퍼 스크립트, 또는 OnCalendar를 사용하는 systemd 타이머 같은 다른 스케줄링 메커니즘이 필요합니다.
요일 필드에서 0과 7은 같은 값인가요?
대부분의 Cron 구현에서 0과 7 모두 일요일을 나타냅니다. 이 관례는 원래 Unix cron에서 유래했습니다. 그러나 일부 시스템(Quartz)은 일요일에 1을, 토요일에 7을 사용합니다. POSIX는 범위를 0-6으로 정의하며 0이 일요일입니다. 스케줄러가 이름으로 된 요일(SUN, MON)을 허용한다면 모호함을 피하기 위해 이름을 사용하세요.
존재하지 않는 날짜로 일정을 설정하면 어떻게 되나요?
31일(0 0 31 * *)로 작업을 예약하면 31일이 없는 달에는 실행되지 않습니다. Cron은 다음 달로 이월하지 않습니다. 2월은 항상 건너뛰어지고, 4월, 6월, 9월, 11월도 건너뛰어집니다. 매월 말일에 실행하려면 일부 Cron 구현이 L 수정자(0 0 L * *)를 지원하지만, 표준 POSIX Cron은 이를 지원하지 않습니다.
배포 전에 Cron 표현식을 어떻게 테스트하나요?
이 도구와 같은 온라인 파서를 사용해 다음 실행 시간을 확인하고 일정이 의도와 일치하는지 검증하세요. 프로덕션 검증을 위해 대부분의 Cron 라이브러리는 다음 실행 계산 함수를 제공합니다: Node.js의 cron-parser, Python의 croniter, Go의 robfig/cron. 테스트 스위트에서 이 중 하나를 통해 표현식을 실행하고 배포 전에 다음 N개 실행 시간을 검증하세요.