Search // 220209

김기범·2022년 2월 10일
0

⭐검색 결과를 페이지네이션과 연결!(Search / pagination)
⭐검색하기 버튼 없이 검색!(Debouncing / Throttling)

Search Process

Full Table Scan

  • 프론트엔드(FE)에서 특정 '단어'를 검색하게 되면 백엔드(BE)에선 '단어'에 대한 데이터를 찾고 FE로 다시 보내준다.
  • 여기서 한가지 문제가 있다. 글이 10만개~100만개 정도 될 경우!
  • 누군가 '단어'에 대한 검색을 했을 때 10만~100만번 찾게 된다.
  • 이러한 방식을 full talbe scan이라고 한다.
  • 성능이 굉장히 좋지 못한 방법❗

💥 Inverted Index(역인덱스)

  • 구글 초기 검색엔진
  • full-table-scan 성능을 개선해줌
  • 키워드(단어)단위로 토크나이징
  • 완성형 검색
  • disk(하드디스크)기반 데이터베이스: 컴퓨터를 껏다 켜도 데이터는 그대로 저장이 되어있다
  • 속도가 느린 단점이 있다
  • 단점을 보완하기 위해 자주 검색되는 키워드의 검색로그를 Redis에 캐싱해 놓음

Redis

  • 검색이 중복되는 키워드들을 Redis에 따로 저장해둔다(ex:네이버 인기검색어)
  • Memory기반 데이터베이스: 컴퓨터를 껐다 키면 데이터가 사라짐
  • 속도가 ES에 비해 굉장히 빠르다
  • 검색순서
    1)Redis에서 검색한 데이터 유무 확인
    2)데이터가 없을 경우 ES로 넘어와서 검색

Debouncing / Throttling

debouncing(디바운싱)

  • 연이어 발생한 이벤트를 하나의 그룹으로 묶어서 처리하는 방식
  • 주로 그룹에서 마지막, 혹은 처음에 처리된 함수를 처리하는 방식으로 사용되곤 한다
  • 마지막 이벤트 동작 후, 개발자가 설정해준 일정 시간이 흐른 뒤 추가 이벤트가 없으면 실행이 된다

💥 lodash

  • debounce 기능이 포함되어있다
  • yarn add lodash
  • yarn add @types/lodash --dev

throttling

  • 먼저 한번 요청을 하고 특정시간동안에 반복을(재요청) 안하는 것
  • 스크롤 내릴 때 사용 됨(스크롤은 무수히 많은 이벤트가 요청되는 것이기 때문에!)

--보강하기--

profile
코시국에 성장하는 코린이

0개의 댓글