스케쥴링과 시간 설정 [Spring Boot]

2024. 9. 25. 15:34Java

스프링 부트로 "프디아" 파이널 프로젝트를 하면서

한국투자증권 OpenAPI를 활용했었는데,

 

오픈api를 활용하기 위해서

한투에서 접근 토큰을 발급 받아서 사용해야 했습니다.

 

이 토큰은 하루의 유효 기간을 가지고 있기 때문에

매일 23시 30분마다 메서드를 실행하여

토큰 값을 갱신할 수 있도록

스케쥴링을 걸었습니다.

 

그럼 23시 30분에

한투에서 토큰이 새로 발급 됐다고

카톡이 날라와요!

 

어우 근데 안 오더라고요;;

 

유추해볼 수 있는 건

애플리케이션의 시간 설정과

OS의 시간 설정이었습니다.

 

UTC 기준으로 되어 있었기 때문에

한국 서울 시간(UTC+9)으로 설정해줄 필요가 있었어요.

 

package com.partners.total;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

import java.util.TimeZone;

@SpringBootApplication
@EnableScheduling
public class PartnersApplication {

    public static void main(String[] args) {
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
        SpringApplication.run(PartnersApplication.class, args);
    }
}

 

위와 같이 애플리케이션을 한국 시간으로 설정해 주면

스케쥴링이 원했던 시간에 잘 돌아가게 됩니다.

 

근데도 안 되더라고요 ㅋㅋ

 

OS 시간대가 UTC로 설정되어 있다고 하더라도,

애플리케이션에서 설정을 해줬으면

JVM 내부에서 동작하는 애플리케이션은

설정한 시간대에 맞춰 동작을 하게 된다고 해요.

 

따라서, OS 시간대와는 상관없이

잘 작동해야 하는데 안 됐습니다.

 

그래서 OS 시간도 한국 서울 시간으로 설정을 해줬어요.

 

OS 시간 설정을 하는 건

검색하면 잘 알려주는 블로그가 많아서

따로 올리진 않을게요.

 

우선 이렇게까지 하니까 잘 되긴 했는데...

 

애플리케이션 시간 설정을 했을 때

토큰 갱신이 안 됐던 이유가

'스케쥴링이 되지 않아서' 라고

단정하기가 어렵긴 해요.

 

제가 토큰 발급을 위한

APP_KEY 등 환경 변수를

잘못 넣어 주고 있었거든요...ㅎ

 

그래서 OS 시간 설정까지 해주어야

애플리케이션의 시간 설정이

잘 이루어진다고 말할 수는 없을 것 같네요.

 

나중에 기회가 되면 테스트 해봐야 할 것 같아요!