크론 표현식 5자리, 순서만 알면 바로 읽힙니다

크론 표현식은 다섯 개의 자리로 이루어진 짧은 문자열이지만, 순서와 기호의 의미를 모르면 그냥 암호처럼 보입니다. 실제로는 분·시·일·월·요일이라는 정해진 순서를 따르고, 각 자리에 들어가는 기호도 몇 가지뿐입니다. 이 순서와 기호만 정리하면 어떤 크론 표현식이든 왼쪽에서 오른쪽으로 그대로 읽어낼 수 있습니다.
요약 ① 크론 표현식은 분-시-일-월-요일 순서로 고정된 5자리이며, 각 자리는 별(*)·별/N(스텝)·특정 숫자·콤마 목록 중 하나로 채워집니다. ② 일(day-of-month)과 요일(day-of-week)을 동시에 지정하면 대부분의 크론 구현은 두 조건을 AND가 아니라 OR로 해석합니다. ③ 크론은 설정한 사람의 시계가 아니라 스케줄러(서버·CI 러너)에 설정된 시간대를 기준으로 실행되므로, 실행 전 시간대 확인이 필수입니다.
다섯 자리는 항상 같은 순서를 따릅니다
크론 표현식은 공백으로 구분된 다섯 필드로 구성되고, 순서는 항상 분-시-일-월-요일입니다. 이 순서는 어떤 크론탭이든, 어떤 CI 스케줄러든 동일하게 유지되는 규칙이라 한 번 외워두면 계속 써먹을 수 있습니다.
| 자리 | 의미 | 값 범위 |
|---|---|---|
| 1번째 | 분 | 0~59 |
| 2번째 | 시 | 0~23 |
| 3번째 | 일(day-of-month) | 1~31 |
| 4번째 | 월 | 1~12 |
| 5번째 | 요일(day-of-week) | 구현별로 0 |
요일 필드의 숫자 범위는 구현마다 미묘하게 다릅니다. 0과 7을 모두 일요일로 취급하는 경우가 흔하지만, 이 부분은 크론마다 조금씩 차이가 있으니 숫자를 외우기보다는 도구가 보여주는 요일 이름(월/화/수 등)을 기준으로 확인하는 편이 안전합니다.
별표, 별/N, 숫자 세 가지만 알면 다 읽힙니다
각 자리에 들어가는 기호는 크게 세 종류로 나뉩니다.
- 별(*) — 해당 자리에서 가능한 모든 값을 의미합니다. "분" 자리에 별이 있으면 매분, "요일" 자리에 별이 있으면 요일 상관없이 매일이라는 뜻입니다.
- 별/N (*/N) — N 단위로 반복되는 스텝입니다. 분 자리에 */15라고 쓰면 0, 15, 30, 45분마다 실행됩니다.
- 특정 숫자 — 그 값이 될 때만 실행됩니다. 시 자리에 9라고 쓰면 정확히 9시에만 실행됩니다.
여기에 콤마로 여러 값을 나열하는 방식도 있습니다. 요일 자리에 1,3,5를 넣으면 월·수·금에만 실행되고, 월 자리에 3,6,9,12를 넣으면 분기 첫 달에만 실행됩니다. 이 네 가지 조합만 알면 "0 9 * * 1-5" 같은 표현식도 "매일 9시 0분, 평일에만"으로 바로 해석됩니다.
손으로 직접 쓰면 이런 일이 벌어집니다
"평일 오전 9시에 실행"이라는 간단한 요구사항도 막상 손으로 쓰려면 순서가 헷갈립니다. 분과 시의 순서를 바꿔 쓰거나, 요일 숫자가 0부터인지 1부터인지 매번 문서를 다시 찾아봐야 합니다. 표현식을 하나 쓰고 나면 실제로 어떤 시각에 실행되는지 검증할 방법도 마땅치 않아서, 크론탭에 등록해놓고 다음 날 로그를 확인하며 맞았는지 틀렸는지 사후에야 알게 되는 경우도 흔합니다.
분·시·일·월·요일을 드롭다운으로 선택하면 표준 5자리 크론 표현식과 평이한 문장 설명을 동시에 만들어주는 도구입니다.

