자동화 감시를 켜는 순서: 등록 확인 먼저, 알림은 나중에

혼자 돌리는 자동화가 조용히 멈추면 어떻게 알까요
1인 개발을 하다 보면 사람이 매번 보지 않아도 도는 작업이 늘어나요. 초안 생성, 측정, 알림 발송처럼요. 문제는 이런 작업이 멈춰도 아무 소리가 나지 않는다는 점이에요. 에러가 나면 로그라도 남는데, 아예 실행되지 않으면 남는 게 없습니다.
최근 21일 동안 이 문제를 줄이려고 하네스·인프라 작업 5건과 랜딩 페이지 버그 수정 1건을 했어요. 이 글은 그중 감시(heartbeat)를 어떤 순서로 켰는지, 무엇에 막혔는지를 기록합니다.
1. heartbeat가 잡는 것과 못 잡는 것
heartbeat는 "이 작업이 최근에 성공했는가"를 따로 확인하는 감시예요. 작업이 성공할 때마다 마지막 성공 시각을 남기고, 그 시각이 너무 오래되면 알림을 보냅니다.
- 잡는 것: 예약 실행이 안 됨, 프로세스가 죽음, 실행은 되는데 계속 실패함
- 못 잡는 것: 성공으로 기록됐지만 결과물이 엉망인 경우
그래서 결과물 품질은 별도 검사로 보고, heartbeat는 "살아 있는가"만 맡기기로 했어요.
2. 감시는 등록을 확인한 뒤에 켭니다
처음엔 감시를 먼저 켜고 작업을 나중에 붙이면 된다고 생각했어요. 그런데 이렇게 하면 켜자마자 "오래 성공 기록 없음"으로 DOWN이 뜹니다. 아직 한 번도 돌지 않은 작업을 멈춘 작업으로 착각하는 거죠.
그래서 순서를 이렇게 바꿨어요.
- 예약 실행(macOS launchd) 등록이 실제로 되어 있는지 확인
- 작업이 한 번 돌아서 산출물이 실제로 생겼는지 확인
- 그다음에 감시를 켬
이번에 켠 감시는 자동 승인(auto-approve), 마케팅 측정(mkt-measure), 알림 발송함(notify-outbox)·백로그·블로그 리믹스 선택 작업이에요. 자동 승인 감시는 등록 확인 후 켰고, 초기 마커는 등록한 시각으로 잡았습니다. "아직 첫 실행 전"을 "고장"으로 읽지 않게 하려는 거예요. 측정 작업은 관련 변경이 적용된 것까지 확인한 뒤 켰어요.
3. 과거 에러 한 줄이 영구 DOWN을 만들던 문제
리믹스 원장(기록 파일)을 감시하다가 막혔어요. 감시가 파일에서 error 줄을 찾으면 DOWN으로 판정했는데, 예전에 한 번 남은 error 한 줄이 계속 남아 있어서 이후로 정상 실행이 이어져도 영원히 DOWN이었습니다.
고친 방법은 단순해요. error만 찾지 말고 success 패턴도 함께 보도록 했습니다. 판정 흐름을 개념만 옮기면 이렇습니다(실제 코드가 아니라 설명용이에요).
마지막 success 시각 = 원장에서 가장 최근 성공 줄
마지막 error 시각 = 원장에서 가장 최근 에러 줄
success가 error보다 최근이면 → 정상
그렇지 않으면 → DOWN
배운 점은 "에러가 있었다"와 "지금 고장났다"는 다른 말이라는 거예요. 로그는 누적되니까, 판정은 최신 상태 기준이어야 합니다.
4. 개발일지 초안에 구체 수치 2개 이상
자동으로 만드는 개발일지 초안이 그럴듯하지만 내용이 비어 보일 때가 있었어요. 그래서 초안에 사실 시트의 수치를 2개 이상 넣도록 게이트를 추가했습니다. 수치가 부족하면 초안이 통과하지 못해요.
이 기준은 제가 정한 규칙이고, 이게 글 품질을 실제로 올리는지는 아직 모릅니다. 발행 후 반응을 보면서 검증해보겠습니다. 이 글도 같은 기준을 따르려고 21일, 5건, 1건 같은 숫자를 작업 내역에서만 가져왔어요.
5. 작은 버그 하나
랜딩 페이지 테마 스크립트에 필요 없는 이름 보존 도우미 코드가 함께 들어가던 문제도 고쳤어요. 빌드 과정에서 딸려 들어온 코드였고, 불필요한 코드를 빼는 방향으로 정리했습니다.
정리: 만든 것 / 막힌 것 / 아직 모르는 것
- 만든 것: 등록·산출물 확인 후 감시를 켜는 순서, success 기준 판정, 초안 수치 게이트
- 막힌 것: 첫 실행 전 DOWN 오탐, 과거 error 한 줄로 인한 영구 DOWN
- 아직 모르는 것: 수치 게이트가 글 품질에 도움이 되는지, 감시 알림 빈도가 적당한지
혼자 자동화를 돌리고 계신다면, 작업이 멈췄다는 걸 어떻게 알아채고 계세요? 쓰시는 방법이 있다면 댓글로 알려주세요.