Iris 봇에는 방 관리자가 명령어로 켜고 끌 수 있는 정기 자동발송 기능이 있습니다. 일정 간격으로 짧은 이모티콘 메시지를 자동으로 전송하는 단순한 기능인데, 실제 운영 환경에서는 생각보다 까다로운 문제가 있었습니다.
증상: 설정해도 며칠 지나면 꺼져 있다
관리자가 명령어로 자동발송을 켜두면 잘 동작합니다. 문제는 시간이 좀 지나고 나서 확인하면 어느새 다시 꺼져 있는 경우가 반복된다는 점이었습니다. 관리자가 실수로 끈 것도 아니고, 딱히 에러 로그가 남는 것도 아니어서 처음엔 원인을 특정하기 어려웠습니다.

원인: 봇이 하루에도 몇 번씩 재시작된다
원인은 자동발송 기능 자체가 아니라, 그 상태를 저장하는 방식에 있었습니다. “이 방은 자동발송이 켜져 있다"는 상태를 메모리에만 들고 있었던 것입니다. 그런데 이 시리즈 앞부분에서 다룬 것처럼, 이 환경에서는 안드로이드 시스템에 의해 Termux 프로세스가 예고 없이 죽는 일이 흔하고, 봇 자체도 여러 이유로 하루에도 몇 번씩 재시작됩니다. 프로세스가 재시작되면 메모리에 있던 모든 상태는 당연히 초기화되고, “켜져 있던” 자동발송 설정도 조용히 사라졌습니다. 관리자 입장에서는 아무것도 하지 않았는데 기능이 꺼져 있는 것처럼 보였던 이유가 이것이었습니다.
해결: DB에 상태 저장 + 부팅 시 자동 재개
해결 방법은 단순하지만 확실했습니다. 자동발송 on/off 상태를 메모리가 아니라 DB에 저장하도록 바꾸고, 봇이 시작될 때(재시작 포함) DB를 읽어서 이전에 켜져 있던 방들의 자동발송을 자동으로 다시 스케줄링하도록 만들었습니다. 이렇게 바꾼 뒤로는 봇이 몇 번을 재시작하든 관리자가 설정해둔 상태가 그대로 유지됐습니다.
돌아보며
이 문제는 사실 “휘발성 메모리에 상태를 두면 프로세스가 죽을 때 사라진다"는 아주 기본적인 원칙을 놓친 사례였습니다. 다만 이 환경(하루에도 몇 번씩 재시작되는 불안정한 백그라운드 프로세스)에서는 이런 종류의 문제가 훨씬 더 자주, 더 눈에 띄게 드러난다는 걸 체감했습니다. 이후로는 “관리자가 명시적으로 설정한 값"은 전부 예외 없이 DB에 저장하고, 시작 시점에 그 값을 복원하는 것을 기본 원칙으로 삼았습니다.

🤖 이 포스팅은 AI의 도움을 받아 작성되었습니다.


💬 댓글