개인 프로젝트를 만들면서 웹에서 가져와야 할 데이터가 다운로드하는데 시간이 오래 걸리고 총 데이터량을 확인하기 위해 코드를 만들었지만 한 페이지의 데이터를 가져오는 시간이 2초인 것을 감안하면 빠른 시간 안에 총 데이터량을 확인할 수 없었다. 나중에 어떻게 이 문제를 해결했는지 보기 위해 기록하고자 한다.
해결방법 1.
단순히 선형탐색으로만을 사용하여 100페이지의 데이터를 가져오는 데 걸린 시간은 234초이다.
100 페이지의 데이터 양은 100,000개로 확인되며, 직접 페이지 양이 얼마인지 확인해 보았을 때 약 35000개가 넘는 페이지가 있다는 것을 확인할 수 있었다. 한 페이지당 접속이 2초 걸리며 35000개의 페이즈를 확인하려면 70000초
19시간 26분이나 걸린다. 이건 사용할 수 없는 알고리즘으로 판단하여 다른 방법을 생각했다.


해결방법 2
정확한 알고리즘 이름이 있지만 어떤 거였는지 기억은 안 난다.. 하지만 방법은 간단했다. 시작점과 끝점 중간점을 기록하는 것이다. 이 방법을 사용할 수 있었던 것은 1페이지당 메타데이터를 제외한 데이터는 1000개가 확인됐으며 40000을 넣었을 때 데이터가 없다면 메타데이터 1개만이 존재한다. 또한 페이지 끝은 1개보다 많을 것이며 1000개보다는 작을 것이다. 그렇기에 이러한 생각을 알고리즘으로 나타냈다. 그 결과 19시간이 걸리던 작업을 26초로 끝낼 수 있게 되었다. 마지막 페이지가 어느 것인지 총 데이터량은 무엇인지 단순한 작업을 하는 것이었지만 선형 탐색으로 한다면 오래 걸릴 작업이었다.


PS. 하지만 웹 요청이 들어올 때마다 같은 작업을 할 수 없다고 생각하기에 결과 값을 저장하여 최초 작업만 시간이 오래 걸릴 뿐 그다음은 가장 빠른 작업을 진행할 수 있을 것이다.
'문제해결 및 코드 만들기' 카테고리의 다른 글
| 스프링 MultipartFile을 사용할 때 나타난 오류들 (0) | 2022.05.02 |
|---|---|
| Spring AOP을 활용한 문제해결 - JWT 토큰 유저 검증 (0) | 2022.04.28 |
| 2021-12-13 비밀번호 만들기 (0) | 2021.12.13 |
| 2021-10-12 (회고록) 체스 게임 객체지향적 설계연습 (0) | 2021.10.12 |
| 2021-07-29 조그마한 개발 일기(3) (0) | 2021.07.29 |