환경
- 스프링부트 v3.3.3
- AWS EC2
- RDS
- Docker Compose
- Github Actions
문제 상황
현재 내가 진행하고 있는 프로젝트에서 설정된 시간에 알람 시간을 설정하는 기능이 있다.
DB에 저장할 때 기본값이 오전 8시인데 자꾸 9시간 뒤인 오후 5시로 설정되는 문제를 확인하였다.
이렇게 9시간 차이가 나는 것은 보통 타임존 설정 문제인데, 나는 이미 타임존 관련 문제를 아래와 같이 세팅해둔 상태라서 더욱 당황했다.
@PostConstruct 를 이용한 JVM 타임존 설정
@SpringBootApplication
public class PromiseApplication {
public static void main(String[] args) {
SpringApplication.run(PromiseApplication.class, args);
}
@PostConstruct
public void init()
{
// JVM의 기본 시간대를 Asia/Seoul로 설정
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
}
RDS의 타임존 설정
EC2 인스턴스의 타임존 설정
모두 한국 시간으로 되어있었다.
하지만 EC2에서 실행중인 스프링부트 프로젝트의 로깅 시간을 보면 자꾸 현재 시간보다 9시간이 느렸다.
알람 시간은 9시간 느리고, 로깅 시간은 9시간 빠르고 아주그냥 대 혼란이었다.
해결 방법
GPT에게도 물어봤지만 전부 해결이 안되는 답변이었고, 폭풍 구글링을 한 결과 아래의 글에서 해답을 찾을 수 있었다.
https://hyeonyeee.tistory.com/56
내 프로젝트는 도커 컴포즈를 이용하고 있는데 아래의 옵션을 주면 호스트 시간대와 도커 컨테이너 시간대와 동기화된다는 것을 알았다.
docker run -d -v /etc/localtime:/etc/localtime:ro -v /usr/share/zoneinfo/Asia/Seoul:/etc/timezone:ro
컴포즈와 같은 경우 아래와 같이 설정할 수 있다.
compose.yml
services:
....
volumes:
- /etc/localtime:/etc/localtime:ro
- /usr/share/zoneinfo/Asia/Seoul:/etc/timezone:ro
....
이렇게 컴포즈 파일을 설정하고 다시 실행해보니 정상적으로 타임존이 동기화된 것을 확인할 수 있었다.
'Cloud > Docker' 카테고리의 다른 글
[Docker] 애플리케이션 종료시 Compose 자동시작 (1) | 2024.10.13 |
---|---|
[Docker + SpringBoot] 스프링부트 로그 파일 남기기 (1) | 2024.10.11 |
[Docker] Stateless 와 Volume (1) | 2024.09.12 |
[Docker] 도커 네트워크 (0) | 2024.09.11 |
[Docker] 이미지와 컨테이너 레이어 (0) | 2024.09.09 |