본문 바로가기
IT

파이썬 3.14 텔레그램 봇 오류 해결 — imghdr 모듈 없음, 이벤트 루프 에러 실전 후기

by Mindy.s 2026. 7. 18.
반응형

AWS 프리티어 무료 기간이 끝나간다는 안내를 받은 날, 처음 든 생각은 "코드만 옮기면 한두 시간이면 끝나겠지"였습니다. 결과적으로 그 예상은 완전히 빗나갔습니다. 파이썬 자동매매 서버를 맥미니로 옮기는 데 꼬박 서너 시간이 걸렸고, 그중 대부분은 텔레그램 알림 모듈 하나 때문에 날아갔습니다.

코드는 한 줄도 안 고쳐도 되는 줄 알았는데, 파이썬 3.14를 설치했다는 이유 하나로 알림 모듈을 통째로 다시 썼습니다. 검색해봐도 이 조합에 대한 한글 자료가 거의 없더군요. 그래서 잘 풀린 이야기보다 어디서 깨졌는지를 중심으로 남겨둡니다.

AWS 프리티어 종료, 자동매매 서버를 어디로 옮길까

2026년 2~3월부터 AWS 프리티어 EC2에서 파이썬 자동매매 봇을 돌리고 있었습니다. 무료 기간이 끝나면 비용이 발생하는 구조였고, 마침 3월에 서버 용도로 맥미니 M4 기본형을 사둔 상태였습니다.

바로 옮긴 건 아닙니다. 후보가 넷이었거든요.

후보 장점 걸림돌
회사 윈도우 노트북 (WSL) 추가 장비 필요 없음 회사 자산에 개인 투자용 프로그램을 올리는 부담
개인 리눅스북을 회사에 켜두기 리눅스 환경 그대로 장비를 회사에 두고 와야 함, 관리 불편
안 쓰는 갤럭시폰 전력 소모 가장 적음 환경 구성이 번거롭고 장기 운영이 불안
맥미니 M4 유닉스 계열이라 AWS와 환경이 비슷, 저전력, 내 장비 정전·절전 같은 물리적 변수를 직접 떠안음

결국 맥미니를 골랐습니다. 이유는 세 가지였습니다. AWS와 비슷한 환경이라 코드 수정이 적을 것 같았고, 회사와 아무 관계 없는 온전한 개인 장비였고, 24시간 켜둬도 부담 없는 저전력 기기였으니까요.

참고로 저는 전기요금을 따로 측정하지는 못했습니다. 다만 맥미니는 원래 다른 용도로도 늘 켜두던 기계라, 일을 하나 더 시킨다고 해서 추가 부담이 생기는 구조는 아니었습니다.

첫 번째 벽: 파이썬 3.14에서 imghdr 모듈을 못 찾습니다

새 기계니까 최신 버전을 쓰자는 생각으로 파이썬 3.14를 설치했습니다. 지금 돌아보면 여기가 모든 문제의 출발점이었습니다.

기존 봇을 실행하자마자 이런 에러가 떴습니다.

ModuleNotFoundError: No module named 'imghdr'

처음에는 제가 패키지를 잘못 설치한 줄 알고 한참을 뒤졌습니다. 지우고 다시 깔기를 몇 번 반복했는지 모르겠습니다.

원인은 제 코드가 아니었습니다. imghdr은 파이썬에 기본 포함돼 있던 모듈인데, 오래 방치된 모듈들을 정리하는 과정에서 파이썬 3.13부터 표준 라이브러리에서 제거됐습니다. 문제는 제가 쓰던 텔레그램 라이브러리가 내부적으로 이 모듈을 불러오고 있었다는 점입니다. 파이썬 쪽에서 없앤 걸 라이브러리가 계속 찾고 있으니 실행될 리가 없었죠.

정리하면 이렇습니다. 제 코드는 멀쩡했고, 라이브러리도 예전엔 멀쩡했고, 단지 파이썬 버전을 올린 것이 둘 사이를 갈라놓은 겁니다. 최신 버전이 항상 좋은 선택은 아니라는 걸 이때 배웠습니다.

참고: 표준 라이브러리에서 어떤 모듈이 제거됐는지는 파이썬 공식 문서(PEP 594)에서 확인할 수 있습니다.

두 번째 벽: 이벤트 루프 오류, 결국 알림 모듈을 새로 썼습니다

버전 문제를 우회해보려고 이것저것 시도하다가 다음 에러를 만났습니다.

There is no current event loop in thread 'MainThread'.
파이썬 asyncio 이벤트 루프 없음 오류 화면

제가 쓰던 알림 모듈이 비동기 방식으로 동작하는데, 파이썬 버전이 올라가면서 이벤트 루프를 다루는 방식이 달라진 탓이었습니다. 라이브러리가 예전 방식으로 루프를 찾다가 실패한 겁니다.

여기서 선택지가 갈렸습니다.

  1. 파이썬을 3.12 같은 안정 버전으로 낮추고 기존 코드를 그대로 살린다
  2. 3.14를 유지하고, 문제가 되는 라이브러리를 걷어낸다

