우리가 브라우저에서 검색을 요청하면 백엔드의 데이터베이스 내부의 수 많은 데이터 속에서 요청받은 키워드를 가지고 full-scan하게되어 데이터가 많을 수록 속도가 느리다.
그래서 데이터베이스의 데이터들을 특정 키워드들로 구분되게 토큰화하여 저장한 뒤, 이를 역색인(inverted imdex)방식을 이용하여 검색하는 방식을 통해 비교적 빠르게 처리하는 검색전용 데이터베이스인 엘라스틱서치(elasticsearch)가 존재한다.
이는 디스크에 저장하기 때문에 컴퓨터가 꺼져도 저장이 유지되어 안전하지만 메모리에 저장되는 방식에 비하면 속도는 조금 떨어진다.
반대로 메모리에 저장하는 방식은 임시저장방식으로 디스크저장보다는 안정성이 떨어지지만 속도가 빠르다는 이점이 있다. 이러한 메모리저장기반 방식으로는 Redis가 있다. redis는 객체처럼 키 벨류로 저장 메모리에 저장한다.
점심이란 키워드로 검색을하면 redis에서 먼저 확인 후 데이터가 없을 경우 데이터베이스에서 엘라스틱서치를 이용하여 조회하고 브라우저에 보내기 전에 redis에 먼저 저장 후 요청한 검색을 화면에 보여준다. 데이터들은 메모리에 특정시간(ttl: time to leave) 동안만 임시로 저장되어 있으며 이를 캐싱이라한다.
즉, 검색이 진행될 때, 캐싱이 되어있다면 Redis , 캐싱되어 있지 않은 기록은 Elastic Search 방식이 사용된다. 이러한 전반적인 과정을 캐시-어사이드 패턴이라고 한다.
디바운싱
특정 시간 이내에 추가 입력 없을 시 마지막 1회만 실행
ex) "철수" 검색할 경우 "ㅊ" 입력 후 다음 입력까지 5초 동안 기다린다. 다음 입력이 5초 이내에 실행이 되면 함수는 실행되지 않고 추가 입력이 없으면 최종적으로 함수 한 번만 실행된다.
쓰로틀링
특정 시간 이내에 추가 입력 있어도 처음 1회만 실행
ex) 스크롤 기능
시크릿 코드를 이용하여 검색어의 색생을 변경할 수 있고 보통 복잡하고 길게 설정한다!