이 글에는 제휴 링크가 없습니다. 삽화는 GPT 이미지 생성, 도식은 직접 제작했습니다.
자동화 건강검진이란 — 매일 초록불이던 공장에서 멈춘 소포 넷을 찾은 이야기
택배 물류센터를 상상해 보세요. 컨베이어는 잘 돌고, 출구의 검수원은 지나가는 소포마다 손을 흔들고, 저녁 보고서에는 매일 “이상 없음”이 찍힙니다. 그런데 벨트 옆 보조 트랙에 소포 하나가 열흘째 놓여 있어요. 거미줄까지 쳤습니다. 검수원이 게을렀던 게 아닙니다. 그 소포는 검수원 앞을 지나간 적이 없으니까요.
이번 달 제 블로그의 자동 발행 큐에서 정확히 이 일이 있었습니다. 매일 아침 릴리스는 12일 내내 정상 종료했고, 그 아래에서 글 넷이 멈춰 있었어요. 넷 다 실패 로그가 없었고, 넷 다 제가 “어, 이거 왜 아직도 안 올라갔지?” 하고 열어 봐서 찾았습니다. 지난 글에서 “AI가 짠 자동화는 오류 대신 빈 상자를 보낸다”고 썼는데, 이번엔 그보다 한 겹 더 조용한 형태였어요. 빈 상자조차 안 오는 경우입니다.

결론 요약
- 자동화가 멈추는 가장 흔한 형태는 오류가 아니라 “해당 없음”입니다. 후보에서 빠지거나, 이미 끝난 것으로 셈해지거나, 정상 분기로 건너뛰어집니다. 로그는 초록불이에요
- 그래서 실행 로그를 보는 것으로는 못 잡습니다. “실패도 성공도 아닌 상태”를 세는 별도 점검이 필요합니다
- 제 경우 여섯 항목을 매일 릴리스 직후 스크립트로 봅니다 — 예약일 없음, 기한 초과, 대본 없음, 카드 없음, 릴스 누락, 로그인 계정. 보고서는 파일 한 장, 0건이어도 남깁니다
🔍 1. 멈춰 있던 넷 — 9월 6일부터 17일까지
| 무엇이 | 얼마나 | 왜 조용했나 |
|---|---|---|
| 인스타 게시 2건 | 10일 대기 | 예약일 칸이 비어 있었다. 릴리스는 “오늘이 예약일인 것”만 보니 후보에 오른 적이 없다 |
| 네이버 글 1건 | 12일 건너뜀 | 대본이 옛 형식 파일(naver.md)로 있었다. 새 형식(naver.yml)이 없으면 “대본 없음”으로 정상 건너뜀 |
| 사이트 글 1건 | 매일 재계산 | 배포는 됐는데 발행 기록을 안 남겼다. 매일 “아직 안 올라간 글”로 다시 세어지고, 다시 배포되고, 여전히 기록은 없었다 |
| 네이버 글 1건 (다른 블로그) | 3번 실패 | 자동화 브라우저가 다른 블로그 계정으로 로그인돼 있었다. 이건 로그에 실패가 남았지만, 아무도 그 로그를 읽지 않았다 |
세 번째가 제일 오래 저를 헷갈리게 했습니다. 큐 대시보드에는 “대기 중”인데 사이트에는 이미 올라와 있고, 다음 날도 같은 상태. 배포 스크립트는 매일 성공했으니 실패가 없었고, 기록 스크립트는 애초에 사이트 채널을 기록하도록 만들어지지 않았던 겁니다. “됐다”와 “됐다고 적었다”는 다른 일이더라고요.

🧩 2. 왜 로그에 안 나오나 — 큐가 후보를 고르는 방식
릴리스 스크립트는 매일 아침 이렇게 후보를 고릅니다. 예약일이 오늘이거나 지났고, 그 채널에 아직 발행 기록이 없고, 대본이 있는 글. 세 조건을 다 만족해야 후보예요. 넷을 이 조건에 대 보면 왜 조용했는지 바로 보입니다.
- 예약일이 비어 있으면 첫 조건에서 탈락합니다. 후보가 아니니 시도도 실패도 없어요
- 대본이 없으면 세 번째 조건에서 정상 건너뜀입니다. 코드 입장에선 “아직 준비 안 된 글”이라 오류가 아닙니다
- 기록이 없으면 두 번째 조건을 매일 통과합니다. 그래서 매일 다시 배포되고 매일 성공합니다
- 계정이 다르면 시도는 하고 실패는 합니다. 유일하게 로그에 남은 경우인데, 로그는 파일에 쌓일 뿐 아무도 안 열었어요
지난 글의 대비법 세 번째가 “실패한 건 다음 실행에서 다시 잡게 하라”였습니다. 그건 지켰어요. 그런데 실패조차 하지 않는 항목은 그 규칙이 못 잡습니다. 후보에 오르지 못한 소포는 재시도 대상도 아니니까요.

