공고 알림봇 만들기 (8편) — 윈도우 작업 스케줄러로 파이썬 봇을 자동 실행했습니다
결론부터: 파이썬 스크립트를 PC 켤 때마다 자동으로 돌리려면 윈도우 작업 스케줄러 + 로그온 시 실행이면 충분합니다. 단, 환경변수가 전달되지 않는 함정이 있어 런처 스크립트를 한 겹 씌워야 합니다.
7편까지 만들고 나니 알림은 쓸 만해졌어요. 그런데 정작 제가 직접 켜야 돌아갔습니다.
지난 편 → 7편 — 텔레그램 봇 인라인 키보드로 버튼을 달았습니다
켜는 걸 잊으면 소용이 없어요
터미널을 열고 실행하면 잘 돌아갑니다. 문제는 그 창을 닫으면 멈춘다는 거죠.
공고는 제가 컴퓨터를 안 볼 때도 올라옵니다. 알림봇을 만든 이유가 "놓치지 않으려고"인데, 제가 켜는 걸 잊으면 그 순간 의미가 없어져요. 켜두는 것까지가 기능이었습니다.
클라우드에 올리는 방법도 있지만, 그건 나중 일로 미뤘어요. 일단 집 PC에서 확실히 돌아가는 것이 먼저였습니다.
작업 스케줄러 + 로그온 시 실행
윈도우에는 작업 스케줄러가 기본으로 들어 있어요. 여기에 등록하면서 트리거를 "로그온할 때" 로 잡았습니다.
이러면 PC를 켜고 로그인하는 순간 봇이 자동으로 뜹니다. 제가 할 일이 없어요.
부팅 시 실행하는 방법도 있는데 로그온 시 실행을 골랐습니다. 이 봇은 제 계정의 환경변수를 쓰기 때문에, 로그인 전에는 필요한 값이 준비되지 않거든요.
함정 — 환경변수가 안 넘어갑니다
여기서 막혔어요. 손으로 실행하면 잘 되는데, 작업 스케줄러로 띄우면 API 키를 못 읽습니다.
원인은 이거였어요. 제 토큰과 API 키는 코드에 안 박고 윈도우 사용자 환경변수에 넣어뒀는데, 작업 스케줄러가 띄우는 프로세스에는 그게 그대로 전달되지 않았습니다.
그래서 런처 스크립트를 한 겹 씌웠어요.
사용자 환경변수를 읽어서 → 프로세스 환경변수로 넣고 → 파이썬 실행
파워셸로 열 줄 남짓입니다. 작업 스케줄러는 이 런처를 부르고, 런처가 키를 챙겨서 봇을 띄우는 구조죠.
이렇게 하니 키가 코드에도, 설정 파일에도 안 남습니다. 설정 파일엔 ${환경변수이름} 같은 자리표시자만 있고, 실제 값은 실행할 때 채워집니다. 저장소에 올려도 안전해요.
30초마다 깨어나되, 매번 조회하진 않아요
봇은 30초마다 한 번씩 깨어납니다. 그런데 그때마다 API를 부르진 않아요.
소스별로 얼마 만에 다시 볼지를 따로 정해뒀습니다. 대부분 한 시간이고, 유튜브는 두 시간이에요. 30초 주기는 "지금 부를 때가 됐나"만 확인하는 용도입니다.
이렇게 나눈 이유는 두 가지예요.
- API 호출량을 아끼려고 — 공공 API는 하루 호출 한도가 있습니다
- 소스마다 갱신 속도가 다르니까 — 공고는 하루에 몇 번, 유튜브 댓글은 더 느리게 쌓입니다
설정만 바꾸면 재시작 없이 반영돼요
돌려보니 또 불편한 게 생겼습니다. 폴링 주기를 조금 바꾸고 싶은데, 그때마다 봇을 껐다 켜야 했어요.
그래서 설정 파일이 바뀌면 알아서 다시 읽도록 했습니다. 원리는 단순해요. 파일의 수정 시각을 기억해뒀다가, 매번 확인해서 달라졌을 때만 다시 읽습니다. 안 바뀌었으면 그냥 넘어가고요.
여기에 안전장치를 하나 넣었어요. 설정 파일을 잘못 고쳐서 읽기에 실패하면, 이전 설정을 그대로 유지합니다. 오타 하나로 봇이 죽으면 곤란하니까요.
덕분에 지역 필터 같은 걸 켜고 끄는 데 재시작이 필요 없습니다. 파일 저장하면 30초 안에 반영돼요.
여기서 제가 착각한 것
설정은 다시 읽지만, 코드는 다시 읽지 않습니다.
당연한 얘기인데 실제로 당했어요. 얼마 전 필터 기능을 새로 만들고 설정까지 켰는데 아무 일도 안 일어났습니다. 한참 들여다보고 나서야 알았죠 — 돌고 있던 프로세스는 열두 시간 전에 올라온 옛날 코드를 메모리에 들고 있었던 겁니다.
| 바꾼 것 | 반영되나 |
|---|---|
| 설정 파일 | ✅ 30초 안에 |
| 파이썬 코드 | ❌ 재시작 필요 |
"핫 리로드가 되니까 알아서 반영되겠지" 하고 넘어간 게 화근이었어요. 어디까지 자동이고 어디부터 수동인지를 헷갈리면 이런 일이 생깁니다.
정리 — 자동화의 마지막 한 칸
돌아보면 이 편에서 한 일은 기능이 아니라 지속성이었어요.
아무리 잘 만들어도 사람이 매번 켜야 하면 그건 반쯤 완성된 도구입니다. 제가 잊어버리는 순간 멈추니까요. 켜두는 것까지 자동화해야 비로소 도구가 됩니다.
지금은 PC를 켜면 알아서 뜨고, 텔레그램으로 "시작했습니다" 메시지가 한 번 옵니다. 그 메시지를 보면 오늘도 돌고 있구나 하고 넘어가요. 그거면 충분합니다.
다음 편
수집한 게 많아지니 이번엔 읽을 가치가 있는지가 문제였어요. 그래서 제 PC 안에서 도는 작은 언어 모델에게 1차 판단을 맡겼습니다. → 9편 — LM Studio 로컬 LLM으로 수집 결과를 걸렀습니다
(이전 편: 7편 — 텔레그램 봇 인라인 키보드로 버튼을 달았습니다)
댓글
댓글 쓰기