cron 시간대 사건 — 한 번 만나면 잊지 않는다
UTC/KST 혼선 하나가 새벽 배치를 8시간 어긋나게 만든 사건과 그 뒤처리.
사건
- 배치 서버를 AWS ap-northeast-2 로 이전한 날 밤.
- 기존 cron:
0 1 * * *— 팀 모두 “새벽 1시” 라고 알고 있었다. - 이전 전 서버는 로컬 타임존이 KST. 이전 후 서버는 기본값 UTC.
- 결과: 배치가 KST 오전 10시에 돌았다. 정산 데이터가 업무 시간 한복판에 덮어씌워졌다.
- 감지까지 40분. 롤백까지 20분. 총 피해: 당일 오전 집계 보고서 전면 재작성.
팀원 누구도 cron 표현식 옆에 타임존을 적지 않았다. “당연히 KST겠지” 라는 묵시적 가정이 이전 체크리스트에서도 빠졌다.
교훈
- cron 에 타임존을 명시하지 않으면 그 값은 무의미하다.
- systemd timer:
OnCalendar=+[Timer] TimezoneName=Asia/Seoul - Kubernetes CronJob:
spec.timeZone: "Asia/Seoul"(1.27+) - 그 외: 래퍼 스크립트 상단에
TZ=UTC고정, 표현식은 UTC 기준으로만 작성.
- systemd timer:
- 이전 체크리스트에 “타임존 명시 여부 확인” 항목 추가. 선택이 아니라 블로커.
- 사건 직후 전체 cron/timer 목록 감사. 암묵적 KST 가정이 3개 더 발견됐다. 그날 전부 UTC 명시로 변환.
- 모니터링: 배치 완료 시각을 로그에 UTC ISO 8601 로 남기고, 허용 창을 벗어나면 알림. 시각 자체를 검증 대상으로.
한 번 겪으면 이후로는 cron 한 줄 쓸 때마다 반사적으로 타임존을 확인하게 된다. 몸이 먼저 반응한다.
다음 한 가지
다음 글에서 “이전 체크리스트에 타임존 항목을 실제로 추가했나” 한 줄 확인하고 시작한다.
🛒 이 글과 어울리는 추천 상품
위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.