하고싶은거 하는 블로그

DB의 시간대는 나와 다를 수 있다 본문

팁, 오류

DB의 시간대는 나와 다를 수 있다

wafla 2025. 8. 17. 01:57

여기서(https://wafla.tistory.com/28) 이어집니다.

 

일기 스트릭 API를 작성하고 있는데 날짜 관련하여 오류가 나서 문제를 해결하고 왔다.

 

어제 혹은 오늘 일기가 작성되어 있으면 스트릭이 이어지지만 그저께까지 쓰고 어제는 작성하지 않았다면 스트릭은 끊어져야 한다.

 

분명히 그에 맞게 SQL을 작성했지만 테스트 코드에서 그저께까지 쓰고 어제, 오늘 작성하지 않은 경우 0이 반환되어야 하는데 그저께까지의 스트릭이 반환되는 문제가 생겼다.

 

그래서 로그를 남겨보니 날짜에서 문제가 있다는 것을 확인할 수 있었다.

 

TestContainers를 사용하다 보니 시간대가 맞지 않았다.

 

오늘은 8월 17일인데 DB에서는 16일로 잡혔고 DB 기준에서는 어제까지 일기가 작성됐으니 0이 아닌 3이 반환된 것이었다.

 

다음과 같이 타임존을 추가해주니 테스트가 통과됐다.

@Container
static MySQLContainer<?> mysql = new MySQLContainer<>("mysql:8.0")
    .withDatabaseName("testdb")
    .withUsername("test")
    .withPassword("test")
    .withEnv("TZ", "Asia/Seoul");

@DynamicPropertySource
static void configureProperties(DynamicPropertyRegistry registry) {
    String jdbcUrl = mysql.getJdbcUrl() + "?serverTimezone=Asia/Seoul";
    registry.add("spring.datasource.url", () -> jdbcUrl);
    registry.add("spring.datasource.username", mysql::getUsername);
    registry.add("spring.datasource.password", mysql::getPassword);
}

편안

 

항상 나와 같은 시간대일거라고 생각하지 말아야겠다.