0%

클라우드플레어 워커(cloudflare workers) cron 스케줄러 사용하기

저번 글에서 클라우드플레어 워커를 wrangler로 배포하는 방법을 알아보았습니다. 이번에는 워커에 cron 스케줄러를 사용하는 방법에 대해 알아보겠습니다.

프로젝트 생성

먼저 워커 프로젝트를 생성합니다. 저번 글에서 생성한 프로젝트를 사용해도 되고 새로운 프로젝트를 생성해도 됩니다.

1
npm create cloudflare@latest

cron 스케줄러 추가

워커에 cron 스케줄러를 추가하려면 wrangler.toml 파일에 triggers 섹션을 추가하면 됩니다. cronscron 표현식을 배열로 추가하면 됩니다.

1
2
3
4
5
name = "cron-test"
# ...

[triggers]
crons = ["0 * * * *"]

워커 코드 수정

워커 코드에서 cron 스케줄러를 사용하려면 scheduled 함수를 사용하면 됩니다.

1
2
3
4
5
export default {
async scheduled(event, env, ctx) {
console.log("cron processed");
},
};

cron 스케줄러를 테스트하려면 아래 명령어를 실행하면 됩니다.

1
npx wrangler dev --test-scheduled

테스트 환경에서는 자동으로 cron이 실행되지 않습니다. cron을 테스트하려면 아래 명령어를 실행하면 됩니다.

1
curl "http://localhost:8787/__scheduled?cron=0+*+*+*+*"

잘 실행이 됩니다.

1
2
cron processed
[wrangler:inf] GET /__scheduled 200 OK (12ms)

멀티 cron 스케줄러 추가

여러 cron 스케줄러를 추가하려면 cronscron 표현식배열로 추가하면 됩니다.

1
2
3
4
5
name = "cron-test"
# ...

[triggers]
crons = ["0 * * * *", "0 0 * * *"]

하지만 이렇게 배포하면 처음에 작성한 코드가 "0 * * * *""0 0 * * *"이 실행될 때 모두 실행됩니다. 각 cron 스케줄러에 따라 다른 로직을 실행하려면 event.cron을 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
export default {
async scheduled(event, env, ctx) {
switch (event.cron) {
case '0 * * * *':
console.log(`${event.cron} cron processed`);
break;
case '0 0 * * *':
console.log(`${event.cron} cron processed`);
break;
}
return;
},
};

명령어

1
2
curl "http://localhost:8787/__scheduled?cron=0+*+*+*+*"
curl "http://localhost:8787/__scheduled?cron=0+0+*+*+*"

결과

1
2
3
4
0 * * * * cron processed
[wrangler:inf] GET /__scheduled 200 OK (2ms)
0 0 * * * cron processed
[wrangler:inf] GET /__scheduled 200 OK (2ms)

배포

배포하려면 아래 명령어를 실행하면 됩니다.

1
npx wrangler deploy

Workers 메뉴에서 cron-test 워커를 선택하고 Setting > Triggers 메뉴에서 cron 스케줄러를 확인할 수 있습니다.
cron

모든 cron 삭제

공식 문서에서는 cron 스케줄러를 삭제하려면 wrangler.toml 파일에서 crons를 빈 배열로 수정하면 된다고 합니다. 하지만 제가 테스트해본 결과 정상적으로 삭제되지 않았습니다. 모든 cron을 삭제하려면 대시보드에서 직접 삭제해야 합니다. (수정은 바로 반영됩니다.)

1
2
3
[triggers]
# crons = [] -> 삭제 안됨, 적용 후 대시보드에서 직접 삭제해야 함
crons = ["* * * * *"] # 업데이트는 적용 됨

deploy 후 대시보드 반영 까지 최대 30분이 소요될 수 있습니다.

Green Compute

여담으로 Workers를 100% 재생에너지로 구동하는 Green Compute를 사용할 수 있습니다. 단점으로는 100% 재생에너지로 구동되는 데이터센터가 한정되어 있어서 레이턴시가 발생할 수 있습니다.

결론

이번 글에서는 클라우드플레어 워커cron 스케줄러를 사용하는 방법에 대해 알아보았습니다. 다음 글에서는 워커KVR1을 활용해서 복잡한 기능을 구현해 보겠습니다.