🩺 3. 큐 닥터 — 릴리스 직후 여섯 가지를 본다
그래서 9월 17일부터 릴리스 스크립트 바로 뒤에 점검 스크립트를 하나 붙였습니다. 이름은 큐 닥터. 아침 6시 자동 실행 파일의 핵심은 두 줄이에요.
.venv\Scripts\python.exe automations\publish\release_queue.py >> dashboards\daily-release.log
.venv\Scripts\python.exe automations\publish\queue_doctor.py --deep >> dashboards\daily-release.log
닥터가 보는 여섯 항목은 넷의 사고에서 그대로 나왔습니다.
| # | 점검 | 어떤 사고에서 왔나 |
|---|---|---|
| 1 | 예약일 없음 — 채널 목록에는 있는데 발행 기록에도 예약에도 없다 | 인스타 2건 |
| 2 | 기한 초과 — 예약일이 지났는데 미발행. 이틀 이상이면 실패가 반복되는 중 | 계정 불일치로 3번 실패한 건 |
| 3 | 대본 없음 — 네이버 채널인데 새 형식 대본 파일이 없다 (옛 형식만 있는 경우 포함) | 네이버 12일 |
| 4 | 카드 없음 — 인스타 채널인데 카드뉴스 캡션 파일이 없다 (릴리스가 건너뛴다) | 같은 유형의 예방 |
| 5 | 릴스 누락 — 인스타 채널인데 영상은 있고 릴스 파일이 없다 (경고) | “영상이 있으면 릴스로” 규칙이 조용히 잊히는 것 방지 |
| 6 | 로그인 계정 — 자동화 브라우저 두 개에 각각 맞는 블로그 계정이 로그인돼 있는가 | 엉뚱한 계정 3번 실패 |
사이트 기록 누락(세 번째 사고)은 점검 항목이 아니라 릴리스 쪽을 고쳐서 막았습니다. 배포가 성공했을 때만 공개 주소와 함께 기록을 남기게요. 닥터는 그 기록이 없으면 2번 항목으로 잡습니다.
결과는 dashboards/queue-doctor.md 한 장으로 남고, 조치가 필요한 항목이 있으면 종료 코드 1로 끝나서 로그에 표시됩니다. 여섯 번째 항목은 실제로 브라우저를 열어 블로그 첫 화면으로 가 보고 어느 계정인지 확인하는 방식이라, --deep 옵션일 때만 돕니다.
📋 4. 오늘 아침 보고서
9월 21일 6시 보고서의 첫 줄입니다.
조치 필요 0건 · 경고 0건 · 정상 대기 60건 — 멈춘 항목 없음. 큐에 남은 것은 전부 예정일이 오늘 이후다.
그 아래에 예정일·글·채널 표가 60줄 이어집니다. 9월 22일 인스타 2건과 네이버 2건, 23일…, 10월 중순까지요. 0건이어도 씁니다. “안 봤다”와 “봤는데 없었다”를 구분하려면 없었다는 기록이 있어야 하니까요.

💡 5. 원칙 셋 — 어떤 자동화에든 옮길 수 있는 것
- “해당 없음”을 세세요. 실행 로그는 시도한 것만 보여줍니다. 시도되지 않은 것 — 날짜가 빈 항목, 필요한 파일이 없는 항목, 결과는 있는데 기록이 없는 항목 — 은 목록을 처음부터 훑어야 보입니다
- 점검은 실행 직후, 같은 스케줄에 붙이세요. 따로 돌리면 잊습니다. 릴리스 다음 줄에 있으면 잊을 수가 없어요
- 보고서는 사람이 읽는 파일로, 0건도 남기세요. 그리고 사고가 날 때마다 항목을 하나 추가하세요. 여섯 항목은 설계한 게 아니라 사고 넷이 만든 겁니다
⚠️ 6. 한계 — 닥터도 코드입니다
- 닥터는 닥터가 아는 형태만 잡습니다. 다음 사고는 여섯 항목 중 어디에도 없는 모양일 가능성이 높아요. 그때 일곱 번째 항목이 생깁니다
- 여섯 번째(로그인 계정)는 자동화 브라우저가 떠 있어야 봅니다. 브라우저가 꺼져 있으면 “확인 불가”로 적고 넘어가요
- 점검이 “이상 없음”이라고 해서 글이 좋다는 뜻은 아닙니다. 닥터는 큐의 상태만 봅니다 — 내용 검증은 별개의 세트예요
🎯 시작 코스 — 내 자동화에 청진기 대기
- 자동화가 다루는 항목 목록을 처음부터 끝까지 출력해 봅니다 (큐, 예약, 대기열, 뭐든)
- 각 항목에 대해 세 질문: 날짜가 있나? 필요한 재료 파일이 다 있나? 끝났으면 끝났다는 기록이 있나?
- 셋 중 하나라도 “아니오”인 항목을 세는 스크립트를 씁니다. AI에게 “이 목록에서 날짜가 비었거나 파일이 없거나 결과가 있는데 기록이 없는 항목을 찾아 표로 만들어줘”라고 시키면 초안은 금방 나옵니다
- 실행 스크립트 바로 다음 줄에 붙입니다
- 결과를 파일 한 장에 씁니다. 0건이어도요. 사고가 나면 그 사고의 모양을 항목으로 추가합니다
물류센터의 검수원은 잘못이 없었습니다. 잘못은 검수원 앞을 지나지 않는 트랙이 있다는 걸 아무도 몰랐던 것이에요. 건강검진은 그 트랙을 매일 아침 한 번 걸어 보는 일입니다.
기준: 2026-09-21. 네 건의 멈춤과 기간은 저장소 커밋(9/16~17 “queue: unstick the three items that had no scheduled date”, “playwright post: record the site publication that was never written down”, “bucket dolly: naver ddakman published after three failed queue attempts”)과 점검 스크립트의 기록 기준입니다. 여섯 항목과 아침 6시 실행 파일은 실제 파일에서 발췌했고, 보고서 문장은 이날 생성된 dashboards/queue-doctor.md 첫 줄입니다. 삽화는 GPT 이미지 생성, 도식은 직접 제작했습니다.