대용량 데이터를 생성하고 다운로드 하는 api가 있는데 데이터가 늘어나다보니 60초 이상이 걸리고 api에서는 timeout이 발생하여 결과를 받지 못하는 상황이 생겼다.
개발환경에서 테스트를 하기위해 임시 api를 만든다.
url로 /public/10 과같이 값을 입력 받아 Thread.sleep으로 강제 지연을 발생 시킨다.
@Controller
@RequestMapping(value = "/public")
public class HealthController {
@GetMapping("/{time}")
public ResponseEntity healthCheck(@PathVariable("time") long time) {
try {
Thread.sleep(time * 1000L)
}catch (Exception e) {
e.printStackTrace();
}
}
}
nginx의 설정 추가
proxy_read_timeout은 nginx가 백엔드로부터 응답을 받기까지 대기하는 시간이다. 즉 client는 nginx로 요청을 보내고 nginx는 client의 요청을 다시 backend로 보내는데 nginx와 backend 통신이 proxy_read_timeout 기간내로 결과를 주지 못한다면 연결을 끊는다는 의미다.(default는 60초이다.)
location ^~ /public/ {
....
proxy_read_timeout 120;
....
}
변경전에는 /public/61 으로 테스트 할 때 timeout이 발생하였으나, 변경 후 정상적으로 데이터를 받아온느 것을 확인하였다
추가적으로 axios(혹은 ajax), tomcat 등의 설정에서 nginx보다 더 작은 값의 timeout이 설정되어 있다면 가장 작은 값을 따라감으로 추가적인 확인이 필요하다.
'웹 정리 > TIL' 카테고리의 다른 글
Node-Red [1] 설치와 RestApi 테스트 (0) | 2025.01.10 |
---|---|
Vscode에서 환경별 다른 버전의 Node.js 사용하기 (0) | 2024.11.21 |
Arthas JVM stack 툴(profiler) (2) | 2024.10.08 |
iframe과 nginx 그리고 https (0) | 2024.08.29 |
ssh session 종료 후에도 프로그램 실행(nohup) (0) | 2024.08.27 |