콘텐츠로 건너뛰기
Home » Portfolio » 어려웠던 점

어려웠던 점

1. 데이터 스크래핑 시 차단 문제

  • yfinance를 활용하여 데이터 스크래핑 시 다량의 호출로 429 에러가 발생했습니다.
  • 이와 더불어, 몇몇 서버에서는 bot으로 인식하거나, 401 에러를 반환하기도 했습니다.
  • 데이터 호출 빈도의 sweet spot을 찾아야 했습니다.

💡 이렇게 해결했습니다.

  • 다양한 포럼을 참고하여 1초에 1개의 호출이 적절하다는 결과를 도출했고,
    1 초 ~ 1.2 초 사이의 랜덤한 갭을 두어 호출하도록 설정했습니다.
  • 호출 시점에 유효한 랜덤 헤더를 지정하도록 하여 bot 인식 문제를 우회했습니다.
  • 단 기간 변동성이 높지 않은 공포탐욕 지수, 암호화폐 도미넌스, 환율 정보는
    스크래핑 주기를 1분으로 설정했습니다.

2. 과도한 API 요청

  • 클라이언트에서 익스텐션 팝업 시, 스트리밍 서버로 여러 API 호출이 발생했습니다.
    (심볼 별 가격 및 변동성 정보, 차트 정보, SSE 구독 요청, AI 분석 결과 요청 등)
  • 홈서버 환경이기에 안정적인 운영을 위해서는 부하를 미연에 방지해야 했습니다.

💡 이렇게 해결했습니다.

  • Redis에 최신 데이터 스냅샷을 캐싱하여 클라이언트로 한 번에 전송하도록 했습니다.
  • 크롬 익스텐션의 로컬 스토리지에 최신 데이터를 업데이트하고, 타임스탬프를 기록하여
    마지막 수신 시점이 20초가 지나지 않았다면 SSE 구독 요청만 전송하도록 하였습니다.
    • 20초로 지정 근거 : yfinance 기준, 워커가 스크래핑을 한 바퀴 도는데에는 평균 23초
  • 차트는 30일 일봉 기준 데이터이기에, 장 종료 시점에 한 번만 호출하여 업데이트 하도록 했습니다.
  • 추가적으로 buckt4j를 도입하여 클라이언트 별 Rate Limiting을 10초 당 6회로 제한했습니다.