반응형
이번에 진행하는 프로젝트에서는 학생들의 과제 제출시간을 한국시간으로 저장하고 체크하기 위해, 아래와 같은 테스트코드를 사용했었다.
@Test
fun testValidTime(){
val koreaTime = LocalDateTime.now(ZoneId.of("Asia/Seoul"))
val curTime = LocalDateTime.now()
assertTrue(koreaTime.minusMinutes(5).isBefore(curTime))
assertTrue(koreaTime.plusMinutes(5).isAfter(curTime))
}
이렇게 Asia/Seoul의 시간과 현재 스프링부트의 시간을 가져온 후 앞뒤로 5분 차이가 나지 않는지 확인하는 것이다.
(만약 시간이 다르다면 무조건 1시간 이상 차이가 날 테니까)
당연히 로컬에서는 에러가 없었지만, DEV 서버에 올려 테스트를 해보니 통과하지 못하는 문제가 발생했다.
당연히 시간이 안 맞는 것일거고
로그를 찍어서 확인해보니
이렇게 스프링부트의 시간이 UTC로 설정이 되어 있었다.
처음에는 당연히 스프링부트가 우분투의 시간을 따른다고 생각하고 우분투의 시간을 한국시간으로 맞춰주었다.
sudo timedatectl set-timezone Asia/Seoul
timedatectl
이렇게 timedatectl로 한국시간이 나오는 것 까지 확인을 하고
테스트를 다시 해봤지만, 다시 에러가 발생했다.
찾아보니 스프링부트는 로컬이 아니면, UTC의 시간을 가져온다고 한다.
따라서 스프링부트 자체에 시간을 설정하는 코드를 추가해주거나, java를 실행할 때 시간을 환경변수로 설정해야 한다고 한다.
나는 이 중에서 시간을 설정해주는 코드를 추가했다.
@Configuration
class TimeConfig {
@PostConstruct
fun setTimeZone(){
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"))
}
}
이렇게 TimeConfig를 추가해줬고, 시간은 Bean을 초기화하기 전에 설정해줘야 하기에 PostConstruct annotation을 사용했다.
이렇게 설정하고 테스트를 다시 해보니, 모두 성공했다.
'크무톡톡 프로젝트' 카테고리의 다른 글
Webflux + 코루틴으로 ChatGPT assistant 서버 구현하기 (4) | 2024.10.23 |
---|---|
JPA Paging vs JDBC 속도 비교 (0) | 2024.08.10 |
JPA Soft Delete (0) | 2024.08.06 |
Docker를 활용한 Nginx로 Swagger proxy (0) | 2024.08.05 |
JDBC ON DUPLICATE KEY UPDATE (0) | 2024.07.29 |