다양한 사용자들이 접속하는 웹 개발을 진행하다보면 게시글 작성 시간, 접속 시간, 댓글 작성 시간 등 시간과 관련해서 처리해야 하는 작업들이 존재합니다. 기본적으로 DB서버에서 제공하는 NOW()같은 기능을 사용해도 되지만, 이는 사용자가 읽기에 직관적인 정보도 아닐 뿐 더러 서버 시간이 한국 시간과 다르면 원하는 시간과 다른 시간이 출력될 수 있습니다. 이를 해결하기 위해서 사용자가 읽기에도 직관적이며 내가 원하는 시간이 출력되도록 돕는 moment.js 모듈에 대해 알아보겠습니다.
표준시
모듈을 사용하기 전에 우리는 표준시에 대한 간단한 배경지식을 알고있어야 합니다. 만약, 모듈을 사용하지 않고 기본적으로 DB서버나 자바스크립트에 내장된 시간관련 메소드를 사용하면 GMT, UTC, UTC+9 등과 같은 알파벳이 출력됩니다. 이 알파벳이 바로 표준시와 관련된 것들입니다.
- GMT: Greenwich Mean Time의 약자로 영국 그리니치 천문대를 기준으로하는 평균 태양시를 의미합니다.
- UTC: Universal Time, Coordinated의 약자로 세슘 원자 진동수를 기준으로 만들어진 시간을 의미합니다.
- UTC+9: UTC의 기준시간에 9시간을 더한 시간, 즉 한국 표준시와 동일합니다.
- KTS: Korean Standard Time의 약자로 대한민국의 표준시입니다.
이 외에도 DST로 표기되는 서머타임을 일정 기간동안 사용하는 국가도 존재합니다. Daylight Saving Time의 약자이며 하절기에 표준시를 한 시간 앞당기는 것을 의미합니다.
moment.js 기본
npm 명령어를 통해 모듈을 설치하고, moment를 선언합니다
npm install --save moment
var moment = require('moment');
- 현재 시간을 콘솔에 출력 해 봅시다. (저는 실행 시 Sun Sep 01 2019 10:41:04 GMT+0900 이렇게 출력되었네요.)
console.log(`${moment()}`);
- 아래의 코드를 통해 직관성을 확보할 수 있습니다. YYYY,MM,DD에는 년,월,일 이 담기고, HH,mm,ss에는 시,분,초 가 담깁니다.
console.log(`${ moment().format("YYYY년 MM월 DD일 HH:mm:ss") }`);
- 각 월, 일, 요일, 시간 등만 따로 출력하고 싶다면 다음과 같은 코드를 사용합니다.
console.log(`${ moment().month() }`);
console.log(`${ moment().date() }`);
console.log(`${ moment().day() }`);
- '글 작성 ~일 지남' 같은 기능을 아래 코드를 통해 구현할 수 있습니다. 기준 시간에 대해 몇 일이 지났는지 알려줍니다.
console.log(`${ moment().diff(moment('2019-08-01'),"days") }`);
moment-timzone
만약 본인의 컴퓨터가 아닌 서버 컴퓨터 작업을 하시는 경우에는 서버가 한국에 위치하지 않아서 시간이 다르게 출력되는 경우도 존재합니다. 이럴 때 필요한 것이 moment-timezone 모듈입니다. moment 모듈과 moment-timezone 모듈을 설치 후, 선언한 moment의 타임존을 원하는 지역으로 설정해 주시면 됩니다.
npm install --save moment
npm install --save moment-timezone
var moment = require('moment');
require('moment-timezone');
moment.tz.setDefault("Asia/Seoul");
Reference
Node.js 에서 한국시간을 보기좋게 표현하는 방법 외에도, timezone이라는 개념에 대한 전반적인 이해나 자바스크립트의 Date 객체가 궁금하시다면 아래의 자료들을 참고하시면 좋을 것 같습니다.