직행 프로젝트에서는 채용공고를 가져올 때 여러 프로세스를 거친다.
먼저, 초기 단계에서는 생성형 ai를 활용하여 변경하는 과정에서 해당 프로세스의 실행 시간이 실행 주기보다 길다는 문제가 있었다.
@scheduled 를 사용하여 1분마다 해당 메소드를 실행했는데, RestTemplate를 사용하여 생성형 ai api로 요청을 보내는 부분이 존재했다. 문제는 해당 부분 실행 시 응답이 너무 늦게 오는 경우가 종종 존재했다. 평균 10~20초 사이에 응답이 왔으나 어떨 때에는 5분 넘게 오지 않는 경우가 있었다.
RestTemplate 의 경우 별도로 지정하지 않으면 timeout 제한이 없다는 것을 모르고 있었다. 심지어 디버깅 상에서는 정상적으로 응답이 오는 바람에 해당 이슈인지도 몰랐다..
이 때문에
@Bean
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(8);
scheduler.setQueueCapacity(100);
scheduler.setThreadNamePrefix("ScheduledThread-");
scheduler.initialize();
return scheduler;
}
를 통해서 쓰레드 풀에 개수를 지정해 놨는데, 주기가 조금씩 밀리다 보니 큐에도 가득 차 어느 순간 실행되어야 할 메소드가 실행되지 않는 문제가 발생했다.
처음에는 정확한 원인을 모르고 주기를 2분으로 변경하였는데, 당연히 겉보기에는 해결 되는 듯 보였으나 실제로는 해결이 되지 않았다.