-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
AWS-RDS 사용중인데 createdAt 시간이 실제 시간과 맞지 않습니다.
23.11.18 02:35 작성 23.11.18 02:36 수정 조회수 441
0
왼쪽은 엣지 inprivate, 오른쪽은 크롬 시크릿 모드 브라우저입니다.
서로의 채팅 입력 시간이 9시간 전으로 표시되고 있습니다.
실제로 서버의 createdAt은 한국 표준시라고는 되어있지만 실제 시간보다 9시간 느린 시간이 저장되었고
entities/channelChats.ts의 설정 내용은 강사님의 깃헙 내용과 동일했습니다.
aws - rds에서 확인해본 DB도
지역이 ap-northeast-2a, 서울로 잘 지정되어 있었습니다.
혹시 작업 중에 이런 경우 보신 적 있으신가요?
어디를 더 살펴봐야 서버에 제대로 된 현재 시간이 저장될 수 있을지 조언 부탁드립니다.
답변을 작성해보세요.
0
조현영
지식공유자2023.11.18
utc로 현재시간을 저장해야 하는데 한국시간으로 저장돼서 9시간 차이가 나네요.
서버와 DB의 타임존을 확인해야 합니다. 혹시 임의로 서울 시간으로 수정하신 게 있으신가요?
서버에서 node를 입력하고 new Date() 쳐서 나오는 시간을 확인해보세요.
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시간 느리네요
DB는 nestjs가 typeorm 통해서 전달하는 데이터를 저장만 하니까,
nestjs에서 타임존 아니면 시간을 설정해주면 해결될 것 같은데.. 맞을까요?
jeongho218
질문자2023.11.18
부분적으로 해결한것 같습니다...
인터넷에 검색해보니 ormconfig.json 아니면 app.module.ts에서 timezone 옵션을 넣어줄 수 있다는걸 확인했고
저는 ormconfig.json이 없어서 app.module.ts에서 아래처럼 timezone 옵션 넣어줬습니다
TypeOrmModule.forRoot({
timezone: 'Asia/Seoul',
}),
브라우저에서 채팅을 보낸 시간이 제대로 찍히는데
DB에서는 여전히 9시간 전으로 저장되었네요
저는 DB는 nestjs가 typeorm 통해서 전송한 데이터를 고스란히 저장만 할거라고 생각했는데 아닌걸까요?
DB에도 타임존 설정이 필요한걸까요?
jeongho218
질문자2023.11.18
AWS RDS에서 설정할 수 있는 타임존에는 SYSTEM이 없어서 'Asia/Seoul'로 설정하였습니다
DB 타임존, 시간 변경 확인하였고
이후 테스트 해보니 이번에는 DB에는 현재 시간이 저장되나
브라우저에서 상대방의 채팅 입력 시간이 9시간 빠르게 표시되었습니다.
다시 app.module.ts에서 TypeOrmModule의 timezone: 'Asia/Seoul' 옵션 제거하였고
브라우저 DB 모두 정상적으로 시간 나오는 것 확인했습니다..
문제 해결은 했지만 어째서 이런 현상이 발생하는지 이해가 가지 않습니다
express+sequelize와 동일한 RDS 인스턴스 사용할때는 잘못된 시간이 저장되는 일은 없었거든요
왜 이런걸까요.. 혹시 nest typeorm 사용하시던 중에 이런 비슷한 상황 보신 적은 없으신가요
조현영
지식공유자2023.11.18
저도 처음 보는 현상이네요. DB의 타임존이 Asia/Seoul이라서 typeorm의 타임존을 Asia/Seoul로 맞춰준 적은 있는데, 반대로 typeorm의 타임존 Asia/Seoul을 제거한 건 처음 봅니다.
답변 1