크론 표현식 생성기
드롭다운으로 분·시·일·월·요일을 선택해 crontab 일정을 만들고, 알기 쉬운 문장 설명과 자주 쓰는 프리셋도 함께 확인하세요.
조회수 1,013회
작동 원리
크론 표현식은 공백으로 구분된 다섯 개의 필드를 항상 같은 순서로 사용해 반복 작업을 예약합니다: 분 · 시 · 일(월중) · 월 · 요일. 각 필드는 값 하나 또는 네 가지 특수 문자 중 하나를 받을 수 있습니다: *는 "가능한 모든 값"을 의미하고, */15는 "필드의 최솟값부터 시작해 15단위마다"를 의미하며, 1,15,30은 명시적인 목록이고, 1-5는 양 끝을 포함하는 범위입니다. 왼쪽에서 오른쪽으로 읽으면 0 9 * * 1-5는 "9시의 0분에, 매월 매일, 매달, 요일 1부터 5까지"를 의미합니다 — 즉 월요일부터 금요일까지 오전 9시입니다. */10 * * * *는 하루 종일 10분마다 실행되고, 0 0 1 * *는 매달 1일 자정에 실행됩니다.
드롭다운으로 일정을 구성하면 이 도구가 다섯 개의 필드를 조합한 뒤, 그 결과를 평이한 문장으로 번역해 주므로 crontab 파일이나 클라우드 스케줄러에 붙여넣기 전에 눈으로 검증할 수 있습니다. 매분, 매시간, 매일 지정 시각, 평일에만 실행 등 사람들이 가장 자주 찾는 일정은 자주 쓰는 프리셋으로 한 번의 클릭이면 준비됩니다.
알아두어야 할 점
크론 의미론에서 가장 큰 함정: 일(월중)과 요일이 둘 다 제한되어 있을 때(둘 중 어느 것도 *로 남아 있지 않을 때), 이 둘은 AND가 아니라 OR로 결합됩니다. 그래서 0 0 15 * 5는 "15일이면서 동시에 금요일인 경우"를 뜻하지 않습니다 — "그 달의 15일, 또는 모든 금요일"을 뜻하며, 대부분의 사람이 의도한 것보다 훨씬 더 자주 실행됩니다. 둘 중 하나만 중요하다면 나머지 하나는 *로 남겨 두어야 합니다.
요일 번호 매김도 뜻밖일 수 있습니다: 대부분의 크론 구현에서 0과 7은 모두 일요일을 의미하며, 월요일은 1입니다. 그리고 결정적으로, 크론은 항상 서버에 설정된 시간대 — 클라우드 인프라에서는 보통 UTC — 를 기준으로 실행되며, 일정을 설정한 사람의 로컬 시간대가 아닙니다. 그래서 "오전 9시"로 예약한 작업이 호스트의 시간대를 확인하기 전까지는 예상과 다른 로컬 시각에 실행될 수 있습니다. GitHub Actions의 schedule:, AWS EventBridge, Kubernetes CronJob 같은 클라우드 스케줄러는 모두 이와 동일한 다섯 필드 문법을 기반으로 하며, 때로는 공급업체별 확장(선택적인 초 필드, 요일 이름 축약형 등)을 덧붙입니다. 그래서 여기서 만든 일정은 최소한의 변환만으로 이런 플랫폼에 그대로 옮길 수 있습니다.
자주 묻는 질문
30초마다 실행하려면 어떻게 하나요?
기존 cron의 최소 단위는 분입니다. 흔히 쓰는 방법은 항목을 두 개 만드는 것입니다 — 하나는 그대로, 다른 하나는 명령어 앞에 `sleep 30 &&`를 붙이는 방식입니다. 또는 초 단위를 지원하는 systemd 타이머를 사용할 수도 있습니다.
9시에 실행되도록 설정했는데 왜 이상한 시각에 실행됐나요?
거의 대부분 시간대 문제입니다. crontab은 서버의 로컬 시간을 기준으로 실행되며, 클라우드 환경에서는 보통 UTC입니다. 호스트에서 `date` 명령으로 확인하거나, 지원되는 경우 CRON_TZ를 설정하세요.
표현식을 안전하게 테스트하려면 어떻게 하나요?
먼저 로그를 남기는 명령으로 테스트해 보세요: `* * * * * date >> /tmp/cron-test.log`. 주기를 확인한 다음 실제 명령으로 교체하세요. crontab을 실행하는 사용자에게 필요한 PATH가 설정되어 있는지도 확인하세요 — cron 환경은 매우 제한적입니다.
일(월중)과 요일을 둘 다 설정하면 어떻게 되나요?
AND가 아니라 OR로 결합됩니다 — `0 0 15 * 5` 같은 일정은 그 달의 15일에도, 그리고 매주 금요일에도 실행되며, 15일에 우연히 해당하는 금요일에만 실행되는 것이 아닙니다. 크론만으로는 두 조건의 교집합을 표현할 수 없으므로, 그런 확인은 작업 자체 안에서 처리해야 합니다.
크론은 일광절약시간제(DST)를 반영하나요?
구현에 따라 다르지만, 기존 크론은 대체로 DST 전환을 포함한 시스템 시계의 로컬 시간을 그대로 따릅니다 — 즉 "봄철 시간 앞당김" 또는 "가을철 시간 되돌림" 시간대에 예약된 작업이 그날 한 번도 실행되지 않거나 두 번 실행될 수 있다는 뜻입니다. UTC로 설정된 서버는 이 문제를 완전히 피할 수 있으며, 대부분의 운영 스케줄러가 기본값으로 UTC를 쓰는 이유 중 하나이기도 합니다.
같은 필드에서 범위와 스텝을 함께 사용할 수 있나요? 예를 들어 하루걸러 평일마다처럼요.
네 — 스텝은 와일드카드뿐 아니라 범위에도 적용할 수 있습니다. 요일 필드의 `1-5/2`는 "월요일부터 금요일 범위 안에서 하루씩 건너뛰며"를 의미하므로 결과는 월요일, 수요일, 금요일이 됩니다. 이 범위/스텝 결합 형식은 Vixie cron과 systemd를 포함한 대부분의 최신 크론 구현에서 지원되지만, 가장 오래된 POSIX 구현에서는 지원되지 않을 수 있으므로 레거시 환경에서 의존하기 전에 한 번 테스트해 보시기 바랍니다.
비슷한 도구
문제 신고하기
크론 표현식 생성기
댓글
아직 댓글이 없습니다 — 첫 댓글을 남겨보세요!