오래된 프로그래머의 요즘 이야기

그리고 소소한 일상들...

허니의 소소한 일상들이 켜켜이 쌓여가고......

Tech Story

[Python] System에 반복 및 예약 실행 설정 (Scheduler)

쭝허니 2025. 7. 2. 23:45

Python으로 시스템 자동화하기

파이썬, 당신의 손 안의 마법 지팡이! 오늘은 이 마법 지팡이로 시스템을 똑똑하게 만들어주는 방법에 대해 이야기해 보겠습니다.
바로 '반복 및 예약 실행 설정', 즉 스케줄러(Scheduler)입니다. 마치 시계처럼, 정해진 시간에, 정해진 일을 척척 해내는 자동 비서 같은 녀석이죠.

1. 왜 스케줄러가 필요할까요?

스케줄러는 우리 삶의 편리함을 넘어, 시스템 운영의 효율성을 극대화하는 핵심 도구입니다.
다음은 스케줄러가 필요한 몇 가지 이유입니다.

  • 자동화된 작업 실행: 특정 시간, 날짜 또는 간격으로 작업을 자동으로 실행하여 수동 작업을 줄입니다.
  • 자원 관리 최적화: 시스템 자원을 효율적으로 사용하도록 작업을 예약하여 시스템 과부하를 방지합니다.
  • 유지보수 및 백업: 정기적인 데이터 백업, 시스템 유지보수 작업을 자동화하여 데이터 손실 및 시스템 오류를 예방합니다.
  • 시간 절약 및 생산성 향상: 반복적인 작업을 자동화하여 개발자 및 운영자의 시간을 절약하고, 다른 중요한 업무에 집중할 수 있도록 돕습니다.

2. Python 스케줄러 라이브러리 소개

파이썬에는 다양한 스케줄러 라이브러리가 존재합니다. 각 라이브러리는 사용 편의성, 기능, 그리고 시스템 환경에 따라 장단점을 가지고 있습니다. 다음은 몇 가지 인기 있는 라이브러리입니다.

2.1. schedule 라이브러리

schedule 라이브러리는 가장 간단하고 사용하기 쉬운 스케줄러입니다. 몇 줄의 코드로 작업을 예약할 수 있어, 초보자도 쉽게 접근할 수 있습니다.

import schedule
import time           

def job():
    print("I'm working...")
   
    # 매일 오전 10시에 job 함수 실행     
    schedule.every().day.at("10:00").do(job)

    # 매 10초마다 job 함수 실행     
    schedule.every(10).seconds.do(job)       

    # 매주 월요일 job 함수 실행     
    schedule.every().monday.do(job)     
    while True:     
          schedule.run_pending()   
          time.sleep(1)        

위 코드는 schedule 라이브러리를 사용하여 다양한 시간 간격으로 작업을 예약하는 예시입니다.

2.2. APScheduler 라이브러리

APScheduler는 더 강력하고 유연한 스케줄러입니다. 다양한 트리거(trigger) 방식을 지원하며, 작업의 지속적인 실행, 중단, 재시작을 관리할 수 있습니다.

from apscheduler.schedulers.background
import BackgroundScheduler           
import time           

def job():               
    print("APScheduler is working...")       
    scheduler = BackgroundScheduler()     
    # 매 분마다 job 함수 실행       
    scheduler.add_job(job, 'interval', minutes=1)     
    # 특정 날짜와 시간에 job 함수 실행       
    scheduler.add_job(job, 'date', run_date='2024-05-20 10:00:00')     
    scheduler.start()         
    try:       
        # 스케줄러가 실행되도록 유지       
        while True:         
            time.sleep(2)     
   except (KeyboardInterrupt, SystemExit):     

   # 종료 시 스케줄러 정리         
   scheduler.shutdown()        

APScheduler는 백그라운드에서 작업을 실행하며, 다양한 트리거 옵션을 제공하여 보다 정교한 스케줄링을 가능하게 합니다.

3. 실전 예제: 파일 백업 자동화

스케줄러를 사용하여 파일 백업을 자동화하는 예제를 살펴보겠습니다. 이 예제는 schedule 라이브러리를 사용합니다.

import schedule           
import time           
import shutil           
import os           

# 백업할 폴더와 백업본을 저장할 폴더 지정           
source_folder = "/path/to/your/source/folder" 
# 백업할 폴더 경로           
backup_folder = "/path/to/your/backup/folder" 
# 백업본 저장 폴더 경로           

def backup_files():           
    """파일 백업 함수"""           
    try:               
        # 백업 폴더가 없으면 생성           
        if not os.path.exists(backup_folder):         
            os.makedirs(backup_folder)           
        # shutil.copytree()를 사용하여 폴더 복사 (덮어쓰기)       
        shutil.copytree(source_folder, os.path.join(backup_folder, "backup_" + time.strftime("%Y%m%d_%H%M%S")), dirs_exist_ok=True)       
        print(f"백업 완료: {time.strftime('%Y-%m-%d %H:%M:%S')}")       
        except Exception as e:         
   print(f"백업 중 오류 발생: {e}")     
   # 매일 자정에 백업 실행       
   schedule.every().day.at("00:00").do(backup_files)     
   while True:       
        schedule.run_pending()       
        time.sleep(60) # 1분마다 확인        

이 코드는 매일 자정에 지정된 폴더의 내용을 백업 폴더로 복사합니다. shutil 라이브러리를 사용하여 폴더를 복사하고, time 라이브러리를 사용하여 백업 시간을 기록합니다.

4. 팁과 트릭

  • 에러 처리: 작업 실행 중 발생할 수 있는 예외 상황에 대비하여 try-except 블록을 사용하여 에러를 처리하세요.
  • 로깅: 작업의 성공 여부와 관련된 로그를 기록하여 문제 발생 시 디버깅을 용이하게 하세요.
  • 테스트: 실제 환경에서 스케줄러를 실행하기 전에 테스트 환경에서 충분히 테스트하세요.
  • 환경 변수: 민감한 정보(API 키, 데이터베이스 비밀번호 등)는 코드에 직접 하드코딩하지 말고 환경 변수를 사용하세요.

5. 마무리

파이썬 스케줄러를 사용하면 시스템 자동화의 세계로 한 발짝 더 다가갈 수 있습니다. 오늘 배운 내용을 바탕으로, 여러분의 프로젝트에 스케줄러를 적용하여 업무 효율성을 높여보세요! 마치 마법처럼, 여러분의 시스템이 알아서 척척 움직이는 모습을 보며 뿌듯함을 느낄 수 있을 겁니다.