Node.js 환경에서 한국시간으로 맞추는 방법

작성일 :

Node.js 환경에서 한국시간으로 맞추는 방법

Node.js는 서버사이드에서 자바스크립트를 실행할 수 있게 해주는 런타임 환경입니다. 웹 애플리케이션, API 서버, 스크립트 등을 개발할 때 널리 사용됩니다. 하지만 글로벌 서비스를 운영하다 보면, 다양한 시간대를 다루는 것이 중요해집니다. 특히 한국 시간(KST, UTC+9)으로 맞춰서 애플리케이션을 운영해야 하는 경우가 많습니다. 이 글에서는 Node.js 환경에서 한국 시간을 다루는 방법을 상세히 설명하겠습니다.

1. 기본 Date 객체를 사용하여 한국 시간 출력하기

Node.js의 Date 객체는 기본적으로 서버의 시스템 시간을 따릅니다. 이를 한국 시간으로 변환하기 위해서는 UTC 시간을 계산한 뒤, 9시간을 더하는 방법이 있습니다.

jsx
const date = new Date();
const utc = date.getTime() + date.getTimezoneOffset() * 60000;
const koreaTime = new Date(utc + 9 * 3600000);

console.log(`현재 한국 시간: ${koreaTime.toLocaleString("ko-KR")}`);

이 방법은 간단하지만, 코드가 복잡해지고 다른 시간대와의 차이 계산이 어려울 수 있습니다.

2. moment.js와 moment-timezone 라이브러리를 사용하기

moment.jsmoment-timezone 라이브러리를 사용하면 날짜와 시간을 더 쉽게 관리할 수 있습니다. 먼저 이 두 라이브러리를 설치합니다:

bash
npm install moment moment-timezone

이후 다음과 같이 한국 시간을 출력할 수 있습니다:

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

const koreaTime = moment().tz("Asia/Seoul").format("YYYY-MM-DD HH:mm:ss");
console.log(`현재 한국 시간: ${koreaTime}`);

moment-timezone을 사용하면 다양한 시간대의 시간을 쉽게 처리할 수 있어 매우 편리합니다.

3. cron.schedule과 함께 사용하기

서버에서 주기적으로 특정 작업을 수행해야 할 때, node-cron 라이브러리를 사용할 수 있습니다. 이를 한국 시간에 맞춰 설정하려면 moment-timezone과 결합하면 됩니다.

먼저 node-cron을 설치합니다:

bash
npm install node-cron

이후, 다음과 같이 설정할 수 있습니다:

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}`);
});

이 코드는 매분마다 현재 한국 시간을 출력합니다. cron 표현식을 조정하여 원하는 주기에 맞춰 작업을 수행할 수 있습니다.

4. 애플리케이션 전역에서 한국 시간 사용하기

애플리케이션 전역에서 한국 시간을 사용해야 하는 경우, 시간을 포맷팅하는 유틸리티 함수를 정의하고 이를 재사용하는 것이 좋습니다.

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

function getKoreaTime() {
  return moment().tz("Asia/Seoul").format("YYYY-MM-DD HH:mm:ss");
}

console.log(`현재 한국 시간: ${getKoreaTime()}`);

// 다른 모듈에서도 이 함수를 사용
module.exports = { getKoreaTime };

다른 파일에서 이 함수를 불러와서 사용할 수 있습니다:

jsx
const { getKoreaTime } = require("./path/to/your/utils");

console.log(`현재 한국 시간: ${getKoreaTime()}`);

이 방법을 사용하면 코드의 일관성을 유지하고, 시간 관련 오류를 줄일 수 있습니다.

5. 데이터베이스와 한국 시간

데이터베이스에 시간을 저장하거나 조회할 때도 한국 시간을 일관되게 사용하는 것이 중요합니다. 예를 들어, MySQL을 사용하는 경우, 서버 시간대를 UTC로 설정하고 애플리케이션에서 한국 시간대로 변환하는 것이 일반적입니다. 이는 시간대 변경에 따른 혼란을 줄일 수 있기 때문입니다.

Node.js에서 MySQL을 사용할 때, moment-timezone을 이용해 시간을 변환할 수 있습니다:

jsx
const mysql = require("mysql");
const moment = require("moment-timezone");

const connection = mysql.createConnection({
  host: "localhost",
  user: "yourUsername",
  password: "yourPassword",
  database: "yourDatabase",
});

connection.connect();

// 한국 시간으로 현재 시간 저장
const now = moment().tz("Asia/Seoul").format("YYYY-MM-DD HH:mm:ss");
connection.query(
  "INSERT INTO yourTable (timestamp) VALUES (?)",
  [now],
  (error, results, fields) => {
    if (error) throw error;
    console.log("현재 한국 시간 저장:", now);
  }
);

connection.end();

데이터 조회 시에도 동일한 방식으로 시간을 변환할 수 있습니다:

jsx
connection.query("SELECT * FROM yourTable", (error, results, fields) => {
  if (error) throw error;
  results.forEach((row) => {
    const koreaTime = moment(row.timestamp)
      .tz("Asia/Seoul")
      .format("YYYY-MM-DD HH:mm:ss");
    console.log(`데이터베이스에서 불러온 한국 시간: ${koreaTime}`);
  });
});

6. 테스트와 디버깅

애플리케이션에서 시간을 다루는 코드를 테스트하고 디버깅할 때, 시간대를 명확하게 설정하는 것이 중요합니다. moment-timezone을 사용하면 다양한 시간대에서 코드를 테스트할 수 있습니다. 예를 들어, 한국 시간과 다른 시간대에서 동일한 코드가 올바르게 동작하는지 확인할 수 있습니다.

jsx
const testTime = "2024-06-10 12:00:00";
const utcTime = moment.tz(testTime, "UTC").format("YYYY-MM-DD HH:mm:ss");
const koreaTime = moment
  .tz(testTime, "Asia/Seoul")
  .format("YYYY-MM-DD HH:mm:ss");
const newYorkTime = moment
  .tz(testTime, "America/New_York")
  .format("YYYY-MM-DD HH:mm:ss");

console.log(`UTC 시간: ${utcTime}`);
console.log(`한국 시간: ${koreaTime}`);
console.log(`뉴욕 시간: ${newYorkTime}`);

이 코드를 통해 다양한 시간대에서의 시간을 비교하고, 애플리케이션이 올바르게 작동하는지 확인할 수 있습니다.

결론

Node.js 환경에서 한국 시간을 맞추는 방법은 여러 가지가 있습니다. 기본 Date 객체를 사용하는 간단한 방법부터 moment-timezone 라이브러리를 사용한 정교한 시간 관리까지 다양한 방법을 활용할 수 있습니다. 또한, cron.schedule과 결합하여 주기적인 작업을 한국 시간에 맞춰 수행할 수 있으며, 데이터베이스와의 통합을 통해 일관된 시간 관리를 할 수 있습니다. 이러한 방법들을 활용하여 Node.js 애플리케이션에서 한국 시간을 효과적으로 다루고, 시간 관련 오류를 줄일 수 있기를 바랍니다.