cron 표현식 읽는 법 — 5칸 구조와 예시 모음
백업 스크립트, 배치 작업, GitHub Actions 스케줄 — 주기 실행이 필요한 곳엔 어김없이 0 9 * * 1 같은 cron 표현식이 등장합니다. 다섯 칸의 의미만 알면 바로 읽고 쓸 수 있습니다. 구조와 자주 쓰는 예시, 헷갈리는 함정을 정리합니다.
5칸 구조 — 분·시·일·월·요일
cron 표현식은 공백으로 구분된 다섯 칸입니다. 왼쪽부터:
| 칸 | 의미 | 허용 값 |
|---|---|---|
| 1 | 분 | 0 ~ 59 |
| 2 | 시 | 0 ~ 23 |
| 3 | 일(날짜) | 1 ~ 31 |
| 4 | 월 | 1 ~ 12 |
| 5 | 요일 | 0 ~ 6 (0 = 일요일) |
0 9 * * 1 = "분이 0, 시가 9, 날짜·월은 아무 때나, 요일이 월요일" → 매주 월요일 오전 9시.
특수문자 4가지 — * , - /
*— 모든 값: 그 칸은 조건 없음.,— 나열:1,15(일 칸) = 1일과 15일.-— 범위:1-5(요일 칸) = 월~금./— 간격:*/5(분 칸) = 5분마다,*/2(시 칸) = 2시간마다.
자주 쓰는 표현식 모음
| 표현식 | 의미 |
|---|---|
*/5 * * * * | 5분마다 |
0 * * * * | 매시 정각 |
0 9 * * * | 매일 오전 9시 |
30 18 * * 1-5 | 평일(월~금) 오후 6시 30분 |
0 9 * * 1 | 매주 월요일 오전 9시 |
0 0 1 * * | 매월 1일 자정 |
0 3 * * 0 | 매주 일요일 새벽 3시 (백업 단골) |
0 0 1 1 * | 매년 1월 1일 자정 |
cron 표현식 변환표현식을 넣으면 한국어 설명과 다음 실행 시각 표시
해석하기 →
헷갈리는 함정 3가지
- 서버 시간대: 많은 서버·CI가 UTC로 돕니다. 한국 시간 오전 9시에 돌리려면
0 0 * * *(UTC 0시 = KST 9시)처럼 9시간을 빼야 합니다. - 요일 숫자: 0이 일요일입니다(7을 일요일로 받는 구현도 있음). "월요일 = 1"만 기억하면 안전합니다.
- 일 + 요일 동시 지정: 표준 cron에서 날짜와 요일을 둘 다 지정하면 OR 조건이 되어, 둘 중 하나만 맞아도 실행됩니다. "매월 1일이 월요일일 때"처럼 AND를 의도했다면 스크립트 안에서 추가로 확인해야 합니다.
팁: 작성한 표현식은 배포 전에 해석 도구로 "다음 실행 시각"을 확인하는 습관을 들이면, 새벽에 잘못 도는 배치를 미리 잡을 수 있습니다.
자주 묻는 질문
Q. cron 표현식의 다섯 칸은 각각 무엇인가요?
왼쪽부터 분(0~59), 시(0~23), 일(1~31), 월(1~12), 요일(0~6, 0=일요일) 순서입니다. 예를 들어 0 9 * * 1은 '매주 월요일 오전 9시 0분'을 뜻합니다. *는 '모든 값'이라는 의미로, 그 칸의 조건을 따지지 않겠다는 뜻입니다.
Q. */5 같은 슬래시는 무슨 뜻인가요?
간격(step)을 뜻합니다. 분 칸의 */5는 '5분마다'(0, 5, 10…55분), 시 칸의 */2는 '2시간마다'입니다. 쉼표(,)는 나열(1,15 = 1일과 15일), 하이픈(-)은 범위(1-5 = 월~금)를 의미합니다. 세 가지를 조합하면 대부분의 주기를 표현할 수 있습니다.
Q. cron이 예상 시각에 실행되지 않아요. 뭘 확인해야 하나요?
먼저 서버의 시간대를 확인하세요. 많은 서버가 UTC로 동작해 한국 시간보다 9시간 늦게 실행된 것처럼 보입니다. 다음으로 요일 숫자(0=일요일)가 의도와 맞는지, 그리고 일(day)과 요일(weekday)을 동시에 지정했는지 확인하세요. 표준 cron에서 둘을 함께 지정하면 둘 중 하나만 맞아도(OR 조건) 실행되어 예상보다 자주 돌 수 있습니다.
함께 보면 좋은 가이드