サーバー UTC vs ローカル時間、TZ の指定
cron 式そのものにはタイムゾーン情報がありません。式が指す時刻は cron が動作するシステムのタイムゾーンに従います。そのため、同じ 0 9 * * * でも、サーバーのタイムゾーンが何かによって実際の実行時刻が変わります。
多くのサーバー・コンテナは既定のタイムゾーンが UTC です。韓国(KST)は UTC+9 なので、UTC サーバーで 0 0 * * *(0時)に予約すると、実際には韓国時間の午前9時に実行されます。ローカル時間のつもりで予約して9時間ずれてしまうケースが非常によくあります。
一部の cron 実装では、crontab の先頭に CRON_TZ=Asia/Seoul のような行を置いて特定のタイムゾーンで解釈させることができます。コンテナ環境であれば、イメージの TZ 環境変数や /etc/localtime を目的の地域に合わせる方法も使います。ただし対応の可否は実装ごとに異なるため、確認が必要です。
サマータイム(DST)がある地域では、時計が前後にずれる日に特定の時刻がスキップされたり2回現れたりすることがあり、その時間帯に予約した作業が欠落したり重複したりする可能性があります。重要な作業は UTC を基準に予約すれば、こうした問題を避けられます。
実務のヒント: 式は UTC で考え、デプロイ環境の実際のタイムゾーンを必ず確認してください。参考として、このサイトのツールが表示する次回の実行時刻はあなたのブラウザのローカルタイムゾーン基準なので、サーバーのタイムゾーンと比較して参考にすればよいでしょう。