보통 어떤 작업을 일정한 시간 간격으로 실행하기 위해서 Cron을 사용한다. Cron은 crontab 파일에 셸 명령어와 반복 시간을 표현하는 방식(ex. */1 * * * *)으로 실행된다.

최근에 간단한 Django기반의 토이 프로젝트를 서비스하기 위해 무료 서버를 생각하다가 오랜만에 Heroku를 이용하게 되었다. 출퇴근 로그를 기록하는 웹 앱이고, 퇴근 시간 전에 슬랙으로 미리 알림을 주기 위해서 스케줄러가 필요했다.

Heroku는 Python, Node.js, Java 등으로 작성된 어플리케이션을 배포하고, 실행 시켜주는 Paas 서비스인데 어플리케이션에서 사용하는 부가 서비스를 Add-on 형태로 붙일 수 있다. 간단한 예로 DB를 사용하기 위해 Add-on 섹션에서 Heroku Postgresql을 검색해서 추가할 수 있다.

Add-on 마켓플레이스에서 “Scheduler”를 검색하면, 관련된 결과가 몇가지 나오지만 기본적으로 Heroku 공식 가이드에서 “Heroku Scheduler“를 기준으로 작성되어 있기 때문에 간단한 스케줄링은 이 Add-on을 사용하는 것이 나을 것 같다.

그런데 이 스케줄러는 최소 10분 간격 밖에 지원하지 않기 때문에 1분 단위로 어떤 작업을 반복해야 할 때는 사용할 수 없다.

그럴 때는 “Advanced Scheduler“를 추천한다. 이 Add-on은 시간을 지정하는 Input에서 최소 5분 단위까지 지원하면서, 선택적으로 Crontab 표현식을 사용할 수 있기 때문에 1분 단위로 스케줄을 설정하는 것이 가능하다.

아직은 BETA 서비스라서 Early bird 혜택으로 무료라서 부담없이 사용할 수 있지만, 등록한 모든 작업의 실행 횟수가 1달에 7,500번을 초과할 수 없다.