드롭다운으로 필드를 하나씩 선택하면 표현식과 함께 평이한 문장 설명이 바로 나오기 때문에, 등록하기 전에 의도한 시각이 맞는지 눈으로 확인할 수 있습니다. 흔히 쓰는 패턴은 프리셋으로도 제공되므로 매번 처음부터 조합할 필요도 없습니다.
일자와 요일을 같이 쓰면 생기는 함정
크론에서 가장 흔하게 오해하는 부분은 일(day-of-month)과 요일(day-of-week)을 동시에 지정했을 때의 동작입니다. "매달 15일이면서 그날이 월요일일 때만 실행"을 의도하고 일 자리에 15, 요일 자리에 1을 동시에 넣는 경우가 있는데, 대부분의 크론 구현은 이 둘을 AND가 아니라 OR로 처리합니다.
즉 실제로 실행되는 시점은 "매달 15일 그 자체"이거나 "그 달의 모든 월요일" 중 하나라도 해당하면 실행됩니다. 15일이 월요일이 아닌 달에도 15일에는 무조건 실행되고, 월요일마다도 매번 실행되는 것입니다. 이 동작은 두 필드 중 하나라도 별(*)이 아니면 항상 적용되는 규칙이라, 일과 요일을 동시에 좁혀서 "교집합"을 만들고 싶을 때는 크론 문법만으로는 표현할 수 없다는 점을 알아두어야 합니다.
이런 조건을 정말로 걸어야 한다면, 스케줄러 자체의 조건 대신 실행되는 스크립트 안에서 오늘 날짜와 요일을 직접 검사해 조건에 안 맞으면 종료하는 방식으로 우회하는 것이 일반적입니다.
시간대가 다르면 완전히 다른 시각에 실행됩니다
크론 표현식 자체에는 시간대 정보가 없습니다. 표현식은 그저 숫자 조합일 뿐이고, 그 숫자를 어떤 시간대 기준으로 해석할지는 전적으로 크론이 돌아가는 서버나 스케줄러, CI 러너의 설정에 달려 있습니다. 그래서 "매일 오전 9시"라고 만든 표현식이라도 실행 주체가 다른 시간대로 맞춰져 있으면 실제로는 전혀 다른 로컬 시각에 실행됩니다.
스케줄러마다 시간대를 지정하는 방식이 다르고 기본값도 제각각이므로, 정확한 실행 시각이 중요한 작업이라면 표현식을 등록하기 전에 해당 스케줄러의 시간대 설정을 직접 확인하는 것이 유일하게 안전한 방법입니다. 자신의 로컬 시계와 같을 것이라고 가정하지 않는 편이 좋습니다.
정리
- 크론 표현식은 분-시-일-월-요일 순서로 고정된 5자리이며 순서 자체는 어떤 구현에서도 바뀌지 않습니다.
- 각 자리는 별(*, 모든 값), 별/N(스텝), 특정 숫자, 콤마 목록(여러 값) 중 하나로 채워집니다.
- 일과 요일을 동시에 지정하면 AND가 아니라 OR로 해석되어, 의도와 다르게 더 자주 실행될 수 있습니다.
- 실행 시각은 크론이 돌아가는 서버·스케줄러의 시간대를 기준으로 정해지므로 등록 전 시간대 확인이 필요합니다.
- 요일 숫자 범위는 구현별 차이가 있으니 숫자보다 요일 이름을 기준으로 확인하는 편이 안전합니다.
분·시·일·월·요일을 드롭다운으로 선택하면 표준 5자리 크론 표현식과 평이한 문장 설명을 동시에 만들어주는 도구입니다.
자주 묻는 질문
크론 표현식에서 요일 0은 일요일인가요 월요일인가요
구현에 따라 다릅니다. 0을 일요일로 취급하고 7도 별도로 일요일을 뜻하는 경우가 흔하지만, 이는 크론마다 조금씩 차이가 있는 부분입니다. 숫자를 외워서 쓰기보다는 사용 중인 도구나 스케줄러가 보여주는 요일 이름을 기준으로 확인하는 것이 안전합니다.
매달 15일이면서 월요일에만 실행하고 싶은데 어떻게 하나요
일(day-of-month)과 요일(day-of-week) 필드를 표준 크론 문법만으로 동시에 좁혀서 교집합 조건을 만들 수는 없습니다. 두 필드를 동시에 지정하면 OR로 해석되어 15일이면 무조건, 월요일이면 무조건 실행됩니다. 진짜 교집합 조건이 필요하다면 실행되는 스크립트 안에서 오늘 날짜와 요일을 직접 검사해 조건에 안 맞으면 종료하도록 구현하는 방법이 일반적입니다.
크론 표현식을 등록했는데 예상한 시각에 실행되지 않아요
가장 먼저 확인할 부분은 시간대입니다. 크론 표현식 자체에는 시간대 정보가 없고, 실행 주체(서버, 스케줄러, CI 러너)에 설정된 시간대를 기준으로 해석되기 때문에 로컬 시계와 다를 수 있습니다. 그다음으로는 일과 요일 필드를 동시에 지정했는지 확인해, 의도치 않게 OR 조건으로 더 자주 실행되고 있지는 않은지 점검해봅니다.
별(*)과 별/N(스텝)의 차이가 정확히 뭔가요
별(*)은 해당 자리에서 가능한 모든 값을 뜻해서, 분 자리라면 매분마다 조건을 만족한다는 의미입니다. 별/N은 그중에서 N 단위로 건너뛰며 반복되는 값만 골라낸다는 뜻으로, 분 자리에 /15라고 쓰면 0, 15, 30, 45분에만 조건을 만족합니다. 즉 별/N은 별()이 만드는 전체 범위 위에 일정한 간격 조건을 얹은 것입니다.
