CS/DB

시간 기준 변경 (LocalTimeZone → UTC)

:)jun 2023. 8. 28. 21:36

현재 우리 서비스는 LocalTimeZone을 사용하고 있는데 UTC 표준을 사용하기로 하고 해당 구현을 변경하고자 한다.

이유를 다음 3가지다.

  1. 물론 우리 서비스가 글로벌 서비스는 아니지만 시간 표준을 맞출 필요가 있었다.
  2. AWS 서비스를 사용할 때 UTC 표준 시간을 사용하지 않으면 서비스를 사용할 때 귀찮음이 있을 수 있다는 피드백을 받았다.
  3. UNIX Time을 이용하면 프론트엔드에서 day.js 라이브러리를 이용해서 ‘몇 분 전’, ‘몇 일 전’을 쉽게 표현할 수 있다.

먼저 mysql db 기본 시간 설정 값을 확인해준다.

SELECT @@global.time_zone, @@session.time_zone;

 

time_zone 값이 UTC로 설정되어 있는 모습.

 

이제 스크랩을 추가할 때 시간을 LocalTimeZone을 UnixTime으로 변경하는 로직 변경작업을 해야한다.

그렇다면 DB에 BIGINT 타입으로 저장해야 할까? 아니면 datetime 타입으로 저장해야 할까?

→ 관리하는 입장에서 DB를 봤을 때, 눈에 바로 들어오지 않는 UNIX TIME으로 저장한다면 관리하기가 어려울 것이기 때문에 타입은 datetime으로 결정

TimeService에 UnixTime을 LocalDateTime으로 변경하는 메서드, LocalDateTime을 UnixTime으로 변경하는 메서드 추가하여 필요한 부분에 적용시켜줬다.

@Service
public class TimeService {

    public static LocalDateTime fromUnixTime(long unixTime) {
        return LocalDateTime.ofInstant(Instant.ofEpochSecond(unixTime), ZoneOffset.UTC);
    }

    public static Long fromLocalDateTime(LocalDateTime localDateTime) {
        return localDateTime.toEpochSecond(ZoneOffset.UTC);
    }
}

'CS > DB' 카테고리의 다른 글

[업무에 바로 쓰는 SQL 튜닝] 1장. MySQL과 MariaDB 개요  (1) 2023.12.02