인프런 커뮤니티 질문&답변

jeongho218님의 프로필 이미지
jeongho218

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

웹소켓 연동하기(socket.io, gateway)

AWS-RDS 사용중인데 createdAt 시간이 실제 시간과 맞지 않습니다.

작성

·

827

·

수정됨

0

캡처.JPG

왼쪽은 엣지 inprivate, 오른쪽은 크롬 시크릿 모드 브라우저입니다.

서로의 채팅 입력 시간이 9시간 전으로 표시되고 있습니다.

 

실제로 서버의 createdAt은 한국 표준시라고는 되어있지만 실제 시간보다 9시간 느린 시간이 저장되었고

 

entities/channelChats.ts의 설정 내용은 강사님의 깃헙 내용과 동일했습니다.

 

aws - rds에서 확인해본 DB도

지역이 ap-northeast-2a, 서울로 잘 지정되어 있었습니다.

 

혹시 작업 중에 이런 경우 보신 적 있으신가요?

어디를 더 살펴봐야 서버에 제대로 된 현재 시간이 저장될 수 있을지 조언 부탁드립니다.

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

utc로 현재시간을 저장해야 하는데 한국시간으로 저장돼서 9시간 차이가 나네요.

서버와 DB의 타임존을 확인해야 합니다. 혹시 임의로 서울 시간으로 수정하신 게 있으신가요?

서버에서 node를 입력하고 new Date() 쳐서 나오는 시간을 확인해보세요.

jeongho218님의 프로필 이미지
jeongho218
질문자

아뇨 제가 사전에 시간을 설정했던 적은 없습니다.

 

서버의 타임존은 Asia/Seoul이며 new Date()의 결과는 아래와 같습니다.


// 2023년 11월 18일 오후 4시 34분 기준

console.log(new Date());
// 2023-11-18T07:34:51.817Z

console.log(Date());
// Sat Nov 18 2023 16:34:51 GMT+0900 (대한민국 표준시)

console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
// Asia/Seoul

 

DB의 타임존이 UTC이고 실제 시간보다 9시간 느리네요

캡처.JPG

 

DB는 nestjs가 typeorm 통해서 전달하는 데이터를 저장만 하니까,

nestjs에서 타임존 아니면 시간을 설정해주면 해결될 것 같은데.. 맞을까요?

jeongho218님의 프로필 이미지
jeongho218
질문자

부분적으로 해결한것 같습니다...

 

인터넷에 검색해보니 ormconfig.json 아니면 app.module.ts에서 timezone 옵션을 넣어줄 수 있다는걸 확인했고

저는 ormconfig.json이 없어서 app.module.ts에서 아래처럼 timezone 옵션 넣어줬습니다

TypeOrmModule.forRoot({
timezone: 'Asia/Seoul',
}),

 

브라우저에서 채팅을 보낸 시간이 제대로 찍히는데

캡처.JPG

DB에서는 여전히 9시간 전으로 저장되었네요

 

저는 DB는 nestjs가 typeorm 통해서 전송한 데이터를 고스란히 저장만 할거라고 생각했는데 아닌걸까요?

DB에도 타임존 설정이 필요한걸까요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

@@time_zone을 SYSTEM으로 바꿔보세요. 저는 now()를 할 때 타임존이 붙지 않습니다

jeongho218님의 프로필 이미지
jeongho218
질문자

AWS RDS에서 설정할 수 있는 타임존에는 SYSTEM이 없어서 'Asia/Seoul'로 설정하였습니다

image

DB 타임존, 시간 변경 확인하였고

image

이후 테스트 해보니 이번에는 DB에는 현재 시간이 저장되나

브라우저에서 상대방의 채팅 입력 시간이 9시간 빠르게 표시되었습니다.

image

image

다시 app.module.ts에서 TypeOrmModule의 timezone: 'Asia/Seoul' 옵션 제거하였고

브라우저 DB 모두 정상적으로 시간 나오는 것 확인했습니다..

image

image

 

문제 해결은 했지만 어째서 이런 현상이 발생하는지 이해가 가지 않습니다

express+sequelize와 동일한 RDS 인스턴스 사용할때는 잘못된 시간이 저장되는 일은 없었거든요

왜 이런걸까요.. 혹시 nest typeorm 사용하시던 중에 이런 비슷한 상황 보신 적은 없으신가요

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

저도 처음 보는 현상이네요. DB의 타임존이 Asia/Seoul이라서 typeorm의 타임존을 Asia/Seoul로 맞춰준 적은 있는데, 반대로 typeorm의 타임존 Asia/Seoul을 제거한 건 처음 봅니다.

jeongho218님의 프로필 이미지
jeongho218

작성한 질문수

질문하기