
문제
현재 진행 중인 프로젝트에서 유저가 모집글을 작성하면, 작성한 시간보다 +9시간 되어서 출력되고 있습니다.
즉, 데이터베이스에 저장되는 created_date 값이 한국시간(KST)보다 9시간 느린 UTC 시간으로 저장되고 있습니다.
시도1
먼저 데이터베이스의 TimeZone을 확인했습니다.
현재 AWS RDS를 사용하고 있으며, RDS의 파라미터 중 time_zone은 Asia/Seoul로 설정되어 있었습니다.
확인을 위해 DB 콘솔에서 다음 명령어를 실행하였으나, 역시 Asia/Seoul로 설정되어 있었습니다.
select @@time_zone;
만약 Asia/Seoul이 아니라면, 다음 명령어를 통해 설정을 변경할 수 있습니다.
# time_zone 확인
select @@global.time_zone;
select @@session.time_zone;
select @@system_time_zone;
#time_zone 변경
set time_zone = 'Asia/Seoul';
시도2
계속해서 원인을 찾던 중, 로컬 서버에서 저장한 값은 KST 시간으로 저장되는 것을 확인했습니다.
85번 값은 배포 서버에서 저장한 값이고, 86번 값은 로컬 서버에서 저장한 값입니다.
이를 통해 EC2 서버의 시간이 문제의 원인이라고 판단했습니다.
서버에 접속하여 date 명령어로 서버 시간을 확인했지만, 서버 시간은 KST였고, 문제의 원인은 아니었습니다.
시도3
계속해서 고민하던 중, 현재 프로젝트가 Docker를 사용해 배포되고 있다는 점을 떠올렸습니다. 혹시 Docker 컨테이너의 시간이 UTC로 설정되어 있지 않을까 하는 생각이 들었습니다.
확인해보니 Docker 컨테이너의 시간은 실제로 UTC로 설정되어 있었습니다.
Docker 컨테이너가 EC2 서버의 시간과 같을 것이라 생각했지만, 그렇지 않았습니다.
컨테이너는 운영체제에서 격리되어 실행되는 환경이기 때문에 별도로 시간을 설정해야 했습니다.
그리하여 Dockerfile에서 Docker 컨테이너의 시간을 KST로 변경하였습니다.
FROM openjdk:11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENV TZ Asia/Seoul
ENTRYPOINT ["java","-jar","/app.jar"]
ENV TZ Asia/Seoul 명령어를 사용하여 컨테이너 내에서 사용하는 시간대를 서울 시간으로 설정했습니다.
이를 통해 애플리케이션이 시간 관련 작업을 수행할 때 서울 시간 기준으로 동작하게 됩니다.
Docker 컨테이너의 시간이 KST로 설정된 것을 확인할 수 있습니다.
이제 시간이 올바르게 설정된 것을 확인했습니다!!
'트러블슈팅' 카테고리의 다른 글
순환 참조(Circular Reference) 문제 해결하기 (0) | 2024.09.03 |
---|---|
Signature expired: is now earlier than 에러 (0) | 2024.05.08 |
CRLF, LF? (0) | 2024.03.09 |
구글 서비스 버전 충돌 문제 해결하기 (0) | 2024.01.27 |
H2 DB "start_value" 에러 (1) | 2023.11.23 |
느리더라도 단단하게 성장하고자 합니다!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!