HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📘
어플리케이션내 timezone 문제
📘

어플리케이션내 timezone 문제

작성자
태그
CI/CD
속성
Aug 13, 2022 06:21 AM

1. 문제


 
비드마켓 서비스에는 시간에 종속적인 로직이 존재한다.
 
  • 기간에 따른 낙찰 종료 로직
      1. 현재시간과 Product 엔티티의 expireAt 필드를 비교하여 1분마다 스프링 스케줄러가 함수를 호출한다.
      1. Product 엔티티의 isProgressed 필드가 true 인경우(경매가 진행중인 경우) 필드값을 false 로 변경하며 종료 로직을 수행한다.
      1. 낙찰 결과 응답을 반환한다.
       
비드마켓 어플리케이션의 timezone은 Asia/Seoul이 (KST) 기준이다.
그러나 AWS EC2 ubuntu의 서버시간은 default로 UTC가 설정이 되어있다.
백엔드 서버 시간과 프론트엔드 서버시간의 오차로 기능이 정상적으로 수행되지 않는 문제가 있었다.
 

2. 시도한 방법


 

1. EC2 서버 시간 변경 (실패)

 
루트 계정으로 ec2 접속 후 아래의 명령어들로 서버 시간을 변경했다.
$ date $ sudo date $ sudo cat /etc/localtime $ sudo rm /etc/localtime $ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime $ date $ sudo date 출처: https://ora-sysdba.tistory.com/entry/Cloud-Computing-Amazon-EC2-인스턴스의-TIMEZONE-변경 [Welcome To Ora-SYSDBA:티스토리]
 
date 명령어 실행 후
notion image
서버 시간은 정상적으로 변경 되었다.

그러나

어플리케이션을 실행하면 여전히 UTC TimeZone으로 설정되어 있어서 문제 해결에 실패했다.
 

 

2. AWS RDS Time zone 변경(실패)

 
AWS RDS timezone을 Asia/Seoul로 변경해봤다. 구체적인 방법은 아래 참고 링크에 있다.
[에러로그] EC2 배포시 Timezone 설정
localhost에서 new Date()로 시간을 받을시 한국시간으로 잘 받아 졌는데 EC2에 배포후에 RDS에 들어가는 값을보니 UTC시간으로 들어가져서 프로젝트에 방금 작성한 글이 갑자기 9시간전으로 떠서 UTC 시간으로 들어가고 있다고 생각이 들었다. EC2에 접속한뒤 date 명령어를 입력하고 KST가 안나오면 KST로 바꿔줘야한다. sudo rm /etc/local/time => 기존의 시간파일을 삭제한다. sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime => 한국시간 파일을 가져온다.
[에러로그] EC2 배포시 Timezone 설정
https://wookcode.tistory.com/67
[에러로그] EC2 배포시 Timezone 설정
 
하지만 마찬가지로 어플리케이션 실행시 UTC timezone으로 실행돼서 문제 해결에 실패했다.
 

3. Bean 생명주기를 이용한 TimeZone 자동설정 (실패)

 
public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } @PostConstruct public void started(){ TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul")); } }
application.java 파일에 스프링 부트 실행시 TimeZone을 “Asia/Seoul”로 설정하도록 코드를 추가해봤다.
 
해결되지 않았다.
 

4. jar파일 실행시 옵션 추가 (성공)

 
서버에서 비드마켓 어플리케이션 jar 파일을 실행할때 명령어에 -Duser.timezone=Asia/Seoul 옵션을 추가해주는 방법이다. 이 방법은 매번 서버에 배포시 실행할때 추가해주는 번거로움이 있지만 우리팀은 Githup Action을 이용한 배포 자동화로 쉘 스크립트 파일에 jar실행 명령어 + 해당 옵션을 추가해서 문제를 해결했다.
 
sudo nohup java -jar -Duser.timezone=Asia/Seoul -Dspring.profiles.active=local $DEPLOY_JAR --server.port=8080 >> $APPLICATION_LOG_PATH 2> $DEPLOY_ERR_LOG_PATH