티스토리 뷰

BackEnd/Node.js

node.js scheduler

철철22 2019. 7. 5. 00:12
반응형

안녕하십니까 이번에는 node js 환경에서 스케줄러를 이용하는 방법을 작성하려 합니다.

그전에 스케줄러라는 개념에 대해 알고 있으신가요?

 

위키백과에는 스케줄링을 다음과 같이 정의하고 있습니다.

 

스케줄링(scheduling)은 다중 프로그래밍을 가능하게 하는 운영 체제의 동작 기법이다. 운영 체제는 프로세스들에게 CPU 등의 자원 배정을 적절히 함으로써 시스템의 성능을 개선할 수 있다.

 

운영 체제의 동작 기법은 위처럼 정의를 하는데 프로그래밍에서 스케줄링은

일정 주기에 맞춰 로직을 실행시키는 방법?이라고 생각을 합니다. 

 

보통 사람들이 많이 사용하는 시간대에 일괄 데이터 처리를 하게 되면 cpu 사용량이 증가하여 서버가 죽거나 할 수 있어 트래픽이 적은 시간대에 일괄처리를 하기 위해 스케줄러를 사용합니다.

 

Linux를 많이 이용하시는 분은 crontab이라고 들어보셨죠? cron이 unix os 계열의 스케줄러입니다.

그리고 대부분의 프로그래밍 언어들 또한 스케줄러를 제공을 하고 있으며, node js 또한 스케줄러 모듈이 있습니다.

 

node-schedule이라는 모듈인데 많이들 사용하고 있더라고요.

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

실행 주기에 대한 설정은 crontab과 같습니다!

왼쪽부터 초(생략 가능) 분 시간 일 달 주 라는 규칙이며

 

예를 들어

23 30 * * * * 는 매 시간 30분 23초에 실행시키라는 규칙이며

* * 12 1 * 는 매년 1월 12일에 실행시키라는 규칙이 적용됩니다.

 

그럼 node js에서 적용을 해보겠습니다. (typescript)

 

pakage.json

"dependencies": {
    "node-schedule": "^1.3.2"
  },
  "devDependencies": {
    "@types/node-schedule": "^1.2.3"
  }

 


cronTab.ts

import schedule from "node-schedule";
import l from "../configure/logger";

/** cron-style Scheduling
*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
 */
export const scheduled = schedule.scheduleJob("0 0 * * *", async (cb) => {
  // export const scheduled = async () => {
  l.debug("Start Scheduling at " + new Date());
  console.log("자정마다 호출될거임!");
  l.debug("End Scheduling at " + new Date());
});

 

이렇게 만든 후 

여러분이 사용하는 index.ts나 function을 실행시키는 부분에 등록을 하면 끝입니다.

 

node js 자체가 모듈들이 잘 되어있다 보니 스케줄러도 또한 손쉽게 적용을 할 수 있었습니다.

 

감사합니다.

 

 

2020-02-18 추가

 

node.js Scheduler를 이용하면 쉽게 스케줄러를 만들 수 있지만,

클러스터 모드를 이용할 때 주의해야 할 점이 있다면, pm2 나 forever 같은 프로세서 매니저를 이용할 경우,

processer.isMaster를 이용할 수 없어 클러스터마다 스케줄러가 돈다.

 

그 이유는 pm2나 forever 모듈이 master가 되어 클러스터로 도는 놈들은 worker 프로세스가 된다.

 

그래서 클러스터로 돌릴 경우 그냥 linux cron을 이용하자.

 

 

출처 및 참고

 

스케줄링

https://ko.wikipedia.org/wiki/%EC%8A%A4%EC%BC%80%EC%A4%84%EB%A7%81_(%EC%BB%B4%ED%93%A8%ED%8C%85)

 

node-schedule

https://www.npmjs.com/package/node-schedule

 

반응형

'BackEnd > Node.js' 카테고리의 다른 글

FCM Silent Push  (0) 2019.08.17
node.js FCM으로 Push Server 구현  (2) 2019.07.21
node.js File upload 하기  (0) 2019.06.04
node.js env파일 분리하기  (0) 2019.05.30
node.js express + typescript + sequelize (ORM) 다양한 기능  (0) 2019.05.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함