본문 바로가기
Javascript/Node.js

[GCP][AppEngine][NodeJS] node-schedule 문제 스케쥴러 인스턴스 문제, GAE cron

by 오늘의개발부 2020. 7. 9.
반응형

 App Engine으로 백엔드를 돌리는 프로젝트에서 매일 새벽마다 배치를 돌려야하는 업무가 생겼다. nodeJS를 백엔드로 사용하고 있기에 nodeJS에서 사용할 수 있는 스케쥴러를 찾아봤다. 어떤 모듈을 선택할지 고민하는 나같은 귀차니즈머를 위해 "Wonjang Son" 님께서 아주 잘 정리해주셨다.

(https://velog.io/@filoscoder/%EC%8A%A4%EC%BC%80%EC%A4%84-%EC%97%85%EB%AC%B4-%EC%9E%90%EB%8F%99%ED%99%94-Node-cron-vs-Node-schedule-%EB%B9%84%EA%B5%90-clk4dyynve)

 

스케줄 업무 자동화: Node-cron vs Node-schedule 비교 👊

🎯 필자는 Plating의 소프트웨어 엔지니어로 근무 중이며 "셰프의 찾아가는 구내식당"을 서비스를 제공하는 회사이다. 현재 특정 고객사들은, 각 직원이 마감 시간전까지 원하는 메뉴를 주문하는

velog.io

 

 현재 내 상황도 Wonjang Son님의 포스팅과 비슷하다고 판단하고 node-schedule 모듈을 설치하여 테스트 및 개발을 완료했다. 그리고 자신만만하게 App Engine에 해당 소스를 배포했다. 처음엔 문제 없어 보였다. 그런데 이후 버전이 추가될 때 마다 스케쥴러가 중복으로 도는 현상이 보였다. 나는 slack으로 알림을 받고 있었기에 금방 파악할 수 있었다.

slack으로 받은 중복 메세지

 

 이유를 찾아보자. 원인은 사용하지 않는 인스턴스가 내려가지 않았던 것이다. 정확하게 내가 node-schedule기능을 추가한 이후부터 사용하지 않음에도 불구하고 이전 인스턴스들이 남아 있는 것을 확인했다. 왜 인스턴스가 남아있을까? 원인은 간단했다. 내가 node-schedule을 app.js에 적용했기 때문에 GAE가 해당 인스턴스는 일하는 인스턴스라고 판단하고 남긴 것이다. 그렇다면 GAE를 사용하면서 스케쥴러 작업을 어떻게 수행해야하지? 컴퓨트엔진을 할당받아서 새로 만들어야하나? 라고 생각하고 찾아봤다. Google App Engine의 배치 및 스케쥴러 작업은 cron.yaml으로 수행하는 것이 옳다. (https://cloud.google.com/appengine/docs/flexible/nodejs/scheduling-jobs-with-cron-yaml?hl=ko)

 

cron.yaml로 작업 예약  |  Node.js 문서용 App Engine 가변형 환경  |  Google Cloud

App Engine 크론 서비스를 사용하면 지정된 시간이나 정기적으로 작동하는 정기 예약 태스크를 구성할 수 있습니다. 이러한 태스크를 일반적으로 크론 작업이라고 합니다. 이러한 크론 작업은 App E

cloud.google.com

 

 cron.yaml은 nodeJS 자체에서 배치작업을 수행하는 것이 아니라, GAE가 해당 서비스에 맞게 배치작업으로 Http 요청을 보내주기 때문에 사용하지 않는 인스턴스가 내려가지 않는 부작용이 없다. 또한 트래픽 분할이나 재시도 지정 등의 세팅을 간편히 할 수 있다. cron.yaml에 대한 자세한 설명은 다음에 다시 정리해보겠다.

반응형