상태는 보이는데 사건은 안 보였습니다
저는 봇 여러 개를 혼자 돌립니다. 이 봇들을 지켜보는 장치가 두 가지 있습니다. 하나는 현재 상태를 한 화면에 모아 보여 주는 대시보드입니다. 다른 하나는 조건이 맞으면 텔레그램으로 메시지를 보내는 알림 스크립트 두 개입니다. 한 스크립트는 게이트가 발동할 때 알리고, 다른 스크립트는 봇이 고장 났을 때 알립니다.
두 장치 모두 각자 할 일은 했습니다. 문제는 서로 연결되어 있지 않았다는 점입니다. 알림 스크립트는 메시지를 보내고 나면 아무것도 남기지 않았습니다. 그래서 "최근에 무엇이 울렸지?"를 확인하려면 대시보드가 아니라 텔레그램 대화창을 위로 스크롤해야 했습니다.
대시보드는 지금 상태만 알려 줍니다. 지나간 사건은 알려 주지 않습니다. 지금 초록불이라는 건 지금 괜찮다는 뜻일 뿐, 그 사이에 아무 일도 없었다는 뜻은 아닙니다.
당신의 모니터링 화면은 지난 몇 시간 동안 어떤 알림이 울렸는지 답할 수 있습니까, 아니면 그 답이 메신저 기록에만 있습니까?
왜 이게 함정인가
알림 채널과 대시보드를 따로 만들면 자연스럽게 이렇게 됩니다. 알림은 '보내기'로 끝나는 기능이라서 보낸 뒤에 기록을 남길 이유가 코드 안에 없습니다. 대시보드는 '현재 값 읽기'로 만들어지기 때문에 과거 이벤트를 읽을 곳이 처음부터 없습니다.
그 결과 알림 이력은 외부 메신저 하나에만 남습니다. 대화창은 검색하기도, 다른 화면과 나란히 놓고 보기도 어렵습니다. 게이트 발동과 봇 고장이 한 대화창에 섞여 있으면 둘을 구분하는 것도 사람이 해야 합니다.
당신이라면? 대시보드가 텔레그램을 읽게 하시겠습니까, 아니면 알림을 보내는 쪽이 직접 기록을 남기게 하시겠습니까?
고친 방법: 보낼 때 한 줄 남기기
저는 보내는 쪽에서 기록하는 방법을 골랐습니다. 두 알림 스크립트가 메시지를 보낼 때 같은 JSONL 파일에 한 줄씩 덧붙이게 했습니다. 한 줄에는 세 가지만 들어갑니다.
- 타임스탬프
- 종류(게이트 발동인지, 봇 고장인지)
- 보낸 메시지 본문
대시보드는 이 파일에서 가장 최근 15개를 읽어 세 번째 섹션으로 그립니다. 종류마다 아이콘이 다릅니다. 게이트 발동은 🤖, 봇 고장은 ⚠️입니다. 이제 알림 흐름이 텔레그램에만 있지 않고 대시보드에도 보입니다.
변경 규모는 작습니다. 파일 세 개에서 41줄이 추가되고 1줄이 지워졌습니다. 고장 이벤트를 보내는 스크립트는 한 줄만 바뀌었고, 게이트 감시 스크립트에 13줄, 대시보드에 28줄이 들어갔습니다. 새 서비스나 데이터베이스는 없습니다. 추가 전용 텍스트 파일 하나로 끝났습니다.
자가진단 체크리스트
- 대시보드에서 메신저를 열지 않고도 최근 알림 목록을 볼 수 있습니까?
- 알림을 보내는 코드가 보낸 사실을 메신저가 아닌 곳에도 남깁니까?
- 서로 다른 종류의 알림(판단 발동과 시스템 고장)이 기록에서 구분됩니까?
솔직한 부분
이 변경이 실제로 놓친 알림을 찾아냈다거나 대응을 빠르게 했다는 근거는 아직 없습니다. 커밋에는 기능 추가만 있고 효과는 측정하지 않았습니다. 최근 15개라는 개수에도 근거가 없어서, 알림이 몰리는 날에는 부족할 수 있습니다. 기록은 '보낼 때' 남기도록 했는데, 전송이 실패했을 때도 기록이 남는지는 커밋 메시지만으로는 확인할 수 없습니다. 파일을 얼마 동안 보관하고 언제 정리할지도 커밋에는 언급이 없습니다. 결국 이번 수정으로 알림이 보이게 됐을 뿐, 알림이 맞는지까지 보장하는 것은 아닙니다.