크론 표현식 읽는 법: 5개 필드 완전 정리

'30 9 * * 1-5'처럼 다섯 칸으로 된 cron 표현식을 어딘가에서 보거나 직접 설정했는데, 정확히 언제 어떤 주기로 실행되는지 확신이 서지 않는 경우가 있습니다.

이 글은 분·시·일·월·요일 5개 필드가 각각 무엇을 뜻하는지, '*'·범위·목록·간격 표기가 실제로 어떤 값으로 풀리는지를 표현식 구조 자체의 사실로 정리합니다. 특히 초보자가 가장 자주 틀리는 요일의 0/7 처리와, 일·요일 동시 지정 규칙까지 순서대로 확인합니다.

요약 ① cron 표현식은 '분 시 일 월 요일' 순서의 5개 필드이며, 각 필드는 콤마로 구분한 부분들의 합집합으로 값이 확장됩니다. ② ''는 전체 범위, 'a-b'는 범위, 'a,b'는 목록, 'a/n'·'/n'은 간격을 뜻하고, 요일 필드에서는 0과 7이 모두 일요일입니다. ③ 일(day)과 요일을 동시에 지정하면 AND가 아니라 OR로 판정되어, 둘 중 하나만 맞아도 그날 실행됩니다.

크론 표현식이 헷갈리는 실제 상황

서버의 crontab 파일이나 CI/CD 스케줄 설정에는 종종 설명 없이 '0 3 1,15 * 3' 같은 다섯 칸짜리 숫자·기호 나열만 남아 있습니다. 표현식을 처음 만든 사람이 이미 없거나 다른 팀에서 그대로 넘겨받은 설정이라면, 이 한 줄이 정확히 어떤 날 실행되는지 물어볼 곳이 없습니다.

특히 일(day-of-month) 필드와 요일(day-of-week) 필드가 함께 값을 가진 경우가 문제입니다. '1,15'는 매달 1일과 15일을, '3'은 수요일을 가리킵니다.

이 둘이 함께 있을 때 '1일이면서 동시에 수요일인 날'로 좁혀 읽어야 하는지 '1일이거나 수요일인 날'로 넓혀 읽어야 하는지에 따라 한 달에 실행되는 횟수가 크게 달라집니다. 필드 규칙을 정확히 모르면 표기만 보고는 어느 쪽인지 판단할 수 없습니다.

도구 없이 직접 해석하는 방법

cron 표현식은 도구 없이도 순서대로 손으로 풀어낼 수 있습니다.

1단계 — 다섯 칸을 순서와 범위대로 나눕니다. 공백으로 구분된 필드는 항상 '분 시 일 월 요일' 순서이며, 각각 정해진 값 범위를 가집니다.

필드순서값 범위
1번째0~59
2번째0~23
일 (day-of-month)3번째1~31
4번째112 (JANDEC)
요일 (day-of-week)5번째07 (SUNSAT, 0과 7 모두 일요일)

필드가 정확히 5개가 아니면(예: '@daily' 같은 매크로, 또는 필드 개수가 다른 입력) 이 표준 5필드 표기가 아닙니다.

2단계 — 필드마다 콤마로 나눠 각 부분을 해석합니다. 한 필드 안에 콤마(,)가 있으면 그 필드가 매칭하는 값은 각 부분이 나타내는 값들의 합집합입니다. 부분 하나는 아래 네 가지 표기 중 하나입니다.

  • '*' — 그 필드의 전체 범위 전부
  • 'a-b' — a부터 b까지의 범위(양 끝 포함)
  • 단일 숫자 'a' — 그 값 하나
  • 'a/n' 또는 '/n' — 시작값부터 n칸 간격으로 뛰는 값들. '/n'은 그 필드의 최솟값부터, 'a/n'은 a부터 그 필드의 최댓값까지 뛰는 값들입니다.

3단계 — 월·요일의 영문 약자를 숫자로 바꿉니다. 월은 JAN=1부터 DEC=12까지, 요일은 SUN=0부터 SAT=6까지로 치환됩니다. 요일 필드는 숫자 0~7 범위를 허용하며, 0과 7 둘 다 일요일을 가리킵니다. 일요일을 0으로 쓰든 7로 쓰든 같은 날입니다.

4단계 — 일과 요일이 동시에 지정됐는지 확인합니다. 일(day-of-month)과 요일(day-of-week) 필드가 둘 다 '*'가 아니면, 두 필드는 AND(교집합)가 아니라 OR(합집합)로 판정됩니다.

그날이 지정한 일 중 하나이거나 지정한 요일 중 하나이면 실행됩니다. 반대로 둘 중 하나라도 '*'이면 그 필드는 조건에서 빠지고 나머지 필드만으로 판정됩니다.

예를 들어 '30 9 * * 1-5'를 순서대로 풀면 이렇습니다.

  • 분: 30 → 30분
  • 시: 9 → 9시
  • 일: * → 모든 날짜
  • 월: * → 모든 달
  • 요일: 1-5 → 월요일부터 금요일까지

