예약 알림이 한 번만 와야 하는데 비슷한 문구가 짧은 간격으로 반복되면, 사용자는 중요한 알림도 스팸처럼 느끼기 쉽다. 이 문제는 대부분 “스케줄은 정상인데 중복 트리거가 겹친 상태”에서 생긴다. 핵심은 알림 문구를 바꾸는 게 아니라, 실행 경로를 1개로 고정하고 기록 키(task-key)를 일관되게 쓰는 것이다.
먼저 1분 점검: 어디서 중복이 생기나
중복 발송은 보통 아래 세 가지 중 하나다.
- 같은 리마인더가 서로 다른 스케줄러(예: cron + heartbeat)에서 동시에 호출됨
- 완료 로그는 남기지 않고 “상태확인”만 반복되어 재실행 조건이 계속 참으로 남음
- 같은 작업인데 task-key 표기가 달라 중복 차단 로직이 작동하지 않음
flowchart LR A[리마인더 수신] --> B{우선순위 게이트} B -->|직접요청| C[요청 처리 후 루틴 재개] B -->|cron| D[cron payload 처리] B -->|루틴| E[오늘 계획 점검] E --> F{동일 task-key 실행완료 존재?} F -->|Yes| G[재실행 금지, update-only 로그] F -->|No| H[시작 알림 -> 실행 -> 완료 로그]
칠판 치트시트 (현장용)
- 먼저
우선순위체크를 로그에 남긴다task-key=날짜|시간|작업명을 고정 포맷으로 만든다- 같은 key의
[실행완료]가 있으면 재실행하지 않는다- 추가 작업은
[업데이트]로그로만 기록한다- 사용자 알림은 “시작 → 실행 → 완료” 순서를 지킨다
바로 적용 순서 (누가/무엇을/어떤 순서)
운영자 기준으로 아래 순서를 그대로 적용하면 된다.
-
중복 여부 확인
memory/YYYY-MM-DD.md에서 동일task-key검색[실행완료]가 이미 있으면 본 작업은 중단
-
실행 경로 단일화
- 현재 턴의 선택값을
직접요청|cron|루틴중 하나로 명시 - 서로 다른 경로에서 같은 작업을 동시에 실행하지 않음
- 현재 턴의 선택값을
-
사용자 알림 순서 고정
- 시작 알림:
🟢 HH:MM | 작업명 시작 - 실행
- 완료 알림:
✅ 작업명 완료 | 결과 요약
- 시작 알림:
-
로그 마감
- 최초 완료만
[실행완료] - 같은 key의 후속 수정은
[업데이트]로 기록
- 최초 완료만
미니 사례 2개
사례 A) 15분마다 같은 점검 문구가 반복된 경우
- 원인: heartbeat 수신을 모두 “직접요청”으로만 기록하고, 실제 실행 대상 판정을 건너뜀
- 조치: 우선순위 로그는 유지하되, Step2에서 도래 과업만 실행하도록 분기 추가
- 결과: 반복 응답 감소, 실제 작업 시간대(14:00/16:00)에만 실행
사례 B) 같은 14:00 작업이 두 번 완료 처리된 경우
- 원인:
task-key에 작업명 띄어쓰기/표기 차이가 생겨 다른 key로 인식됨 - 조치:
YYYY-MM-DD|HH:MM|작업명포맷 고정 + 복붙 사용 - 결과: 중복 완료 0건 유지
자주 하는 실수
- “오늘 계획” 체크박스를 완료 처리하지 않고 로그만 남기는 실수
- 완료 후에도 같은 문구로 시작 알림을 다시 보내는 실수
실행완료와업데이트를 구분하지 않아 추적이 어려워지는 실수
실무에서는 화려한 자동화보다 중복 차단 규칙 2~3개를 정확히 지키는 것이 훨씬 효과적이다.
다음에 같이 보면 좋은 글
- 🦞 31. Quota 리셋 안됨 해결
- 🦞 32. HEARTBEAT_OK 반복응답 해결
- 🦞 33. gateway 무응답 복구
- 🦞 34. 세션툴 블로그 검수 자동화
- 🦞 30. 텔레그램 운영 가이드
- 🦞 29. 텔레그램 권한 변화 대응
- 🦞 28. 듀얼 릴레이 운영
- 🦞 25. 크론·서브에이전트 분산운영
- 🦞 20. 운영 아키텍처 규칙총정리
- 🦞 18. 텔레그램 연결끊김 복구
- 🚀 OpenClaw 인덱스
※ 이 문서는 생성형 AI를 활용해 작성되었습니다.