
【Python】『뉴스 요약 사이트』를 만들어 보았다 (실전편) ㉒
요약
Python 기반 뉴스 요약 사이트의 자동 업데이트를 위해 Windows 작업 스케줄러와 배치 파일을 활용하는 방법을 설명합니다. Render 무료 플랜의 Cron Job 부재를 해결하기 위해 GitHub 연동 자동화 프로세스를 구축합니다.
핵심 포인트
- Windows 작업 스케줄러와 배치 파일을 이용한 자동 배포 구현
- RSS 취득부터 Git Push까지의 워크플로우 자동화
- 작업 스케줄러 설정 시 권한 문제 및 실행 누락 방지 팁
- 부팅 지연 시 즉시 실행 설정을 통한 안정적인 자동화
GitHub로의 푸시(Push)와 Render로의 배포(Deploy)가 완료되었습니다. 다만, 무료 플랜에서는 Cron Job을 사용할 수 없었기 때문에 자동 업데이트 메커니즘이 미완성된 상태였습니다. 이번에는 Windows 작업 스케줄러(Task Scheduler)와 GitHub를 연동하여, 매일 아침 자동으로 Render의 콘텐츠를 업데이트할 수 있도록 하겠습니다.
① 배치 파일(Batch file) 작성
② 작업 스케줄러(Task Scheduler)에 등록
③ .gitignore 방침 변경
④ Render 반영 확인
Cascade에게 다음과 같이 전달했습니다.
매일 아침 자동으로 Render의 콘텐츠를 업데이트하고 싶습니다.
다음 흐름을 자동화하는 bat 파일을 작성해 주세요.
1. fetch_rss_digest.py를 실행하여 JSON 생성
...
Cascade가 auto_deploy.bat라는 이름으로 작성해 주었습니다. .bat는 Windows의 배치 파일로, 여러 명령어를 모아서 순차적으로 자동 실행할 수 있는 파일입니다.
작성된 auto_deploy.bat의 내용은 다음과 같습니다.
@echo off
cd /d C:\dev\news-digest
set LOG_FILE=logs\auto_deploy-%date:~-10,4%-%date:~-5,2%-%date:~-2,2%.log
...
훑어보면 대략적인 흐름을 이해할 수 있을 것 같습니다.
실행 흐름을 간단히 하면 "RSS 취득 → JSON 생성 → git add → git commit → git push"입니다. 실행 결과는 logs/auto_deploy-YYYY-MM-DD.log에 저장됩니다.
이전의 run_digest.bat와 마찬가지로 작업 스케줄러(Task Scheduler)에 등록합니다.
등록 내용은 Windsurf의 Cascade가 지시해 준 내용대로 진행했습니다만, 이번에 막혔던 부분은 "가장 높은 수준의 권한으로 실행"에 체크를 했더니 비밀번호 에러가 발생했고, 체크를 해제하니 정상적으로 등록할 수 있었다는 점입니다.
이는 관리자 권한으로 실행하려고 시도했기 때문에 Windows의 보안 확인이 작동한 것이 원인이었습니다.
어떻게 하면 좋을지 다시 물어보니, 이번 배치 파일은 그 정도의 권한까지는 필요하지 않으므로 체크를 하지 않아도 괜찮을 것 같다는 조언을 받아, 일단 체크를 해제하고 등록하기로 했습니다.
또한 "6시에 PC가 켜져 있지 않으면 작업이 건너뛰어지는" 문제도 있었기 때문에, "설정" 탭의 "예약된 시간에 작업을 시작하지 못한 경우 즉시 작업 실행"에도 체크를 해두었습니다. 이렇게 하면 8시 등 늦게 부팅된 경우에도, 부팅되는 대로 즉시 자동 실행됩니다.
설정 내용은 다음과 같습니다.
| 항목 | 설정 |
|---|---|
| 프로그램 | C:\dev\news-digest\auto_deploy.bat |
| ... | OFF (체크 없음) |
8시에 부팅했을 경우는 어떻게 될까?
위에서 조금 언급했지만, 6시까지 PC를 켜지 못했을 경우 어떻게 할 것인가 하는 문제입니다. "로그온했을 때만 실행"으로 해두면 건너뛰어지는 것 아닌가...??
그런 "부팅된 타이밍에 바로 동작했으면 좋겠다"는 경우에는, "설정" 탭의 "예약된 시간에 작업을 시작하지 못한 경우 즉시 작업 실행"에 체크를 하면 됩니다.
이렇게 하면 부팅되는 대로 즉시 auto_deploy.bat가 동작해 줍니다.
8시에 일어나도 안심!!
매일 아침 6시까지 PC 부팅·로그인 완료
→ 6시에 자동 실행
8시 등 늦게 부팅했을 경우
...
두 패턴 모두 자동으로 뉴스가 업데이트될 것입니다!
등록이 완료되었으므로, 시험 삼아 수동으로 auto_deploy.bat를 실행하여 테스트합니다.
결과는 다음과 같습니다.
Gemini 요약 실패: 9건 (RSS 상태로 저장)
Git add...
Git commit...
...
"nothing to commit"은 정상입니다. 이전과 변경 사항이 없어서 커밋되지 않았을 뿐입니다.
하지만 Gemini 요약이 9건 실패한 것이 신경 쓰입니다.
Cascade에게 상담했더니, 원인은 레이트 리밋(Rate Limit, 속도 제한)일 가능성이 높다고 합니다.
.env 설정을 다음과 같이 변경함으로써 회피할 수 있다고 합니다.
이 부분은 수동으로 빠르게 변경했습니다.
GEMINI_DELAY_SECONDS=20 # 13초에서 20초로 늘림
GEMINI_MAX_RETRIES=5 # 3회에서 5회로 늘림
변경 후 다시 테스트해 보았지만, 결과는 변함없이……. 음…… 이건 나중에 좀 더 다듬기로 하고, 일단 이대로 다음 단계로 진행하기로 했습니다.
다시 한번 auto_deploy.bat를 실행하여 GitHub에 푸시하고, Render를 확인해 보았습니다.

