Sequelize에서 모델을 생성할 때, 'timestamps: true' 설정을 추가하면 DB에 현재 시각이 created_at 컬럼에 자동으로 추가된다.
그러나 Sequelize의 기본 시간 설정은 UTC(Universal Time Coordonne)이고, 이는 영국 시간을 기준점으로 하기 때문에 우리나라보다 9시간이 느린 값을 가진다.
따라서 이를 우리나라 시간으로 반영하기 위해서는 Sequelize의 config 파일에 "timezone": "+09:00" 설정을 추가해줘야 한다.
그러나 여기서 끝이 아니다.
DB에 저장된 datetime 값을 find로 조회하게 되면, timezone 적용 이전 시각(UTC 기준 시각)이 다시 표시된다. (로드시 nodejs가 자체의 타임존 설정에 따라 시간을 다시 되돌리는 현상)
1. process.env.TZ 사용
https://stackoverflow.com/questions/8083410/how-can-i-set-the-default-timezone-in-node-js
How can I set the default timezone in node.js?
How do I set the default timezone in node.js?
stackoverflow.com
위 글과 같이 TZ라는 환경 변수를 'Asia/Seoul'로 설정하거나,
2. dialectOptions 사용
[nodejs-sequelize] timezone 적용, 조회시 시간 제대로 표기하기
sequelize 를 사용하면 DB에 저장시 자동으로 생성일, 수정일을 업데이트 해주는 기능이 있다. 그 옵션이...
blog.naver.com
위 글과 같이 sequelize config 파일에서 dialectOptions 설정을 사용하여 데이터 로드 시 datetime이 아닌 String 형태로 가져오게 하여 nodejs가 timezone 값을 역으로 계산하여 시간을 되돌리게 하는 것을 막을 수 있다.
필자는 두 번째 방법을 사용하였다.
// config.js
const production = {
username: process.env.MYSQL_USERNAME,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
host: process.env.MYSQL_HOST,
dialect: "mysql",
port: process.env.MYSQL_PORT,
timezone: "+09:00",
dialectOptions: {
charset: "utf8mb4",
dateStrings: true,
typeCast: true,
},
};
또한 다음과 같이 MySql의 타임존 또한 설정해줘야 한다.
SET GLOBAL time_zone = 'Asia/Seoul';
SET time_zone = 'Asia/Seoul';
select @@global.time_zone, @@session.time_zone,@@system_time_zone;
References
Sequelize, 왜 9시간 차이가 발생하는 걸까?
Node.js로 API 서버를 개발할 때 대부분 Sequelize를 사용하게 됩니다. Sequelize의 기본 시간설정은 Universal Time Coordonne (이하 UTC)를 사용합니다. UTC는 영국의 그리니치 천문대 시간을 기준점으로 합니다.
illua.tistory.com
'TIL > Node.js, express' 카테고리의 다른 글
req.body에 한글이 넘어와서 TypeError 발생 (Request path contains unescaped characters) (0) | 2022.12.07 |
---|---|
SameSite 정책으로 인해 브라우저로 쿠키가 전송되지 않는 문제 해결 (1) | 2022.12.01 |
node.js로 웹페이지 스크래핑하기 (feat. cheerio) (0) | 2022.11.30 |
Node.js(express) & React를 이용한 카카오 소셜 로그인 구현하기 - 2 (0) | 2022.08.20 |
Node.js(express) & React를 이용한 카카오 소셜 로그인 구현하기 - 1 (0) | 2022.08.18 |