Table of contents
EC2에 띄운 SpringBoot서버에서 댓글을 불러오는데 자꾸 UTC기준으로 불러왔다.
시간 설정을 해둔게 없어서 3가지 변경해야할 곳을 찾았다.
EC2인스턴스의 OS시간 설정
ubuntu가 설치된 os의 시간설정을 해야하나 싶었다.
우선 Timezone을 확인했다
timedatectl
ubuntu의 timezone이 UTC로 설정되어 있다. UTC는 우리나라와 9시간 차이가 나니 내가 보낸 요청이 이상한 시간으로 들어간 것이다.
그래서 timezone을 Asia/Seoul로 바꿔주었다.
sudo timedatectl set-timezone Asia/Seoul
이제 다시 스프링을 켜서 확인해보았다.
로그를 보니 여전히 시간대가 맞지않다. 난 새벽5시에 스프링 키고 있지 않은디...
DB의 시간대 설정
다음은 ec2에 있는 DB의 시간대를 설정해보았다.
mysql컨테이너에 접속해 time_zone을 Asia/Seoul로 바꿔주었다.
$ docker exec -it mysql-container mysql -u root -p
Enter password: password
mysql> SET GLOBAL time_zone='Asia/Seoul';
Query OK, 0 rows affected (0.00 sec)
마지막 행을 보면 결과 데이터가 KST기준으로 들어갔다!
하지만 SpringBoot의 서버시간은 여전히 바뀌지 않았다.. ㅜㅜ
(성공) 서버 실행 할 때 시간 설정
# APP
FROM openjdk:11-jdk
WORKDIR /app
COPY --from=builder /app/build/libs/sock-0.0.1-SNAPSHOT.jar .
# 기존 부분. 그냥 실행했다.
# CMD ["java", "-jar", "sock-0.0.1-SNAPSHOT.jar"]
# 수정한 코드 시간대를 설정해서 실행해준다.
CMD ["java", "-Duser.timezone=Asia/Seoul", "-jar", "sock-0.0.1-SNAPSHOT.jar"]
Dockerfile에서 스프링 컨테이너를 실행할 때 timezone을 설정하는 파라미터를 다음과 같이 추가했다.
결과는 성공!