광고 영역

Cron 표현식 읽는 법: 5개 필드와 자주 쓰는 예시

공백으로 나눈 다섯 칸만 읽을 줄 알면 돼요

서버에서 정기적으로 작업을 돌리려고 보면 0 3 * * * 같은 알 수 없는 문자열을 만나요. 이게 cron 표현식이에요. 백업, 데이터 정리, 알림 발송, 배치 작업까지 개발자라면 거의 매번 쓰게 되는데, 처음에는 읽는 법도 쓰는 법도 헷갈려요. 이 글에서는 다섯 칸의 의미와 기호, 그리고 자주 쓰는 예시와 함정을 정리했어요.

1. 다섯 개 필드의 의미

cron 표현식은 공백으로 나눈 다섯 개의 필드로 이루어져요. 순서가 중요해요.

순서필드허용 값비고
1분0-59
2시0-2324시간제
3일(날짜)1-31
4월1-12JAN, FEB 같은 영문 약어도 가능
5요일0-70과 7은 모두 일요일, SUN, MON 같은 약어 가능

그러니까 30 9 * * *은 "분 30, 시 9, 매일, 매월, 매 요일"이라서 매일 오전 9시 30분이에요.

2. 기호 네 가지

기호의미예시
*모든 값 (처음부터 끝까지)분 자리의 *는 매분
,여러 값을 나열1,15 → 1일과 15일
-범위9-18 → 9시부터 18시까지
/간격(step)*/10 → 0분부터 10분마다

슬래시는 범위 뒤에 붙여서 간격을 정해요. */10은 0, 10, 20, 30, 40, 50분이에요. 5/15처럼 쓰면 5분부터 15분 간격이라 5, 20, 35, 50분이 돼요. @daily, @hourly, @weekly, @monthly, @yearly, @reboot 같은 단축 표기도 있어요.

Cron 표현식 만들고 읽기

실행 주기를 고르면 표현식이 만들어지고, 붙여 넣은 표현식은 한국어로 풀어 줘요. 다음 5번의 실행 시각도 보여 줘요.

Cron 표현식 생성기 열기 →

3. 자주 쓰는 예시

표현식의미
* * * * *매분
*/5 * * * *5분마다
0 * * * *매시 정각
0 3 * * *매일 새벽 3시
30 9 * * 1-5평일(월~금) 오전 9시 30분
0 9 * * 1매주 월요일 오전 9시
0 0 1 * *매월 1일 자정
0 0 1 1 *매년 1월 1일 자정
*/15 9-18 * * 1-5평일 9시~18시 사이 15분마다
0 9,18 * * *매일 오전 9시와 오후 6시
0 0 * * 0매주 일요일 자정
0 2 1,15 * *매월 1일과 15일 새벽 2시

4. 자주 틀리는 함정 세 가지

첫째, 일(날짜)과 요일을 둘 다 지정하면 "그리고"가 아니라 "또는"이에요. crontab 매뉴얼에 따르면 일과 요일 필드를 모두 *가 아닌 값으로 지정하면 둘 중 하나라도 맞으면 실행돼요. 예를 들어 30 4 1,15 * 5는 "매월 1일과 15일, 그리고 매주 금요일" 새벽 4시 30분에 실행돼요. "15일이면서 금요일인 날"이 아니에요.

둘째, 서버 시간대를 확인하세요. 대부분의 서버와 클라우드 서비스는 UTC 기준으로 돌아가요. 한국 시간(KST)은 UTC보다 9시간 빨라서, 한국 시간 오전 9시에 실행하려면 UTC로 0시(0 0 * * *)로 써야 해요. 한국 시간 새벽 2시는 UTC로 전날 17시예요. 서버 시간대와 의도한 시간이 어긋나는 게 가장 흔한 실수예요.

셋째, 간격은 처음부터 다시 시작해요. */7을 분 자리에 쓰면 0, 7, 14, ..., 56분에 실행되고, 56분 다음은 60분이 아니라 다음 시간 0분이에요. 그래서 마지막 간격이 4분으로 짧아져요. 60의 약수(5, 10, 15, 20, 30)로 정하면 간격이 일정해요.

5. 서비스마다 조금씩 다른 점

cron 표기법은 서비스에 따라 변형이 있어요. 리눅스 crontab과 GitHub Actions 스케줄은 다섯 필드이고 GitHub Actions는 UTC 기준이에요. 어떤 서비스는 초 단위나 연도 필드를 추가한 여섯·일곱 필드를 쓰고, 일과 요일 중 하나에 ?를 쓰는 규칙이 있는 곳도 있어요. 쓰려는 서비스의 문서에서 필드 개수와 시간대를 먼저 확인하세요. 시각 계산이 필요할 때는 타임스탬프 변환도 도움이 돼요.

자주 묻는 질문

매분이 아니라 5초마다 실행할 수 있나요?

표준 cron은 분 단위가 가장 짧아요. 초 단위가 필요하면 초 필드를 지원하는 스케줄러를 쓰거나, 프로그램 안에서 반복 로직을 구현해야 해요.

요일 숫자는 어떻게 되나요?

0과 7이 일요일, 1이 월요일, 6이 토요일이에요. SUN, MON 같은 영문 약어도 쓸 수 있어요.

"매월 마지막 날"은 어떻게 쓰나요?

표준 cron에는 마지막 날을 나타내는 기호가 없어요. 28일 이후 매일 실행하게 하고, 스크립트 안에서 내일이 1일인지 확인하는 방식을 많이 써요. 서비스에 따라 L 같은 확장 기호를 지원하기도 해요.

표현식이 맞는지 어떻게 확인하나요?

표현식을 한국어로 풀어 주고 다음 실행 시각을 보여 주는 도구에서 확인하세요. 실제로 돌리기 전에 다음 실행 시각 몇 개를 보면 의도와 같은지 알 수 있어요.

출처

이 글의 설명은 게시일 기준이에요. 도구와 규격은 업데이트될 수 있으니 중요한 작업 전에는 공식 문서를 확인하세요.