저는 두 번째를 택했습니다. 맥미니를 자동매매 외의 작업에도 계속 쓸 생각이었기 때문에, 이 장비의 파이썬 버전을 특정 라이브러리에 맞춰 묶어두고 싶지 않았습니다. 지금 낮춰봐야 다음에 또 같은 고민을 하게 될 게 뻔했고요.

그런데 막상 걷어내려고 코드를 열어보니 허무했습니다. 텔레그램 봇 알림은 결국 정해진 주소로 HTTP 요청을 한 번 보내는 것이 전부입니다. 메시지를 보내겠다고 무거운 비동기 라이브러리를 통째로 끌어다 쓸 이유가 애초에 없었던 겁니다.

기존 telegram_alert.py를 버리고, 표준 라이브러리만으로 다시 썼습니다. 구조는 이 정도로 단순합니다.

바꾸고 나서 좋아진 점이 분명히 있었습니다. 외부 라이브러리 의존이 사라지니 설치 단계 자체가 없어졌고, 문제가 생겼을 때 어디서 났는지 바로 보였습니다. 라이브러리 안쪽에서 나던 에러를 추적하던 시간과 비교하면 확실히 마음이 편해졌습니다.

세 번째 벽: crontab 시간대, 코드는 멀쩡한데 실행 시각이 틀립니다

알림이 정상으로 가기 시작하자 다음 문제가 나왔습니다. 봇이 엉뚱한 시각에 움직이더군요.

이유는 단순했습니다. AWS 서버는 기본 시간대가 한국 시간이 아니어서, 기존 crontab에는 그 기준으로 환산한 시각을 적어둔 상태였습니다. 그 설정을 그대로 맥미니에 옮겼으니 시간이 어긋나는 게 당연했습니다.

맥미니는 한국 시간으로 돌아가니 환산 없이 실제 시각을 그대로 적으면 됩니다. 저는 이걸 뒤늦게 알아채고 스케줄을 전부 다시 계산해서 넣었습니다.

확인할 때 쓴 명령어는 이 세 개가 전부입니다.

date            # 현재 시스템 시간대 확인
crontab -l      # 등록된 스케줄 확인
crontab -e      # 스케줄 편집

서버를 옮길 때는 코드보다 시간대를 먼저 확인하시길 권합니다. 코드가 완벽해도 실행 시각이 틀리면 아무 의미가 없으니까요.

맥미니 자동매매 서버, 직접 써보니 이런 점이 달랐습니다

클라우드를 벗어나면서 가장 크게 달라진 건 비용이 아니라 책임의 위치였습니다. AWS를 쓸 때는 신경 쓸 필요조차 없던 것들이 전부 제 몫으로 넘어옵니다.

실제로 겪은 일이 있습니다. 정전이 난 적은 없었는데, 얼마 전 거실 TV 뒤에 꽂아둔 스마트플러그를 다른 데 쓰려고 빼내다가 옆에 있던 작은 대기전원 버튼이 눌렸습니다. 그 바람에 맥미니가 그대로 꺼졌습니다. 클라우드 서버였다면 상상도 안 할 일이죠. 지금은 전원 계통에 손댈 때 한 번 더 확인하는 습관이 생겼습니다.

반대로 좋았던 점도 있습니다. 문제가 생겼을 때 원격 접속 없이 바로 화면을 열어 확인할 수 있고, 요금 걱정 없이 이것저것 테스트해볼 수 있다는 건 생각보다 큰 차이였습니다.

다시 하라고 해도 저는 옮기는 쪽을 택할 것 같습니다. 다만 집에 이미 24시간 켜두는 기계가 있는 경우에 한해서입니다. 서버로 쓰려고 장비를 새로 산다면 계산이 완전히 달라집니다.

같은 길 가실 분들을 위한 체크리스트

  • 파이썬은 최신 버전이 정답이 아닙니다. 쓰는 라이브러리가 그 버전을 지원하는지 먼저 확인하세요.
  • 알림처럼 단순한 기능은 라이브러리 없이 직접 짜는 편이 나을 때가 있습니다. 의존성이 하나 줄면 이사할 때 그만큼 덜 깨집니다.
  • 서버 시간대부터 확인하세요. 코드가 멀쩡해도 실행 시각이 틀리면 소용없습니다.
  • 맥이라면 절전 설정을 반드시 확인하세요. 화면만 꺼지는 것과 시스템이 잠드는 것은 다릅니다.
  • 전원 계통을 정리해두세요. 저처럼 버튼 하나에 서버가 꺼질 수 있습니다.

혹시 지금 AWS 프리티어 종료를 앞두고 계신다면, 오늘 date 명령어 한 번 쳐보는 것부터 시작해보시길 권합니다. 옮길 준비가 됐는지는 그 한 줄에서 갈리더군요.

비슷한 문제로 막히셨거나 다른 환경으로 옮기신 경험이 있다면 댓글로 남겨주세요. 다음 글에서는 ★★★[다음에 쓸 글 주제 — 예: 맥미니를 24시간 서버로 쓸 때 절전 설정 잡는 법]★★★을 정리해보려 합니다.

이 글은 개인 환경에서 직접 겪은 기록이며, 특정 투자 방법이나 수익을 권유·보장하지 않습니다. 자동매매 프로그램 운용에 따른 결과와 책임은 이용자 본인에게 있습니다. 실행 환경에 따라 오류 내용은 다를 수 있습니다.

반응형