[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 기능이 의도된대로 실행될 수 있고,

기존의 모든 로그들조차 한국 시간 기준으로 남게 되어 프로젝트를 관리하는데에도 용이해집니다.

반응형