매일 00시에 선착순 쿠폰을 발행하는데 데이터를 로드하는 부분에서 문제가 발생했다.
해당 쿠폰은 4월 2일에 발행된 쿠폰이며, 4월 2일에는 해당 데이터가 조회가 되는 게 정상인데 로컬에서는 되지만 서버에 올리면 데이터를 못 찾아오는 문제가 발생했다.
이건 무조건 시간차로 발생한 문제라고 의심.
그래서 mysql의 시간을 먼저 확인했다.
+--------------------+---------------------+--------------------+
| @@global.time_zone | @@session.time_zone | @@system_time_zone |
+--------------------+---------------------+--------------------+
| SYSTEM | SYSTEM | UTC |
+--------------------+---------------------+--------------------+
UTC로 나오길래 아! MYSQL에서 시간 차이가 발생하는 거구나
라고 판단해서 mysql 컨테이너를 내리고 타임존을 명시해서 컨테이너를 다시 올렸다.
그러고 조회하면
+--------------------+---------------------+--------------------+
| @@global.time_zone | @@session.time_zone | @@system_time_zone |
+--------------------+---------------------+--------------------+
| SYSTEM | SYSTEM | KST |
+--------------------+---------------------+--------------------+
KST로 바뀐 걸 확인하고 다시 데이터 로드를 했지만
Coupon(id=1, remainingQuantity=5, totalQuantity=5, createDate=2024-04-01T15:00:04.525369)
자꾸 쿠폰 데이터는 4월 1일을 가리키고 있는 문제가 발생. 00시에 발행됐다고 치면 15시니깐 정확히 9시간 차이.
해당 문제는 SpringBoot에서 발생한 문제였다.
어플리케이션 수준에서 시간대를 명시적으로 설정하지 않으면 시스템의 기본 시간대를 사용하기에 여태 UTC를 썼던 것.
@SpringBootApplication
@EnableJpaAuditing
@EnableScheduling
public class RestapiApplication {
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
public static void main(String[] args) {
SpringApplication.run(RestapiApplication.class, args);
}
}
이렇게 PostConstruct를 통해 서울 시간으로 설정하고 다시 컨테이너를 올려서 해당 데이터 문제를 해결할 수 있었다.
반응형
'오류해결' 카테고리의 다른 글
Did not find any jobs with GenericTrigger configured! (젠킨스 에러) (0) | 2024.04.04 |
---|---|
github webhook 502 에러 발생 (0) | 2024.04.04 |
오랜만에 배포하는데 컨테이너가 안 올라간다(?) (0) | 2024.04.02 |
나의 착각으로 인한 쿼리 2번 발생 문제 (0) | 2024.04.01 |