Node-cron에서 한국시간을 맞춰 사용하기

작성일 :

Node-cron에서 한국시간을 맞춰 사용하기

Node-cron은 Node.js 환경에서 주기적으로 작업을 실행하기 위해 널리 사용되는 라이브러리입니다. 그러나 기본적으로 Node-cron은 서버의 시스템 시간을 기준으로 작업을 실행합니다. 따라서, 한국 시간(KST, UTC+9)에 맞춰 작업을 실행하려면 추가적인 설정이 필요합니다. 이 글에서는 Node-cron을 사용하여 한국 시간에 맞춰 작업을 실행하는 방법을 단계별로 설명하겠습니다.

1. Node-cron 설치 및 기본 사용법

먼저, Node-cron을 설치해야 합니다. Node-cron은 npm(Node Package Manager)을 통해 쉽게 설치할 수 있습니다:

bash
npm install node-cron

설치 후, 간단한 예제를 통해 Node-cron의 기본 사용법을 알아보겠습니다:

jsx
const cron = require("node-cron");

// 매분마다 실행되는 작업
cron.schedule("* * * * *", () => {
  console.log("작업이 실행되었습니다.");
});

위 코드는 매분마다 "작업이 실행되었습니다." 메시지를 출력합니다. 그러나 이 작업은 서버의 시스템 시간에 기반하여 실행됩니다.

2. Moment-timezone 라이브러리 설치

한국 시간에 맞춰 작업을 실행하려면 시간대를 다룰 수 있는 라이브러리가 필요합니다. Moment.js와 Moment-timezone을 사용하면 쉽게 시간대를 처리할 수 있습니다. 먼저, 이 두 라이브러리를 설치합니다:

bash
npm install moment moment-timezone

3. 한국 시간에 맞춘 작업 스케줄링

Moment-timezone을 사용하여 한국 시간을 기준으로 작업을 스케줄링할 수 있습니다. 다음은 매분마다 한국 시간으로 현재 시간을 출력하는 예제입니다:

jsx
const cron = require("node-cron");
const moment = require("moment-timezone");

// 매분마다 실행되는 작업
cron.schedule("* * * * *", () => {
  const koreaTime = moment().tz("Asia/Seoul").format("YYYY-MM-DD HH:mm:ss");
  console.log(`현재 한국 시간: ${koreaTime}`);
});

위 코드는 매분마다 현재 한국 시간을 출력합니다. moment().tz('Asia/Seoul')을 사용하여 현재 시간을 한국 시간으로 변환하고, 이를 형식화하여 출력합니다.

4. 특정 시간에 작업 실행

특정 시간에 작업을 실행하려면, Node-cron의 cron 표현식을 사용하여 시간을 지정할 수 있습니다. 예를 들어, 매일 오전 9시에 작업을 실행하려면 다음과 같이 설정합니다:

jsx
const cron = require("node-cron");
const moment = require("moment-timezone");

// 매일 오전 9시에 실행되는 작업
cron.schedule("0 0 9 * * *", () => {
  const koreaTime = moment().tz("Asia/Seoul").format("YYYY-MM-DD HH:mm:ss");
  console.log(`현재 한국 시간: ${koreaTime} - 작업이 실행되었습니다.`);
});

위 코드는 매일 오전 9시(KST)에 작업을 실행합니다. cron 표현식 0 0 9 * * *은 초, 분, 시, 일, 월, 요일을 순서대로 나타내며, 이를 통해 원하는 시간에 작업을 스케줄링할 수 있습니다.

5. 다양한 시간대에서 테스트

애플리케이션이 다양한 시간대를 지원해야 하는 경우, 각 시간대에서 올바르게 동작하는지 테스트하는 것이 중요합니다. 다음 예제는 한국 시간과 뉴욕 시간을 각각 출력하는 방법을 보여줍니다:

jsx
const cron = require("node-cron");
const moment = require("moment-timezone");

// 매일 오전 9시에 실행되는 작업 (한국 시간)
cron.schedule("0 0 9 * * *", () => {
  const koreaTime = moment().tz("Asia/Seoul").format("YYYY-MM-DD HH:mm:ss");
  console.log(`한국 시간: ${koreaTime} - 작업이 실행되었습니다.`);
});

// 매일 오전 9시에 실행되는 작업 (뉴욕 시간)
cron.schedule("0 0 9 * * *", () => {
  const newYorkTime = moment()
    .tz("America/New_York")
    .format("YYYY-MM-DD HH:mm:ss");
  console.log(`뉴욕 시간: ${newYorkTime} - 작업이 실행되었습니다.`);
});

위 코드는 각각 한국 시간과 뉴욕 시간에 맞춰 작업을 실행합니다. 이를 통해 애플리케이션이 다양한 시간대에서 올바르게 동작하는지 확인할 수 있습니다.

6. PM2와의 통합

Node-cron 작업을 PM2와 함께 사용하여 프로세스를 관리할 수 있습니다. PM2는 Node.js 애플리케이션을 관리하고, 자동 재시작 및 로드 밸런싱 기능을 제공합니다. 먼저 PM2를 설치합니다:

bash
npm install pm2 -g

이후, PM2를 사용하여 애플리케이션을 실행합니다:

bash
pm2 start app.js

PM2를 사용하면 Node-cron 작업이 안정적으로 실행되고, 서버가 재시작되더라도 작업이 계속 유지됩니다.

7. 예외 처리 및 오류 로그

Node-cron 작업에서 예외가 발생할 수 있으므로, 예외 처리를 통해 안정성을 높이는 것이 중요합니다. 다음은 예외 처리를 추가한 예제입니다:

jsx
const cron = require("node-cron");
const moment = require("moment-timezone");

cron.schedule("* * * * *", () => {
  try {
    const koreaTime = moment().tz("Asia/Seoul").format("YYYY-MM-DD HH:mm:ss");
    console.log(`현재 한국 시간: ${koreaTime}`);
  } catch (error) {
    console.error("작업 실행 중 오류 발생:", error);
  }
});

위 코드는 작업 실행 중 발생할 수 있는 오류를 잡아내고, 콘솔에 로그를 출력합니다. 이를 통해 작업이 실패하더라도 애플리케이션이 중단되지 않도록 할 수 있습니다.

결론

Node-cron을 사용하여 주기적인 작업을 쉽게 스케줄링할 수 있습니다. 한국 시간에 맞춰 작업을 실행하려면 Moment.js와 Moment-timezone을 활용하여 시간을 변환할 수 있습니다. 이 글에서는 Node-cron의 설치부터 한국 시간에 맞춘 작업 스케줄링, 다양한 시간대 지원, PM2와의 통합, 예외 처리 방법까지 자세히 설명했습니다. 이러한 방법들을 통해 Node.js 애플리케이션에서 안정적이고 정확한 시간 관리를 할 수 있기를 바랍니다.