서버 UTC vs 로컬 시간, TZ 지정
cron 표현식 자체에는 시간대 정보가 없습니다. 표현식이 가리키는 시각은 cron이 동작하는 시스템의 시간대를 따릅니다. 그래서 같은 0 9 * * *라도 서버 시간대가 무엇이냐에 따라 실제 실행 시각이 달라집니다.
많은 서버·컨테이너는 기본 시간대가 UTC입니다. 한국(KST)은 UTC+9이므로, UTC 서버에서 0 0 * * *(자정)로 예약하면 실제로는 한국 시간 오전 9시에 실행됩니다. 로컬 시간으로 생각하고 예약했다가 9시간 어긋나는 경우가 매우 흔합니다.
일부 cron 구현은 crontab 상단에 CRON_TZ=Asia/Seoul 같은 줄을 두어 특정 시간대로 해석하게 할 수 있습니다. 컨테이너 환경이라면 이미지의 TZ 환경변수나 /etc/localtime을 원하는 지역으로 맞추는 방법도 씁니다. 다만 지원 여부는 구현마다 다르니 확인이 필요합니다.
서머타임(DST)이 있는 지역에서는 시계가 앞뒤로 바뀌는 날 특정 시각이 건너뛰어지거나 두 번 나타날 수 있어, 그 시간대에 예약한 작업이 누락되거나 중복될 수 있습니다. 중요한 작업은 UTC 기준으로 예약하면 이런 문제를 피할 수 있습니다.
실무 팁: 표현식은 UTC로 사고하고, 배포 환경의 실제 시간대를 반드시 확인하세요. 참고로 이 사이트의 도구가 보여 주는 다음 실행 시각은 여러분의 브라우저 로컬 시간대 기준이므로, 서버 시간대와 비교해 참고하면 됩니다.