일과 월이 '*'이고 요일만 값을 가지므로, 이 표현식은 매주 월요일부터 금요일까지 9시 30분에 실행됩니다.

일과 요일이 함께 값을 가지는 경우는 다르게 풀립니다. '0 3 1,15 * 3'을 같은 방식으로 풀면 이렇습니다.

  • 분: 0, 시: 3 → 3시 0분
  • 일: 1,15 → 매달 1일과 15일
  • 월: * → 모든 달
  • 요일: 3 → 수요일

일(1, 15)과 요일(수요일)이 둘 다 '*'가 아니므로 OR로 묶입니다. 따라서 이 표현식은 매달 1일이거나 15일이거나, 또는 그날이 수요일이면 3시 0분에 실행됩니다. 한 달 중 1일·15일 두 날짜뿐 아니라 그 달의 모든 수요일에도 함께 실행되는 것입니다.

저희 도구로 확인하기.

크론(cron) 표현식 해석기

표현식을 입력하면 브라우저에서 즉시 필드별로 해석되며, 입력값은 서버로 전송되지 않습니다.

자주 헷갈리는 표기 정리

cron 표기는 몇 가지 규칙만 정확히 알면 대부분의 오해가 풀립니다. 특히 아래 다섯 가지가 반복해서 헷갈리는 지점입니다.

헷갈리는 지점실제 규칙
요일 '0'과 '7'둘 다 일요일입니다. 서로 다른 요일이 아닙니다.
일·요일 동시 지정AND(교집합)가 아니라 OR(합집합)입니다. 둘 중 하나만 맞아도 실행됩니다.
요일 '1-5'별도의 "평일" 표기가 있는 게 아니라 월(1)부터 금(5)까지의 범위로 표현한 것입니다.
'*/15'와 '5/15''*/15'는 0부터 15칸 간격(0, 15, 30, 45)이고, '5/15'는 5부터 그 필드의 최댓값까지 15칸 간격(5, 20, 35, 50)입니다. 시작점이 다릅니다.
'@daily' 같은 매크로분·시·일·월·요일 5개 필드로 풀어 쓴 표기가 아니라서 표준 5필드 형식과 다르게 처리됩니다.

필드 값이 정해진 범위를 벗어나거나(예: 분 필드에 60) 필드 개수가 5개가 아니면, 유효한 표현식으로 해석되지 않습니다.

정리

cron 표현식을 읽을 때 확인할 사실은 다음 다섯 가지로 정리됩니다.

  1. 필드는 항상 '분 시 일 월 요일' 순서의 5개입니다.
  2. '*'·범위(a-b)·목록(a,b)·간격(a/n, */n)은 각각 정해진 규칙에 따라 값 집합으로 확장되고, 콤마로 나뉜 부분들은 합집합으로 합쳐집니다.
  3. 요일 필드는 0~7 범위이며, 0과 7 모두 일요일을 가리킵니다.
  4. 일(day)과 요일을 동시에 지정하면 AND가 아니라 OR로 판정됩니다.
  5. 규칙 자체는 손으로도 풀 수 있지만, 필드가 여러 개 겹치면 표로 정리해 보는 편이 빠르고 정확합니다.
크론(cron) 표현식 해석기

표현식을 입력하면 브라우저에서 즉시 필드별로 해석되며, 입력값은 서버로 전송되지 않습니다.

자주 묻는 질문

요일에서 0과 7을 둘 다 써도 되나요?

네. 요일 필드는 0부터 7까지의 값을 받고, 0과 7 모두 일요일로 처리됩니다. 6은 토요일이며, 1부터 5까지는 각각 월요일부터 금요일입니다.

일(day)과 요일을 같이 쓰면 두 조건을 모두 만족해야 하나요?

아닙니다. 일(day-of-month)과 요일(day-of-week)이 둘 다 '*'가 아닌 값으로 채워져 있으면 OR(합집합)로 판정됩니다. 예를 들어 일에 '1,15', 요일에 '3'(수요일)을 지정하면 매달 1일·15일뿐 아니라 그 달의 모든 수요일에도 실행됩니다.

반대로 둘 중 하나가 '*'이면 그 필드는 조건에서 빠지고 나머지 필드만 적용됩니다.

'*/15'와 '5/15'는 같은 뜻인가요?

다릅니다. '*/15'는 해당 필드의 최솟값(분이라면 0)부터 15칸 간격으로 뛰어 0, 15, 30, 45가 됩니다. 'a/n' 형태인 '5/15'는 5부터 그 필드의 최댓값까지 15칸 간격으로 뛰어 5, 20, 35, 50이 됩니다. 시작하는 값이 다르기 때문에 결과 값 집합도 달라집니다.

입력한 표현식이 서버로 전송되나요?

아니요. 표현식 해석은 전부 브라우저 안에서 처리되며, 입력한 내용은 서버로 전송되거나 저장되지 않습니다.

가격 보기카톡 무료 상담