[AWS]
Spring Scheduled가 EC2 에서 시차가 생길 때
Hevton
2024. 11. 2. 18:07
반응형
Spring에서 Scheduled를 사용하면, 정해진 시간 또는 일정 간격 마다 특정 함수를 실행시킬 수 있습니다.
혹시 해당 기능을 EC2에서 사용해보셨나요?
일정 간격 마다 실행할 경우에는 문제가 되지 않겠지만, 고정된 시간을 설정했을 경우엔 의도한 대로 실행되지 않을 것입니다.
예를 들어 다음과 같이 "매일 아침 8시, 오후 1시" 를 기대하고, zone을 Seoul로 맞추기까지 했지만
@Scheduled(cron = "0 0 8,13 * * ?", zone = "Asia/Seoul") // 매일 아침 8시, 오후 1시
로컬에서는 잘 실행될지 몰라도 EC2에 올라갔을 때에는 의도했던 시간에 실행되지 않습니다.
그 이유는, EC2의 기준 시간이 UTC 이기 때문이며, 그렇기 때문에 이밖에도 기존에 사용하시던 모든 로그들 조차
EC2 에서는 KST 기준으로 찍히지 않고 있을 것입니다.
2024-11-02T02:27:08.046Z
해결하는 방법은, 2가지 STEP을 진행하면 됩니다.
1. Application.kt 파일에서 다음과 같이 프로젝트의 기준 시간을 설정해줍니다.
@SpringBootApplication
class Application {
@PostConstruct
fun init() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"))
}
}
fun main(args: Array<String>) {
runApplication<AllwelfareApplication>(*args)
}
2. application.yml 에서 다음과 같이 로그의 기준 시간을 설정해줍니다.
logging:
pattern:
dateformat: yyyy-MM-dd HH:mm:ss.SSSz,Asia/Seoul
이렇게 되면, EC2에 프로젝트가 올라가더라도 정해진 시간에 맞게 Scheduled 기능이 의도된대로 실행될 수 있고,
기존의 모든 로그들조차 한국 시간 기준으로 남게 되어 프로젝트를 관리하는데에도 용이해집니다.
반응형