스케줄 업무 자동화

Jae Hoon Shin, 신재훈, Noah·2022년 1월 27일
0

스케줄 업무 자동화,

해야하는 이유

다회용 컵 반납기 사용 기록을
하루에 한번 쿼리 촤라락 돌려서
딱 필요한 데이터만 딱딱딱 하루에 어떤 기계가, 어떤 방법으로 환급을 얼마나 했는지
엑셀처럼 촤라락.

왜냐면 이걸 불러오는 API 가 있는데 매번 다 불러오니까
크롬에 쳐도 1분 정도 걸려서 속터진다.

그래서 이걸 왜 그때 그때 API 콜 하냐는 레코멘데이션을 들었다.
그냥 매일 매일 추려서 디비에 숫자만 넣으면 되지 않냐는?

뒷통수를 씨게 맞은 느낌이였다. 뭐 생각을 해본적도 없기 때문이다.

아무튼 그래서 필요한거

  1. 매일 DB 에 하루가 끝날 때 하루의 총 데이터를 합산해서 저장해야한다.
  2. 그럼 내가 매일 출근하고 API 호출을 하나? 노노
  3. 스케줄 라이브러리를 사용한다.

“node-schedule”가 무엇인지

  • Node Schedule 은 cron과 비슷하기도 하고 cron과 비슷하지만은 않은 스케줄러입니다. - node-schedule은 “특정 작업”을 “특정 반복 조건”에 맞게 스케줄링(예약)할 수 있게 해줍니다.

  • node-schedule을 이용하기전에 확인하고 넘어갑시다.

  • 상황에 따른 대체제 toad-scheduler/ cron

  • 특정한 시간에 작동하도록 예약하는 것이 아니라 특정 간격 마다 작동시키는 것을 원한다면(예를 들어, A함수를 5분마다 작동킨다.), toad-scheduler를 이용하는 게 더 좋을 것입니다.
    Node 서버가 꺼져있는 상태에서는 작동하지 않습니다.

  • Node 서버가 꺼져있을 때까지 작동하길 원한다면 OS에서 작동할 수 있는 cron을 이용하시기 바랍니다.

Jobs and Scheduling

  • node-schedule에서 예약하려는 모든 일들을 "Job" 객체라고 합니다. 직접 job들을 만들 수 있고, schedule() 함수를 이용하여 시간을 설정합니다.

  • 다른 여러 노드 객체들처럼 Job 객체 또한 EventEmitter입니다. 그러므로 이벤트를 발생시켜 일을 처리하게 됩니다. 자주쓸 이벤트는 아래 4가지입니다.

  • run: 각각의 job이 실행된 후에 발생하는 이벤트.

  • scheduled: 각각의 job이 예약되었을 때의 이벤트.

  • canceled: 각각의 job이 취소되었을 때의 이벤트.

  • error: 각각의 job에 에러가 발생했을 때의 이벤트.

모듈 비교

딱 보면 Node-schedule 이 좋아 보임

⏰ what is Cron?

Cron은 유닉스 같은 컴퓨터 운영 체제의 시간 기반 작업 스케줄러다. 소프트웨어 환경을 설정하고 유지하는 사용자는 Cron을 사용하여 고정 시간, 날짜 또는 간격으로 주기적으로 실행되도록 작업(명령 또는 셸 스크립트)을 예약한다. 일반적으로 시스템 유지보수 또는 관리를 자동화한다. Cron이라는 이름의 유래는 시간의 그리스어인 χρόνος (chronos)어원에서 왔다.

Cron 스타일로 작성된 매주 월 ~ 금 11시 30분 00초에 실행되는 작업이다.

// Runs every weekday (Mon ~ Fri)
// at 11:30
const j = schedule.scheduleJob('00 30 11 * * 1-5', () => {
    console.log('Cron-style Scheduling')
})

월 ~ 일 17시 45분 실행하려면 RecurrenceRule 객체 인스턴스 생성 후 dayOfWeek 속성에 해당 요일을 전달해야 하고 Range()를 통해 범위를 지정해야한다.

// Recurrence Rule Scheduling
// Sun ~ Sat 0 ~ 6
// 월 ~ 일 17시 45분 실행
const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(0, 6)];
rule.hour = 17;
rule.minute = 45;
const k = schedule.scheduleJob(rule, () => {
    console.log('Recurrence Rule Scheduling');
})

non-Cron 스타일, Object Literal 문법으로 손 쉽게 스케줄 설정하는 방법이다.

// Object Literal Syntax
// Sun ~ Sat 0~6
// every Saturday at 21:10
const job = schedule.scheduleJob({hour: 21, minute: 10, dayOfWeek: 6}, () => {
    console.log('Object Literal Syntax');
})

Date를 활용하여 시작 시간과 종료 시간을 지정하여 스케줄을 설정해봤다.

  // Set start time and End time
  const startTime = new Date(Date.now()+5000);
  const endTime = new Date(startTime.getTime()+5000);
  const m = schedule.scheduleJob({start: startTime, end: endTime, rule: '*/1*****'}, () => {
      console.log('Set startTime and endTime')
  })

[Reference]

https://medium.com/nodejs-server/node-schedule-pm2-8f7831ed231e

https://jsikim1.tistory.com/177

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

profile
🇰🇷🇺🇸 #Back-End Engineer

0개의 댓글