주말에 만든 도구는 화요일에 부서진다
주말 6시간 만에 만든 내부 도구가 운영에서 어떻게 무너졌는가.
토요일 오후. 동료의 슬랙 메시지 — “그래프 자동으로 그려주는 거 있으면 좋겠다.” 운영 메트릭 (Postgres 의 daily snapshot) 을 받아서 단순 라인 차트를 그려 슬랙에 매주 게시하는 도구.
그날 오후 6시간 만에 끝. FastAPI + matplotlib + APScheduler. “내일 점심 전에 데모 보여줄게.”
일요일 — 잘 돌아간다
make test 통과. cron 으로 매주 월요일 9시에 슬랙에 그래프가 올라가게 셋업.
화요일 — 그래프가 없다
월요일 9시에 그래프가 안 올라왔다. 슬랙 채널이 조용해서 못 알아봤고, 화요일 오후에 동료가 물어서 알았다.
원인:
APScheduler의 BackgroundScheduler 가 FastAPI 의 main thread 와 분리되어 있었는데, uvicorn--reload옵션이 꺼져 있으면 worker 가 죽을 때 BackgroundScheduler 도 같이 죽는다. systemd 의Restart=on-failure가 FastAPI 만 재시작하니, scheduler 가 사라진 상태로 워커만 다시 떴다.- 단순 cron 으로
python plot.py한 줄 부르는 게 더 단단하다. 그런데 “FastAPI 안에 두면 깔끔해 보여서” 한 번에 묶었다.
고친 것
APScheduler제거. systemd timer + 단순 Python 스크립트 두 줄로 분리.- 슬랙 게시 실패 시 텔레그램으로 알람 한 통.
다음에는 다르게 할 한 가지
스케줄링은 OS 에 맡긴다. systemd timer, cron — 50년 검증된 도구가 항상 in-process scheduler 보다 단단하다. “한 프로세스 안에 다 들어있어서 깔끔” 이 함정의 문구.
🛒 이 글과 어울리는 추천 상품
위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.