Skip to content
dev-marco-song
Go back

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

Edit page

글로벌 서비스를 대비하여, 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;

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

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

Edit page
Share this post on:

Previous Post
API 응답 속도가 얼마나 빨라야될까? (페이지 로딩시간, API TPS, latency)
Next Post
4년차 초보 개발자의 성장 방법