백그라운드 작업을 실행하기 위해 Redis를 추가하는 것에 지쳐서 Rust로 임베디드 스케줄러를 만들었습니다
요약
Redis나 Celery 같은 복잡한 인프라 없이 Python 프로세스 내에서 직접 실행되는 임베디드 스케줄러 'Kron'을 소개합니다. Rust로 작성되어 성능이 뛰어나며, 프로세스 충돌 시에도 로그를 통해 작업을 복구할 수 있습니다.
핵심 포인트
- Redis, 브로커, 데몬 등 추가 인프라가 필요 없는 경량 스케줄러
- Rust 기반의 PyO3 바인딩으로 높은 성능과 안정성 제공
- Append-only log를 통한 작업 복구 및 데이터 무결성 보장
- OpenRaft 기반의 분산 서버 모드 및 변조 방지 감사 로그 지원
- 소규모 서비스, 로컬 에이전트, 엣지 디바이스에 최적화
Python 앱에서 백그라운드 작업(background job)을 실행해야 할 때마다 정답은 항상 같았습니다: Redis를 추가하고, Celery를 추가하고, 워커 프로세스(worker process)를 추가하고, 브로커(broker)를 추가하는 것이었습니다.
그저 매일 아침 이메일 하나를 보내기 위해서 말이죠.
그래서 저는 Kron을 만들었습니다. Kron은 Python 프로세스 내부에 임베디드(embedded)되어 실행됩니다. Redis도, 브로커도, 데몬(daemon)도 필요 없습니다. 타이머(Timers)는 재시작 후에도 유지됩니다. 프로세스가 충돌하더라도, Kron은 로컬 추가 전용 로그(append-only log)로부터 모든 것을 복구합니다.
python
import kron
kron.schedule("email_digest", cron="0 8 * * *", fn=send_digest)
kron.schedule("cleanup", every="30m", fn=cleanup_temp_files)
kron.start(data_dir=".kron")
이것이 전부입니다. 인프라가 필요 없습니다.
CLI를 통해 모든 것을 검사할 수 있습니다:
bash
kron job list
kron job status email_digest
kron job history email_digest
핵심은 Rust로 작성되었습니다. PyO3를 통해 Python 바인딩(bindings)을 제공합니다. 또한 워커 임대(worker leases), 펜싱 토큰(fencing tokens), 그리고 SHA256 해시 체이닝(hash chaining)을 이용한 변조 방지 감사 로그(tamper-evident audit log)를 갖춘 OpenRaft 기반의 분산 서버 모드도 지원합니다.
pip install kron-scheduler
GitHub: https://github.com/BuildByNexora/Kron
아직 알파(alpha) 단계이지만, 소규모 서비스, 로컬 에이전트(local agents), 그리고 엣지 디바이스(edge devices)에 이미 유용하게 사용할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기