Crawler 제작 중 Request timeout
오류를 만났다..
Express는 작업이 길어지다가 특정 시간이 되면 Request timeout
을 보낸다..
나한텐 꼭 필요한 작업이고, 이것은 크롤러라서 처음엔 오래걸리지만 검색기간을 동일하게 하면 그냥 데이터만 뽑아오면 되가지구,, 시간을 늘려도 문제가 없다고 생각하여서 시간을 늘려보도록 하겠다!!
간단하다..
timeout을 사용하면 요청에 대한 시간을 조절할 수 있다!
yarn add connect-timeout
...
const timeout = require('connect-timeout');
...
app.use(timeout('120s'));
그냥 화끈하게 120초로 했다.
몇초가 걸릴지 감도 안잡히고,, 로컬에서 한번하고 heroku에서 한번 더 할 자신이 없기 때문..
크롤러 성능을 늘릴 방법은 없는지 궁금해지는 밤이다,,
-->
결국 안되서 로컬에서 일단 진행해보기로 했당... request timeout 문제는 이미 해결 됐었고, 에러 핸들링이 잘 안되서 자꾸 멈췄던 것이었다! try catch 구문을 잘 쓰도록 하장
Heroku에서는 기본적으로 30초이상 요청을 막는데,,, ㅠㅠ 로컬에서 잘되더라니,,,
heroku에서 제공하는 방법은 내가 설명한 위의 방법이 아니라 server timeout을 설정하는 것이래..
const server = app.listen(port);
server.timeout = 600000; // 600초의 timeout설정
코드 상에선 이렇게 써주고!
heroku 나의 앱의 settings 환경변수까지 그림처럼 셋팅해줘야한단다~ 아주 머리아픈 녀석임
위 방법으로도 안되서,,, 더 찾아보니깐 worker dyno로 백그라운드 작업 뭐시기 (비용내야함)도 있고 비동기로 처리하는 방법도 있다길래 한번 비동기로도 해보았다.. 이걸로도 안되면 순응해야지,,, json을 짤라서 여러번 하는 방법이 최후의 보루다..
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result);
}, 600000); // 600초
});
heroku 너무하다!
힝구 ㅠㅠ json을 4등분해서 결국은 4번 따로 요청하는 걸로 수정해서 고쳤당...ㅠㅠ