샘플 데이터가 표시되고 있어…….
원점으로 돌아가 버렸잖아.
원인을 조사해 보니, .gitignore에 data/digest-*.json이 포함되어 있어서, JSON 파일이 GitHub에 푸시되지 않았던 것입니다.
fetch_rss_digest.py가 실행되면 data/digest-2026-05-24.json과 같이 날짜가 포함된 JSON이 생성됩니다. 이 JSON이 Render에서 표시할 뉴스 데이터의 본체인데, .gitignore로 제외되어 있었기 때문에 GitHub에는 전달되지 않았습니다.
GitHub의 data/ 폴더를 확인하니 .gitkeep과 sample-digest.json밖에 없었고, 오늘의 JSON이 존재하지 않았습니다.

JSON을 Git에 포함하지 않기로 했던 이유는, 매일 생성되는 파일이라 커밋 히스토리(Commit History)가 불필요하게 늘어나는 등의 문제를 피하기 위해서였습니다.
하지만 Cron Job을 사용할 수 없는 지금, 이번 구성에서는 GitHub를 경유하여 Render에 전달할 수밖에 없는 상황이군요. 즉, JSON을 GitHub에 올리는 방향으로 구성을 변경해야 합니다!
Cascade에게 상담했더니, 두 가지 선택지를 제시해 주었습니다.
| 방법 | 장점 | 단점 |
|---|---|---|
| ① GitHub에 JSON 포함 | 완전 무료 · 구현이 간단함 | 리포지토리(Repository) 크기 증가 |
| ② Supabase 등 외부 스토리지 | 데이터와 코드를 분리할 수 있음 | 구현이 복잡 · 외부 서비스 의존 |
Cascade의 말에 따르면 JSON 파일은 1개당 약 10KB 정도이며, 90일 치라도 약 900KB라고 합니다. GitHub의 무료 용량(1GB)에 여유가 있다는 것이죠.
따라서 ① GitHub에 JSON을 포함하는 방침으로 변경하기로 했습니다.
.gitignore에서 data/digest-*.json 행을 삭제하고, 다시 아래 명령어로 푸시합니다.
git add .
git commit -m "Add JSON files to GitHub"
git push
보통은 GitHub에 푸시하면 Render가 자동으로 배포(Deploy)해 줍니다. 다만 이번에는 .gitignore 변경이라는 구성상의 수정을 한 타이밍이므로, 만약을 위해 Render 대시보드에서 「Manual Deploy」를 클릭하여 반영을 확인했습니다.
https://news-digest-rq0k.onrender.com을 열었더니……
오늘(2026-05-24)의 뉴스가 표시되었습니다! 읽어주기 버튼도 작동하고 있습니다! 🎉
(기사 게시일은 6월이지만, 초기 단계에서 여러 문제가 너무 많이 발생했기 때문에, 사전에 앱이 작동하는 곳까지는 제작해 두고, 그 후 세부적인 수정이나 실제로 기사로 정리하는 작업을 진행하고 있습니다.)
스마트폰에서도 열람할 수 있음을 확인했습니다!! 대단해!
최종적인 자동화 흐름은 다음과 같이 되었습니다.
매일 아침 6시 (자동)
Windows 작업 스케줄러
→ auto_deploy.bat
...
auto_deploy.bat로 RSS 취득 → JSON 생성 → GitHub 푸시를 일괄 자동화할 수 있었다.
- JSON을
.gitignore에 포함하고 있었기 때문에 Render에 반영되지 않았던 문제 → 방침 변경으로 해결. - 매일 아침 자동으로 GitHub에 푸시 → Render가 자동 배포되는 흐름이 완성되었다.
하고 싶었던 일은 완료했지만, 신경 쓰이는 점이 군데군데 있습니다.
스마트폰에서의 디자인이나 음성 읽어주기 부분 등, 아직 개선의 여지가 있습니다.
앞으로는 그 부분을 수정하거나, 이전에 ClaudeCode로 작성했던 동등한 앱과의 비교 등을 해보고자 합니다.
하지만…… 제 컴퓨터가 너무 무겁습니다. VSCode, Cursor, Windsurf…… 무엇을 실행하든 컴퓨터가 엄청난 소리를 내며 힘겹게 돌아가기 시작합니다……. 수없이 갑작스러운 앱 다운 등을 경험했고, 이 Qitta 기사도 한 편을 만드는 데 시간이 너무나 많이 걸렸습니다. 이대로는 지장이 너무 크기 때문에, 새 PC 구매든 무엇이든 조금 검토한 후에 이후의 기사를 진행하겠습니다.
따라서 이 시리즈는 일단 여기서 마무리하고, PC가 안정되면 다시 한번 도전하겠습니다.
지금까지 감사했습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기