발단
개발을 하다 보면 시간에 대한 정보를 저장하는 일이 자주 생깁니다. 제가 개발을 할 때나, 여러 강의를 보다 보면, 적어도 어떤 데이터의 생성 시간정도는 기록을 했습니다.
저 같은 경우는 지금까지 별생각 없이 Java의 `LocalDateTime`이라는 클래스를 이용하여 그 시점을 기록하였습니다. 하지만 최근 이와 관련된 문제가 발생했습니다.
방금 생성을 했는데, 9시간 전에 생성했다고 표기가 되는데...
9시간은 뭔가 익숙한데?
원인은 저 상황에서 서버를 Docker로 말아서 배포를 했는데, 서버 시간이 그리니치 평균 시(GMT)였기 때문에 발생한 문제였습니다.
Docker에서 서버 시간을 설정하는 방법부터, LocalDateTime에서 TimeZone을 설정하는 방법까지 여러 방법을 검색해 봤지만, 당시에는 패닉이 와서 무시하고 넘어가게 되었습니다.
그래서 이번 기회에 Java에서의 시간과 관련된 내용을 정리하고 넘어가고자 합니다.
목표
이 시리즈에선 Java와 Spring에서 시간 정보를 표기하기 위해선 어떤 클래스를 사용하고, DB에선 어떤 데이터 타입을 이용하는 것이 좋을지에 대해서 조사하고, 다른 개발자들은 어떤 방법을 이용하는지에 대해서 조사하는 것을 목표로 합니다.
0. 🚪 들어가며
이 게시글입니다. 어떤 이유로 시리즈를 시작했는지, 앞으로 시리즈가 어떤 식으로 진행되는지에 대해서 알아봅니다.
1. ⏰ Java의 다양한 시간 클래스
Java에서 사용하는 다양한 시간 클래스들에 대해서 알아봅니다. Java8 이후 기존에 사용하는 `Date`와 `Calender`가 아닌 새로 등장한 여러 클래스들에 대해서 소개합니다.
https://dev-qhyun.tistory.com/15
2. 🖥 서버와 DB에서의 시간
1편에서 알아본 시간 클래스들이 DB에 저장될 때, 어떤 형태로 저장되는지 알아봅니다. JPA를 활용해서 어떤 데이터 타입으로 자동으로 변경될지 알아볼 예정입니다.
3. ❓ 어떤 시간을 이용하는게 좋을까? (예정)
다른 개발자들은 어떤 방식으로 시간을 표현하는지를 조사 & 소개해보고, 1편과 2편에서 얻은 정보를 종합해서 작성 시점에서의 결론을 내보겠습니다.
사전 조사에서 여러 개발자들이 지금까지 Java의 시간 클래스들의 특징을 알지 못하고 사용했던 것(특히 `Local~~` 클래스)을 반성하고 정리하는 모습을 확인했습니다. 저도 이번 기회에 여러 시간 클래스들에 대한 정리를 해보고 나름의 결론을 내는 것을 목표로 해보겠습니다.