Javascript | Typescript/Node.js

typeORM에서 timezone 올바르게 적용하기

devMarco 2022. 12. 29. 17:04

글로벌 서비스를 대비하여, typeORM 사용시 DB 타임존을 어떻게 적용할지 정리하였습니다.

 

 

typeORM 사용시 다음 절차를 통해, 타임존을 올바르게 설정해 사용할 수 있습니다.

  • DB 타임존 확인하기
  • typeORM의 타임존 설정
  • 설정된 타임존 확인하기

 

DB 타임존 확인하기

DB의 타임존은 다음 쿼리로 확인할 수 있습니다. 현재 저는 AWS RDS mySQL을 사용하고 있어서, 파라미터 그룹 변경을 통해 타임존을 설정할 수 있어요. 참고자료: https://aws.amazon.com/ko/premiumsupport/knowledge-center/rds-change-time-zone/

select NOW(),@@global.time_zone, @@session.time_zone;

그럼 아래와 같이 결과가 나오며, 타임존에 따라 시간이 다르게 표현되는 것을 확인할 수 있습니다.

  • 한국시간(KST, UTC+09:00)

  • UTC

 

typeORM의 타임존 설정

앞에서 확인한 타임존에 맞게, typeORM의 타임존 설정을 적용하여야 typeORM을 사용한 코드 상에서 시간 컬럼 값이 올바르게 표시됩니다. DB 타임존이 KST인 경우 ‘+09:00’, UTC인 경우 ‘+00:00’ 혹은 값을 생략하면 됩니다.(명시적인 +00:00값을 선호하는 편입니다)

const typeormConfig: DataSourceOptions = {
	type: 'mysql',

// ... DB 설정 ...

	timezone: '+09:00',
};

 

설정된 타임존 확인하기

엔티티의 createdAt 컬럼으로 타임존 적용을 확인하였고, 다음과 같이 타임존 값에 따라 결과가 달라지는 것을 확인할 수 있습니다. 끝의 Z를 통해, UTC format으로 통일된 것도 보이네요. (엔티티를 만들어 쿼리하는 코드는 생략하였습니다.)

// typeormConfig.timezone= '+00:00',
createdAt :: 2021-10-06T17:05:46.000Z

// typeormConfig.timezone= '+09:00',
createdAt :: 2021-10-06T08:05:46.000Z