Skip to content

[채팅] 시간 저장 문제

Gayeong Park edited this page Aug 4, 2023 · 2 revisions

채팅 기능 구현시 메시지를 보낼 때 다음과 같은 과정을 거친다.

  1. 메시지 전송시 LocalDateTime으로 발송 시간을 얻어 millisecond로 변환하여 클라이언트단에 전송
  2. MongoDB에는 LocalDateTime으로 변환하여 저장

💥그런데 mongodb에 저장된 채팅 메시지를 확인해보니 한국 시간보다 9시간 전으로 시간이 저장되어 있었다.

Spring단에서 로그를 찍었을때는 정상출력되었다.

검색해보니 Java에서 LocalDateTime은 현재 컴퓨터 서버 시간을 기준으로 설정된다는 것을 알 수 있었다.

LocalDateTime.now() 메서드에 대한 설명을 보자.

→ time-zone 정보는 포함하지 않는다는 것을 알 수 있다.✅

그렇다면 MongoDB로 저장되는 과정에서 UTC로 저장되는 것 같아 공식문서를 찾아봤다.

https://www.mongodb.com/docs/v4.4/tutorial/model-time-data/ 출처 : https://www.mongodb.com/docs/v4.4/tutorial/model-time-data/

공식문서에서도 현지 시간값이 필요한 애플리케이션을 애플리케이션 로직에서 현지 시간을 계산하여 사용하라고 한다.

BagEasy 서비스는 교환학생들 간의 짐거래를 돕는 애플리케이션이고, 교환학교는 전세계에 있는 모든 학교들로 상정하였다. 따라서 유저가 있는 국가에 따라 다른 시간대를 적용할 필요가 있었다. 따라서 클라이언트 단에서 유저가 위치한 국가의 시간대를 적용하여 시간값을 얻는 것으로 결정하였다.