Express Crawler 제작 간 'Request timeout` 오류 (Heroku)

1Jui.ce·2023년 4월 5일
0

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번 따로 요청하는 걸로 수정해서 고쳤당...ㅠㅠ

profile
옷에 기름기 닦는 사람

0개의 댓글