본문 바로가기

제안&정리

[JAVA] ZoneId는 Java 실행 옵션으로 설정해보자

ZonedDateTime을 다루다 보면 ZoneId를 어떻게 설정을 해야 하나 고민하게 된다.

가장 먼저 생각하게 되는 것이 글로벌에서 접근 가능한 ZoneId를 선언해두고 사용하는 것이다.

아니면 각 클래스에서 필요한 순간에 정의해서 사용할 수도 있다.

 

이 정도로만 사용하고 있었는데 코드 리뷰를 하면서 ZoneId.systemDefault() 를 사용하는 코드를 확인했고

실행 환경이 달라져 시스템의 기본 시간대가 바뀔 때 이슈가 있을 수도 있을 것 같아

ZoneId.of("Asia/Seoul")과 같이 명확하게 설정하면 어떨찌 의견을 남겼고 각자의 의견이 오가게 되었다.

 

이 과정을 통해 알게 된 것은 애플리케이션 실행 시 타임존 정보를 줄 수 있기 때문에

ZoneId.systemDefault()을 사용하는 것은 꽤 괜찮은 전략이라는 것이다.

 

하나의 애플리케이션으로 여러 나라에 배포가 필요할 때

코드 수정 없이 실행 파라미터만 바꾸어서 쉽게 배포할 수 있다.

 

실행 시 타임존에 대한 설정은 아래와 같이 user.timezone 설정을 통해 할 수 있다.

java -Duser.timezone=Asia/Seoul -jar example-1.0.0.jar

 

-----

ZonedDateTime를 다룰 때 꽤 괜찮은 방법인 ZoneId.systemDefault()와 java 실행 옵션을 사용하는 방법도 고려해보자.