← 모든 글

주말에 만든 도구는 화요일에 부서진다

주말 6시간 만에 만든 내부 도구가 운영에서 어떻게 무너졌는가.

토요일 오후. 동료의 슬랙 메시지 — “그래프 자동으로 그려주는 거 있으면 좋겠다.” 운영 메트릭 (Postgres 의 daily snapshot) 을 받아서 단순 라인 차트를 그려 슬랙에 매주 게시하는 도구.

그날 오후 6시간 만에 끝. FastAPI + matplotlib + APScheduler. “내일 점심 전에 데모 보여줄게.”

일요일 — 잘 돌아간다

make test 통과. cron 으로 매주 월요일 9시에 슬랙에 그래프가 올라가게 셋업.

화요일 — 그래프가 없다

월요일 9시에 그래프가 안 올라왔다. 슬랙 채널이 조용해서 못 알아봤고, 화요일 오후에 동료가 물어서 알았다.

원인:

  1. APScheduler 의 BackgroundScheduler 가 FastAPI 의 main thread 와 분리되어 있었는데, uvicorn --reload 옵션이 꺼져 있으면 worker 가 죽을 때 BackgroundScheduler 도 같이 죽는다. systemd 의 Restart=on-failure 가 FastAPI 만 재시작하니, scheduler 가 사라진 상태로 워커만 다시 떴다.
  2. 단순 cron 으로 python plot.py 한 줄 부르는 게 더 단단하다. 그런데 “FastAPI 안에 두면 깔끔해 보여서” 한 번에 묶었다.

고친 것

  • APScheduler 제거. systemd timer + 단순 Python 스크립트 두 줄로 분리.
  • 슬랙 게시 실패 시 텔레그램으로 알람 한 통.

다음에는 다르게 할 한 가지

스케줄링은 OS 에 맡긴다. systemd timer, cron — 50년 검증된 도구가 항상 in-process scheduler 보다 단단하다. “한 프로세스 안에 다 들어있어서 깔끔” 이 함정의 문구.


🛒 이 글과 어울리는 추천 상품

위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.