Cron 표현식 개요
정의
- 목적: 작업 스케줄링을 위한 시간 표현 방식
- 용도: 주기적·반복적 작업 자동 실행 (배치, 백업, 알림 등)
- 사용처: Linux/Unix cron, Spring Scheduler, Quartz, Jenkins 등
Cron 표현식 구조
기본 형식 (Unix/Linux Cron - 5필드)
* * * * *
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 요일 (0-7, 0과 7=일요일)
│ │ │ └─── 월 (1-12)
│ │ └───── 일 (1-31)
│ └─────── 시 (0-23)
└───────── 분 (0-59)
확장 형식 (Spring/Quartz - 6~7필드)
초 분 시 일 월 요일 (연도)
필드별 상세
| 필드 값 |
범위 |
특수 문자 |
설명 |
| 분 |
0-59 |
* , - / |
분 (Minute) |
| 시 |
0-23 |
* , - / |
시간 (Hour, 24시간 형식) |
| 일 |
1-31 |
* , - / ? L W |
날짜 (Day of Month) |
| 월 |
1-12 또는 JAN-DEC |
* , - / |
월 (Month) |
| 요일 |
0-7 또는 SUN-SAT |
* , - / ? L # |
요일 (0=일, 1=월, ..., 7=일) |
| 초 |
0-59 |
* , - / |
초 (Second, 확장 시) |
| 연도 |
1970-2099 |
* , - / |
연도 (Year, 선택 사항) |
특수 문자 의미
| 문자 |
의미 |
예시 |
설명 |
| * |
모든 값 |
* * * * * |
매분마다 |
| , |
여러 값 나열 |
0,15,30,45 * * * * |
0분, 15분, 30분, 45분 |
| - |
범위 지정 |
0 9-17 * * * |
9시~17시 매시 정각 |
| / |
증가값 (간격) |
*/10 * * * * |
10분마다 |
| ? |
특정 값 없음 |
0 0 15 * ? |
매월 15일 (요일 무관) |
| L |
마지막 |
0 0 L * * |
매월 마지막 날 |
| W |
가장 가까운 평일 |
0 0 15W * * |
15일과 가장 가까운 평일 |
| # |
N번째 요일 |
0 0 ? * 2#3 |
매월 3번째 월요일 |
자주 사용하는 Cron 표현식 예제
기본 예제
| Cron 표현식 |
설명 |
| * * * * * |
매분마다 실행 |
| 0 * * * * |
매시 정각 (0분)에 실행 |
| 0 0 * * * |
매일 자정 (0시 0분)에 실행 |
| 0 0 1 * * |
매월 1일 자정에 실행 |
| 0 0 * * 0 |
매주 일요일 자정에 실행 |
시간 간격
| Cron 표현식 |
설명 |
| */5 * * * * |
5분마다 실행 (0, 5, 10, ..., 55분) |
| */10 * * * * |
10분마다 실행 |
| */15 * * * * |
15분마다 실행 |
| 0 */2 * * * |
2시간마다 실행 (0시, 2시, 4시, ...) |
| 0 */6 * * * |
6시간마다 실행 |
특정 시간
| Cron 표현식 |
설명 |
| 0 9 * * * |
매일 오전 9시에 실행 |
| 30 15 * * * |
매일 오후 3시 30분에 실행 |
| 0 9-17 * * * |
9시~17시 매시 정각 (근무 시간) |
| 0 9,12,18 * * * |
매일 9시, 12시, 18시에 실행 |
| 0 0 9-18/2 * * * |
9시부터 18시까지 2시간마다 (9, 11, 13, 15, 17시) |
요일 지정
| Cron 표현식 |
설명 |
| 0 9 * * 1-5 |
평일(월~금) 오전 9시 |
| 0 0 * * 6,0 |
주말(토, 일) 자정 |
| 0 18 * * 5 |
매주 금요일 오후 6시 |
| 0 0 ? * MON |
매주 월요일 자정 |
특정 날짜
| Cron 표현식 |
설명 |
| 0 0 1,15 * * |
매월 1일, 15일 자정 |
| 0 0 L * * |
매월 마지막 날 자정 |
| 0 0 15W * * |
매월 15일과 가장 가까운 평일 |
| 0 0 1 1 * |
매년 1월 1일 자정 (신년) |
| 0 0 1 */3 * |
분기별 1일 자정 (1, 4, 7, 10월) |
복합 조건
| Cron 표현식 |
설명 |
| 0 0,12 * * * |
매일 자정과 정오 |
| 0 */4 * * * |
4시간마다 (0시, 4시, 8시, 12시, ...) |
| 0 9-17 * * 1-5 |
평일 근무 시간 매시 정각 |
| 0 0 ? * 2#3 |
매월 3번째 월요일 자정 |
| 0 30 6 * * MON-FRI |
평일 오전 6시 30분 (초 포함, 6필드) |
특수 문자 상세 설명
1. ? (물음표) - 특정 값 없음
- 사용 위치: 일(Day) 또는 요일(Day of Week) 필드
- 의미: "상관없음" 또는 "지정하지 않음"
- 사용 이유: 일과 요일 중 하나만 지정할 때 나머지에 사용
0 0 15 * ? (O) 매월 15일 자정 (요일 무관)
0 0 ? * MON (O) 매주 월요일 자정 (날짜 무관)
0 0 15 * MON (X) 일과 요일 동시 지정 불가
2. L (Last) - 마지막
- 일 필드: 해당 월의 마지막 날
- 요일 필드: 해당 월의 마지막 특정 요일
0 0 L * * → 매월 마지막 날 자정
0 0 ? * 5L → 매월 마지막 금요일 자정
0 0 L-3 * * → 매월 마지막 날로부터 3일 전
3. W (Weekday) - 평일
- 의미: 지정된 날짜에 가장 가까운 평일 (월~금)
0 0 15W * * → 15일과 가장 가까운 평일
(15일이 토요일이면 14일 금요일에 실행)
(15일이 일요일이면 16일 월요일에 실행)
4. # (해시) - N번째 요일
0 0 ? * 2#1 → 매월 첫 번째 월요일
0 0 ? * 5#3 → 매월 세 번째 금요일
0 0 ? * 6#2 → 매월 두 번째 토요일