지금까지 파일 이름 변경, 뉴스 크롤링, PPT 자동 생성 등 다양한 파이썬 업무 자동화 스크립트들을 구축해 왔습니다. 하지만 아무리 강력한 자동화 코드라도 매일 아침 출근해서 사람이 직접 터미널을 켜고 실행 버튼을 눌러야 한다면 100% 완벽한 자동화라고 부르기 어렵습니다. 사람이 자고 있는 새벽이나 휴일에도 정해진 시간이 되면 컴퓨터가 알아서 크롤링을 하고 보고서를 메일로 발송하는 ‘완전 무인 시스템’을 완성해야 비로소 업무 자동화의 진가가 발휘됩니다. 본 포스팅에서는 사람이 읽기 가장 편한 문법으로 주기적인 작업을 예약할 수 있는 파이썬의 필수 패키지, schedule 라이브러리의 활용법을 소개합니다.
정기적인 자동화 스크립트 실행의 필요성
Schedule 라이브러리의 직관적인 주기 설정 문법
리눅스나 맥(Mac) 환경의 크론탭(Crontab), 혹은 윈도우의 작업 스케줄러를 사용하는 방법도 있지만, 운영체제 설정을 건드려야 해서 초보자에게는 진입장벽이 높습니다. 파이썬의 외부 패키지인 schedule 라이브러리를 사용하면 오직 코드 내부에서 실행 주기를 완벽하게 제어할 수 있습니다.
이 라이브러리의 가장 큰 장점은 영문 명세서나 대화를 읽는 것처럼 문법이 매우 직관적이라는 점입니다. 예를 들어 “매 10분마다 실행”은 schedule.every(10).minutes.do(작업), “매일 오전 9시 정각에 실행”은 schedule.every().day.at("09:00").do(작업)과 같이 한 줄의 코드로 구현됩니다. 백그라운드에서 상주하며 시간을 체크하는 데 최적화되어 있어 실무 자동화 시스템의 최종 관문으로 자주 활용됩니다. 실습 전 아래 명령어로 패키지를 설치해 줍니다.
Bash
pip install schedule
지정된 시간에 크롤링이나 보고서 작성을 호출하는 스케줄러
무한 루프 기반 스케줄링 백그라운드 구동 코드
우리가 앞서 만든 자동화 함수들을 매일 정해진 시간(예: 매일 아침 9시 정각, 매주 월요일 등)에 알아서 호출하고, 예외 상황이 발생해도 시스템이 다운되지 않고 24시간 내내 대기하도록 만드는 마스터 스케줄러 스크립트 코드입니다.
Python
import schedule
import time
import datetime
def morning_auto_job():
"""매일 아침 실행할 메인 업무 자동화 함수 (예시)"""
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f"\n==================================================")
print(f"[{current_time}] 정기 자동화 업무가 시작되었습니다.")
print("==================================================")
try:
# 이 부분에 우리가 이전에 만든 자동화 모듈이나 코드를 삽입합니다.
# 예: 뉴스 크롤링 구동 -> PPT 보고서 자동 생성 -> 이메일 일괄 발송
print("-> [스텝 1] 지정 키워드 최신 데이터 크롤링 완료")
print("-> [스텝 2] 취합 데이터 기반 파워포인트 보고서 빌드 완료")
print("-> [스텝 3] 담당 부서 및 임직원 대상 무인 메일 발송 성공")
print(f" 상태: 모든 정기 업무가 정상적으로 완수되었습니다.")
except Exception as e:
print(f"⚠️ 업무 수행 중 예외 에러가 발생했습니다: {e}")
def system_heartbeat():
"""스케줄러가 정상 작동 중인지 실시간 모니터링하는 서브 함수"""
print(f".", end="", flush=True)
# --- 메인 스케줄러 주기 설정 영역 ---
# 1. 매일 아침 9시 정각에 메인 업무 자동화 함수 호출 예약
schedule.every().day.at("09:00").do(morning_auto_job)
# 2. 매주 월요일 오후 1시 30분에 주간 업무 호출 예시 (추가 가능)
# schedule.every().monday.at("13:30").do(morning_auto_job)
# 3. 1시간마다 시스템 가동 상태 점검을 위한 하트비트 설정
schedule.every(1).hours.do(system_heartbeat)
if __name__ == "__main__":
print("🚀 파이썬 무인 업무 자동화 스케줄러 엔진이 가동되었습니다.")
print(f"현재 시스템 시각: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("설정된 스케줄에 따라 백그라운드에서 상주 대기를 시작합니다. (종료: Ctrl+C)\n")
# 24시간 상주 모니터링을 위한 무한 루프 구동
while True:
try:
# schedule 내부에 예약된 작업 중 현재 시간에 실행해야 할 작업이 있는지 검사하고 실행
schedule.run_pending()
# CPU 점유율 과다 소모를 방지하기 위해 1초씩 쉬면서 검사 루프를 돌립니다.
time.sleep(1)
except KeyboardInterrupt:
print("\n사용자에 의해 스케줄러 엔진이 안전하게 종료되었습니다.")
break
except Exception as e:
print(f"\n 스케줄러 루프 내 알 수 없는 오류 발생: {e}")
# 치명적인 에러 발생 시 시스템이 완전히 뻗는 것을 방지하기 위해 단기 대기 후 재시도
time.sleep(5)
이 코드는 schedule.run_pending() 메커니즘을 핵심 허브로 삼아 작동합니다. while True 무한 루프가 돌면서 매초마다 ‘지금 실행해야 할 작업이 있는지’ 체크리스트를 검사하는 방식입니다. 이때 CPU 자원을 무의미하게 과다 점유하지 않도록 time.sleep(1) 제동 장치를 걸어주는 것이 무인 구동 시스템의 필수 테크닉입니다. 또한, 개별 업무에서 예외(try-except)가 발생하더라도 백그라운드 스케줄러 자체는 멈추지 않고 다음 스케줄을 준비하도록 예외 안전망을 겹겹이 구축했습니다. 이 마스터 스크립트를 서버나 항상 켜두는 사무실 PC에 구동시켜 두면, 매일 아침 사람이 개입하지 않아도 완벽하게 스스로 움직이는 진정한 무인 소프트웨어 로봇을 소유하게 됩니다.