크론(Cron) 표현식 생성기
복잡한 별표(*) 기호는 이제 그만! 직관적인 UI로 서버 스케줄러와 배치(Batch) 작업에 필요한 크론 식을 쉽게 만들고 복사하세요.
자주 사용하는 시간 (빠른 설정)
0-59, *, */n
0-23, *, */n
1-31, *, ?
1-12, *
0-6 (0=일), *
💡 함께 많이 쓰는 추천 도구
크론(Cron) 표현식, 볼 때마다 헷갈리시죠?
안녕하세요 개발자 여러분! 서버를 운영하거나 백엔드 개발을 하다 보면 무조건 한 번쯤은 마주치게 되는 녀석이 있습니다. 바로 주기적인 작업을 설정하는 크론(Cron) 표현식입니다. "매주 월요일 아침 9시에 뉴스레터 이메일을 발송해라", "매일 새벽 3시에 데이터베이스 백업을 실행해라" 같은 스케줄링(Batch) 작업을 서버에게 지시할 때 사용하는 외계어 같은 문자열이죠.

분명히 지난달에 구글링해서 열심히 설정해 뒀는데, 막상 오늘 다시 코드를 열어보면 * * * * * 이 별표 다섯 개가 도대체 분을 의미하는지, 시간을 의미하는지, 요일을 의미하는지 머릿속이 하얘지곤 합니다. 만약 숫자를 하나라도 잘못 입력하면 고객에게 새벽 2시에 마케팅 문자가 날아가는 끔찍한 대참사(!)가 발생할 수도 있습니다. 저희가 만든 이 '크론 표현식 생성기'는 여러분이 더 이상 실수하지 않고, 클릭 몇 번만으로 안전하고 정확한 스케줄링 코드를 짤 수 있도록 돕는 아주 든든한 무기입니다.
크론(Cron)의 5가지 기본 자리 완벽 해부
가장 널리 쓰이는 리눅스(Linux) 표준 크론 표현식은 띄어쓰기를 기준으로 총 5개의 자리로 구성되어 있습니다. 왼쪽부터 순서대로 다음과 같습니다.
- 1번째 자리 (분 - Minute): 0부터 59까지의 숫자를 입력합니다. 정각을 원한다면 0을 넣습니다.
- 2번째 자리 (시 - Hour): 0부터 23까지의 숫자를 입력합니다. 오후 2시라면 14가 되겠죠? 서버의 타임존(보통 UTC 또는 KST)을 꼭 확인하셔야 합니다.
- 3번째 자리 (일 - Day of Month): 1부터 31까지의 날짜를 입력합니다. 매월 15일에 월급을 준다면 15를 넣습니다.
- 4번째 자리 (월 - Month): 1부터 12까지의 달을 입력합니다. (JAN, FEB 같이 영문 약자로도 쓸 수 있습니다.)
- 5번째 자리 (요일 - Day of Week): 여기가 제일 헷갈립니다! 보통 0부터 6까지의 숫자를 쓰는데, 0은 일요일, 1은 월요일... 6은 토요일을 의미합니다. (일부 시스템에서는 7도 일요일로 쳐주지만 안전하게 0을 쓰세요.)

특수 기호 활용법 (이것만 알면 당신도 스케줄링 마스터!)
- 별표 (*) : '매번', '모든'을 의미합니다. 분 자리에 *이 있으면 매 1분마다 실행된다는 뜻입니다.
- 슬래시 (/) : 주기를 나타냅니다. 분 자리에
*/5라고 적으면 '5분마다' 실행하라는 의미가 됩니다. - 하이픈 (-) : 범위를 지정합니다. 요일 자리에
1-5라고 적으면 '월요일부터 금요일까지(평일)' 실행하라는 뜻입니다. - 쉼표 (,) : 여러 특정 값을 지정할 때 씁니다. 시간 자리에
9,18이라고 적으면 '오전 9시와 오후 6시에만' 실행합니다.
Q. 저는 자바 스프링(Spring)의 @Scheduled 어노테이션을 쓰는데, 자리가 6개인데요?
A. 아주 예리한 질문입니다! 리눅스 기본 크론탭(crontab)이나 GitHub Actions, AWS EventBridge 등은 보통 5자리를 씁니다. 하지만 Spring Framework의 Quartz 스케줄러나 특정 라이브러리들은 맨 앞에 '초(Second)'를 의미하는 자리가 하나 더 추가되어 총 6자리(또는 연도까지 7자리)를 사용합니다. 본인이 설정하려는 서버나 프레임워크의 공식 문서를 확인하여 초 단위가 포함되는지 반드시 체크하셔야 합니다.
Q. 일(Day) 자리와 요일(Week) 자리가 충돌하면 어떻게 되나요?
A. 예를 들어 매월 15일이면서 동시에 금요일에만 실행하고 싶을 때가 있죠. 이럴 때 리눅스 크론은 둘 중 하나라도 조건이 맞으면 실행(OR 조건)해 버리는 경우가 있습니다. 이를 방지하기 위해 Quartz나 AWS 등에서는 둘 중 하나를 사용하지 않겠다는 의미로 별표(*) 대신 물음표(?) 기호를 사용하도록 강제하기도 합니다. (예: 일 자리에 15를 넣었다면, 요일 자리에는 ?를 입력)
Q. 주의해야 할 서버 시간대(Timezone) 문제가 있나요?
A. 스케줄링 장애의 80%는 타임존에서 발생합니다! 나는 한국 시간(KST)으로 매일 오전 9시에 맞췄는데, 실제 서버는 UTC(협정 세계시) 기준으로 세팅되어 있어서 한국 시간 오후 6시에 작동해버리는 식이죠. 크론 식을 작성하기 전, 반드시 서버 터미널에 date 명령어를 쳐서 시스템 시간이 KST인지 UTC인지 확인하세요. (UTC일 경우 KST보다 9시간이 느립니다.)