티스토리 뷰

서비스를 운영하다보면 유저들에게 수많은 상품들을 출력해줄 때가 많습니다.

 

상품이 많아지다보면 page별로 출력하는게 서버에서는 부담이 될때가 있습니다... (속도가 느려진다던지, sort 기준이 애매하다던지)

 

빠르게 출력하기위해선 어떤 방법을 취해야할까요?

 

2가지 방법으로 나눈 다음 설명 들어가겠습니다.

 

 

  방법 1) db 출력후 -> 서버에서 sort 후 -> slice(분할) 작업 하여 page 별로 나눈다음 -> 프론트에 넘긴다.

 

  장점 -> custom한 sort가 쉽다.

  단점 -> 데이터가 많아지면 많아질수록 느려진다.

 

 

 

 

  방법 2) db 검색 할때 미리 필요한 sort값을 저장 후 split(분할) 작업과 sort 작업을 한 후 -> 프론트에 넘긴다. 

 

  장점 -> 데이터가 많아 지더라도 속도가 빠르고 보장이된다 (출력 속도 일정함)

  단점 -> cumtom한 sort가 쉽지가 않다.

 

 

이제 간략하게 설명 들어가보겠습니다!

 

* 10000개의 데이터로 테스트할때의 결과입니다.

 

방법1) 

 

1. mongodb.find({조건}).lean() 를 통해 데이터를 출력한다.

 

2. nodejs 서버에서 sort 처리를한다.

 

3. nodejs 서버에서 splice 함수를 활용하여 원하는 page 수만큼 구분을한다.

 

4. 프론트에 출력한다.

 

이 방법으로 출력을하면 1000개의 데이터 일때는 평균적으로 113ms 정도 걸리고. 10000개의 데이터를 처리할때는 410ms가 걸립니다.

 

데이터가 많아질수록 확연히 속도가 느려지는게 보입니다. 하지만 sort값을 설정하기 어려운 값을 custom으로 할 수 있기 때문에 유지보수를 훨씬 쉽게 할 수 있습니다. 검색해야 할 데이터 수가 적을 때는 이 방법도 나쁘지 않습니다.

 

방법2)

 

1. db 에 sort값을 미리 저장시켜 그 값을 통해 sort한다!

 

2. 출력할때 맞는 조건의 상품 전체 수 파악을 위해 mongodb.find(조건).countDocuments() 를 통하여 전체 상품 수를 파악합니다.

 

3. 전체 상품 수를 통하여 나눌 페이지를 계산합니다
mongodb.find().lean().skip(start).limit(ITEMS_NUMS).sort(sortQuery) 통해 검색을 합니다.

 

4. 프론트에 출력합니다.

 

이 방법으로 출력을 하면 1000개의 데이터 일때 평균 40ms 걸리고 10000개의 데이터를 처리할때도 40ms가 걸립니다!

단점을 sort하기 애매한 기준들이 생길때 값을 넣어주기가 힘듭니다.. 항상 sort 값을 refresh해줘야하므로 유지보수가 어렵습니다. 하지만 성능은 보장을 합니다 :) 

 

+ mongoDB 에서 sort 값에 index를 추가하면 평균 속도가 10ms가 나옵니다..! 

 

더 좋은 방법이나 궁금하신점 댓글로 남겨주시면 감사하겠습니다. :)

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함