자동화 slecs

로또 봇 매칭 조용한 실패, 누락 import 추가로 정상화

목차

로또 봇이 슬쩍 조용히 매칭을 포기하고 있었다.


배경: 이전 fix가 반만 고쳤다

얼마 전에 data_source 관련 import 누락으로 한 번 픽스를 넣은 적이 있다. 그때 수정한 건 특정 경로였는데, 문제는 lotto 모듈 쪽에서도 같은 admin_db를 참조하는 흐름이 있었다는 것. 그쪽엔 data_source import 가 아예 박혀 있지 않은 상태로 남아 있었고, 결과적으로 매칭 로직이 조용히 실패하고 있었다.

이런 류의 버그가 특히 골치 아픈 이유는 명시적인 에러가 터지지 않는 경우가 많기 때문이다. import 누락이 NameError 같은 즉각적인 예외로 터지면 오히려 발견이 빠른데, 매칭 실패처럼 "그냥 결과가 없음"으로 처리되는 흐름에서는 봇이 아무 말 없이 빈 결과를 뱉고 끝낸다. 로그만 봐도 성공처럼 보일 수 있어서 운영 중엔 쉽게 놓친다.


뭘 고쳤나

bot/generate.pyadmin_db import 구문을 추가했다. 변경 자체는 핀포인트 수정이다.

# before
from data_source import some_module
# admin_db 는 없음 → lotto 매칭 실패

# after
from data_source import some_module
from admin_db import ...  # 추가

코드 한두 줄짜리 수정이지만, 이 한 줄이 없어서 lotto 봇이 매칭 단계에서 조용히 무너지고 있었던 거다.

항목 이전 상태 수정 후
data_source import 일부 경로만 포함 동일
admin_db import 누락 추가
lotto 매칭 결과 조용한 실패 (빈 결과) 정상 매칭
에러 가시성 없음 (무증상) 수정으로 해소

회고: "이전 fix" 가 불완전했다는 걸 어떻게 잡았나

솔직히 이게 더 중요한 포인트다. 이번 커밋 메시지에도 "이전 fix 는 data_source import 안 박힌 lotto 에서 매칭 실패"라고 직접 명시해 뒀는데, 이건 이전 수정이 공통 의존성을 한 곳만 보고 끝냈다는 문제에서 비롯됐다.

자동화 봇처럼 여러 모듈이 동일한 DB 접근 레이어를 공유하는 구조에서는, 특정 import 하나가 여러 파일에 걸쳐 필요한 경우가 많다. 한 파일에서 import 를 고쳤다고 해서 같은 의존성을 쓰는 다른 파일이 자동으로 해결되는 게 아니라는 걸, 이번 케이스가 다시 상기시켜 준다.

앞으로 비슷한 import 관련 픽스를 낼 때 체크할 것들:

  • 수정한 import 가 다른 파일에서도 동일하게 참조되는지 grep 으로 전체 확인
  • 봇/자동화 모듈처럼 묵시적 실패가 발생할 수 있는 구조라면 매칭 결과가 비어 있을 때도 알림/로그를 남기는 방어 로직 고려
  • "이전 fix 의 파생 케이스" 는 PR 설명에 명시해서 리뷰어가 연관 범위를 같이 볼 수 있게 할 것

팀원들한테도 코드리뷰 때 자주 하는 말인데, import 누락 버그는 타입 체커나 린터로 사전에 잡을 수 있는 부분이 많다. pyflakes, ruff 같은 도구를 CI 에 걸어두면 이 정도 누락은 머지 전에 걸린다. 자동화 봇 프로젝트라면 더더욱 도입할 만하다.


작은 import 한 줄이지만, 이전 fix 의 불완전함을 인정하고 정확히 어디가 빠졌는지 커밋 메시지에 남긴 게 나름 잘한 일이라고 생각한다. 이런 맥락 기록이 나중에 같은 실수를 반복하지 않게 해준다.

끝.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.