Tech Story

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

쭝허니 2025. 5. 31. 21:18

파이썬 스케줄러의 꽃, APScheduler로 시간 여행을 떠나요!

오늘은 여러분의 파이썬 코드에 마법 같은 시간 관리 기능을 불어넣어 줄 APScheduler(Advanced Python Scheduler)에 대해 이야기 나눠볼까 합니다. 마치 수필 작가처럼, APScheduler의 매력에 흠뻑 빠져보는 시간을 가져볼게요.  ☕️

APScheduler는 마치 정교한 시계 장치와 같아요. 여러분의 파이썬 애플리케이션에서 특정 시간이나 주기에 맞춰 작업을 자동으로 실행시켜주는 강력한 도구죠.  작은 규모의 작업부터 분산된 작업까지, 다양한 상황에 유연하게 대처할 수 있답니다.  복잡한 시스템을 구축하는데 필요한 핵심 부품이라고 생각하면 될 것 같아요.

**APScheduler의 심장: 네 가지 핵심 요소**

APScheduler는 크게 네 가지 중요한 요소로 이루어져 있어요. 마치 잘 만들어진 오케스트라처럼, 각 요소가 조화롭게 작동해야 아름다운 선율, 즉 완벽한 스케줄링을 만들어낼 수 있답니다.

1. **Triggers (트리거):** 작업의 시작 시간을 정의하는 부분이에요.  다양한 종류의 트리거가 있어서, 여러분의 필요에 맞춰 자유롭게 설정할 수 있죠.  마치 악보의 박자표처럼, 작업의 시작 시점을 정확하게 알려주는 역할을 해요.  Cron 표현식, 일정 간격, 특정 날짜 등 다양한 방법으로 작업 실행 시점을 설정할 수 있습니다.

2. **Job Stores (잡 스토어):** 예약된 작업들의 상태를 저장하고 관리하는 저장소입니다.  작업이 언제 실행될 예정인지, 이미 실행되었는지, 오류가 발생했는지 등의 정보를 안전하게 보관해주는 데이터베이스와 같은 역할을 하죠.  마치 오케스트라의 악보 보관함과 같다고 할 수 있겠네요.

3. **Executors (실행기):** 실제로 작업을 실행하는 부분이에요.  스레드나 프로세스 풀을 사용하여 여러 작업을 동시에 또는 순차적으로 처리할 수 있답니다.  마치 오케스트라의 지휘자처럼, 각 악기(작업)들이 제때 연주(실행)되도록 관리해주죠.  작업 완료를 스케줄러에 알리고, 필요한 이벤트를 전송하는 역할도 수행합니다.

4. **Schedulers (스케줄러):**  스케줄링된 작업들을 관리하고 실행하는 중추적인 역할을 합니다.  다양한 종류의 스케줄러가 있어서, 여러분의 애플리케이션 환경에 맞게 선택할 수 있답니다.  마치 오케스트라의 지휘대처럼, 전체적인 스케줄링을 관리하고 조율하는 역할을 수행하죠.

**스케줄러의 종류:**

APScheduler는 다양한 스케줄러를 제공합니다. 각 스케줄러는 각기 다른 특징을 가지고 있으니, 여러분의 애플리케이션에 맞는 스케줄러를 선택하는 것이 중요합니다.

* **BlockingScheduler:** 단일 스케줄러로, 애플리케이션의 메인 스레드에서 실행됩니다.  간단한 작업에 적합하지만, 메인 스레드를 차단하기 때문에 다른 작업을 처리할 수 없다는 단점이 있어요.

* **BackgroundScheduler:** 가장 일반적으로 사용되는 스케줄러로, 백그라운드 스레드에서 실행됩니다. 메인 스레드를 차단하지 않아 다른 작업을 병행 처리할 수 있어요.

* **AsyncIOScheduler, GeventScheduler, TornadoScheduler, TwistedScheduler, QtScheduler:** 비동기 프로그래밍 환경에서 사용되는 스케줄러입니다.  각각 Asyncio, Gevent, Tornado, Twisted, Qt 프레임워크와 통합되어 사용됩니다.

**(이미지 삽입: 각 스케줄러의 특징을 비교하는 표)**

**실제로 APScheduler를 사용해 볼까요?**

이제 간단한 예제를 통해 APScheduler를 사용하는 방법을 알아볼까요?  마치 요리 레시피처럼, 단계별로 따라 해보면 어렵지 않아요!

**1. 설치:**

 

```bash
pip install apscheduler
```

**2. 스케줄러 생성 및 작업 추가:**

```python
from apscheduler.schedulers.background import BackgroundScheduler
import time
def my_job():
    print("Hello, APScheduler!")
scheduler = BackgroundScheduler()
scheduler.add_job(my_job, 'interval', seconds=5) # 5초마다 my_job 함수 실행
scheduler.start()

try:
    while True:
        time.sleep(1)
except (KeyboardInterrupt, SystemExit):
    scheduler.shutdown()
```

이 코드는 5초마다 `my_job` 함수를 실행하는 간단한 스케줄러를 만듭니다.  `add_job` 함수의 첫 번째 인자는 실행할 함수, 두 번째 인자는 트리거 타입, 세 번째 인자는 트리거 설정입니다.  여기서는 `interval` 트리거를 사용하여 5초 간격으로 작업을 실행하도록 설정했어요.

**3. 다양한 트리거 사용하기:**

* **CronTrigger:**  Linux/Unix의 cron 표현식을 사용하여 복잡한 스케줄을 설정할 수 있어요.

```python
# 월요일부터 금요일까지 오전 10시 30분에 실행
scheduler.add_job(my_job, 'cron', day_of_week='mon-fri', hour=10, minute=30)
```

* **DateTrigger:** 특정 날짜에 한 번만 작업을 실행할 때 사용해요.

```python
from datetime import datetime
# 2024년 1월 1일 12시에 실행
scheduler.add_job(my_job, 'date', run_date=datetime(2024, 1, 1, 12, 0, 0))
```

* **IntervalTrigger:** 일정 간격으로 작업을 반복 실행할 때 사용합니다.  위 예제에서 사용한 `interval` 트리거와 같아요.

**(이미지 삽입: Cron 표현식 예시와 설명)**

**마무리하며...**

APScheduler는 파이썬 애플리케이션에 강력한 스케줄링 기능을 추가하는 데 유용한 도구입니다.  다양한 트리거와 스케줄러를 통해 여러분의 필요에 맞는 스케줄링 시스템을 구축할 수 있답니다.  이제 여러분의 파이썬 코드에 시간의 마법을 더해보세요!