App Engine으로 백엔드를 돌리는 프로젝트에서 매일 새벽마다 배치를 돌려야하는 업무가 생겼다. nodeJS를 백엔드로 사용하고 있기에 nodeJS에서 사용할 수 있는 스케쥴러를 찾아봤다. 어떤 모듈을 선택할지 고민하는 나같은 귀차니즈머를 위해 "Wonjang Son" 님께서 아주 잘 정리해주셨다.
현재 내 상황도 Wonjang Son님의 포스팅과 비슷하다고 판단하고 node-schedule 모듈을 설치하여 테스트 및 개발을 완료했다. 그리고 자신만만하게 App Engine에 해당 소스를 배포했다. 처음엔 문제 없어 보였다. 그런데 이후 버전이 추가될 때 마다 스케쥴러가 중복으로 도는 현상이 보였다. 나는 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은 nodeJS 자체에서 배치작업을 수행하는 것이 아니라, GAE가 해당 서비스에 맞게 배치작업으로 Http 요청을 보내주기 때문에 사용하지 않는 인스턴스가 내려가지 않는 부작용이 없다. 또한 트래픽 분할이나 재시도 지정 등의 세팅을 간편히 할 수 있다. cron.yaml에 대한 자세한 설명은 다음에 다시 정리해보겠다.
'Javascript > Node.js' 카테고리의 다른 글
[Notion]노션에 HTML 페이지 embed하기 (0) | 2022.07.02 |
---|---|
mocha 설치 및 기본 사용 방법 (0) | 2021.06.24 |
[NodeJS][GCP][MySQL] NodeJS서버로 GCP MySQL DB에 Sequelize 연결하기 (0) | 2020.05.18 |
[Nodejs][ejs] HTML 이스케이프 문자 파싱, HTML 태그 적용 (2) | 2019.07.24 |
[Node.js][pm2] pm2 설치, 명령어 (1) | 2019.07.24 |