모든 아티클

Cron 표현식: 작업 일정을 해독하는 방법

Cron 표현식은 1970년대부터 유닉스 계열 시스템에서 사용된, 반복되는 작업 일정을 표현하는 간결한 방법입니다. 공백으로 구분된 다섯 개 필드로 거의 모든 규칙적인 일정을 표현할 수 있습니다.

표현식의 다섯 필드

표준 cron 표현식은 분 시 일 월 요일 형태입니다. 예를 들어 30 14 * * 1은 "매주 월요일 14시 30분"을 의미합니다 — 별표는 일과 월에 대해 "어떤 값이든"을 의미합니다.

슬래시와 쉼표의 의미

*/15 * * * *처럼 별표 뒤의 슬래시는 "15단위마다"를 의미합니다 — 이 경우 15분마다입니다. 쉼표는 여러 특정 값을 나열할 수 있게 해줍니다. 예를 들어 0 9,18 * * *는 하루에 두 번, 9시와 18시에 작업을 실행합니다.

"요일" 필드가 가장 헷갈리는 이유

표준 cron에서는 "일" 필드와 "요일" 필드 둘 다 동시에 별표가 아닌 값으로 설정할 수 있습니다 — 이 경우 두 조건 중 적어도 하나라도 맞으면 작업이 실행됩니다(논리 AND가 아니라 OR). 이는 대부분의 사람들의 직관적인 기대와 어긋납니다.

같은 문법이 쿠버네티스 CronJob에도 그대로

유닉스에서 처음 등장한 지 반세기가 지난 지금도, 국내 게임·IT 기업들이 클라우드 네이티브 인프라로 널리 도입한 쿠버네티스의 CronJob 오브젝트는 정확히 같은 5필드 문법을 사용합니다. CronJob 매니페스트에 적힌 0 3 * * *라는 일정은 1980년대 유닉스 crontab에서와 정확히 같은 의미입니다.

왜 필요한가

  • 서버 설정이나 CI/CD 파이프라인에서 다른 사람의 cron 표현식을 해독하기.
  • 작성한 일정을 프로덕션에 배포하기 전에 올바른지 확인하기.
  • 작업의 다음 몇 번의 실행 시각을 정확히 계획하기.

서머타임 전환과 cron

스케줄러가 서머타임을 사용하는 시간대에서 동작하는 경우, 존재하지 않는 시각(예: 시계를 앞으로 돌리는 밤의 2:30)으로 예약된 작업은 그날 실행되지 않을 수 있고, 시계를 뒤로 돌릴 때 반복되는 시각으로 예약된 작업은 두 번 실행될 수 있습니다. 한국은 현재 서머타임을 사용하지 않아 국내에서는 이 문제가 발생하지 않지만, 해외 서버와 연동하는 시스템에서는 여전히 주의가 필요하며, 중요한 작업은 대개 전환이 일어나는 시간대를 피해서(예: 자정이나 새벽 3-4시) 예약하거나 명시적으로 UTC 시간대를 사용합니다.

도구 사용해보기