• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

23.11.18 02:35 작성 23.11.18 02:36 수정 조회수 441

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

질문자

2023.11.18

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

 

서버의 타임존은 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

질문자

2023.11.18

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

 

인터넷에 검색해보니 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

질문자

2023.11.18

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을 제거한 건 처음 봅니다.