kjp
87
2020-05-18 18:52:33
3
652

JPA에서 MySql 날짜 컬럼 관련 문의


JPA에서 MySql에 날짜를 저장할 때,

Global 서비스를 하는 경우, 하나의 DB에 여러 시간대에서 수집한 Data가 들어간다고 할 때

어떤 날짜 Java Type과 MySql날짜 Typed을 조합 사용하는 것이 바람직할까요?

Java8에서 추가된 것을 보면 아래 3가지가 있는데,

LocalDateTime
OffsetDateTime
ZonedDateTime

LocalDateTime은 DATETIME과 연동해서 사용하면 되는데,

OffsetDateTime이나 ZonedDateTime은 제대로 사용하려면 어떻게 사용하는게 바람직한지 궁금합니다.

(columnDefinition = "TIMESTAMP WITH TIME ZONE"는 mysql에서는 적용되지 않는 것 같구요)


Global 서비스를 하는 경우,

하나의 DB에 여러 시간대에서 수집한 Data가 들어간다고 할 때

그냥 UTC 시간으로 모두 통일해서 yyyyMMddHHmmss로 넣을 수도 있고,

아니면 ZoneOffSet값을 추가해서 local 시간에 오프셋을 추가하는 방식으로

yyyyMMddHHmmss+02
yyyyMMddHHmmss+08

와 같이 넣을 수 있을 것 같은데요,


일반적으로 어떤 방식이 더 선호되는지 궁금하고, 문제점들이 없는지

경험자분들의 조언 구합니다.




0
  • 답변 3

  • 으어어어어
    725
    2020-05-18 18:59:13 작성 2020-05-18 19:01:02 수정됨

    저장할때 기준이 될 타임존을 하나 정하고 시간을 저장할때 기준 타임존으로 시간을 변경하여 요청한 클라이언트의 타임존과 함께 저장하고 읽어올때 요청한 클라이언트 타임존으로 시간을 변경하는게 어떨까요?


    이러면 타임존을 저장해야 하니까 조금 번거로울 수 도 있지만 클라이언트의 시간대로 데이터를 변경하는 것은 편할 것 같습니다.

  • kjp
    87
    2020-05-18 19:15:32

    네. 그래서 UTC time을 기준으로 그냥 MySQL DATETIME 형태로 모두 저장할까 하고 있었는데,


    여기를 보니, OffsetDateTime을 JPA 통해서 mapping하여 사용할 수도 있을 거 같엇,

    https://www.baeldung.com/jpa-java-time

    그렇게 된다면 time offset까지 같이 저장되니까 훨씬 유용할 것 같은데, mysql에서는 안되는 것 같네요.



  • 초무쿤
    6k
    2020-05-18 23:05:05

    그냥 UTC로  하시면 될듯합니다만..

    출력해서 보여줄대 사용자의 시간대로 보여주던지 말던지는 선택하면 되고요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.