티스토리 뷰

Side Technologies

DB : MySQL 시간 저장

Korean Eagle 2024. 3. 4. 00:58
728x90

1. 시스템 개발시에 시간 저장은 상당히 골치 아픈 부분이다. 특정 국가 내에서만 사용되는 시스템이라면 어떤 것을 사용하더라도  상관없다.

 

2. 국제적인 서비스의 경우 시차가 존재하기 때문에 이것이 문제가 된다.

 

3. 국제적인 서비스를 위한 가장 쉬운 솔루션은 Timestamp이다. 이것은 어디에서나 동일하기 때문에 값을 필요에  따라 원하는 타입으로 변경 만하면 현지의 시간을 구할 수 있다.

  3-1 문제는 UNIX 타임이라 대략 1970년 부터 저장되고 4바이트라 2038년 까지 만 저장된다.

 

4. 더 나은 방법은 8바이트를 사용하는 datetime 이다.

  4-1 문제는 타임존 정보가 없기 때문에 시스템을 사용하는 지역 세팅에 따라서 그 지역의 시간이 저장된다.

  4-2 하나 방법으로는 datetime을 UTC 기준으로 저장해 주고 사용할 때는 Zoneddatetime 같은 것으로 변경해서 쓰는 방법이다.

    4-2-1 이렇게 쓰면 괜찮긴 한데 @CreationTimestamp 같은 것을 쓰기 어려워진다. 물론 우회해서 가능은 하다. 

    4-2-2 타임존 설정이 DB 조회시 나오지가 않는다는 자체가 불편하고 위험하다.

 

5. postgreql를 timestamp with timezone 을 사용하는 게 제일 쉽다.

  5-1 이것도 역시 저장시에 datetime에다가 zone 데이터를 붙여서 만들기는 하지만 가시적으로 zone 데이터가 보이기 때문에 작업하기가 훨씬 낫다.

728x90
댓글