백엔드에서 검색을 구현하는 방법에는 테이블의 전체 로우를 조회하는 풀 테이블 스캔과 문장을 키워드 단위로 나눠(토크나이징) 별도의 검색용 테이블에 저장해서 검색하는 역인덱스(역색인) 방법이 있다.
역인덱스를 도와주는 데이터베이스 프로그램으로는 엘라스틱서치가 있다.
자주 검색되는 검색어를 메모리에 저장해서 나중에 빠르게 찾을 수 있게 해주는 프로그램인 redis가 있다.
redis는 휘발성 저장 방식인 메모리 기반이고, 엘라스틱 서치는 하드에 저장시키는 디스크 기반이다.
검색어를 기준으로 페이지네이션이 만들어져야 하기 때문에, 검색어를 refetch할 때 입력값으로 넣어서 연동해줘야 한다.
검색어를 입력할 때마다 refetch를 실행시키면 gql이 연속적으로 일어나 백엔드 컴퓨터의 메모리, cpu 낭비가 심해져 효율이 떨어진다.
이를 막기 위해 연속적으로 요청되는 쿼리를 일정 시간 막는 debouncing을 활용할 수 있다.
debouncing은 반복적인 요청을 일정한 텀을 가지고 한번에 묶어서 요청해준다.
반대의 개념인 Throttling은 이벤트가 감지되었을 때 일단 한번 실행하고 일정 시간동안 다시 실행되지 않도록 막아주어서, 무한스크롤 등에 활용된다.
lodash 라이브러리를 사용해서 쉽게 구현할 수 있다.
검색어에 해당하는 단어의 색을 바꿔주기 위해서 replaceAll을 이용해 검색어 키워드의 앞뒤로 시크릿 코드를 붙여주고, split으로 시크릿 코드를 기준으로 문자열을 잘라내 검색어에 해당하는 태그에 style을 적용했다.