Search Process

진성·2022년 8월 9일
0
post-thumbnail

Search Process?

웹사이트를 만들때 빼놓을수 없는 기능 중 하나가 검색이다.
검색 기능을 만드는 로직은 언어와 프레임워크마다 다르지만 이 과정은 거의 비슷하다.
프론트엔드에서는 백엔드에서 만들어준 api로 키워드를 요청만 하면 되기에 구현하기 매우 간단하다.
하지만 백엔드에서는 검색을 최대한 효율적으로 만들기 위해서 생각을 해야 한다.

table pull scan

검색을 하기 위해서는 일단 데이터가 데이터베이스에 저장이 되어 있을 것이다.
프론트에서 검색을 할 키워드를 요청을 하면 그에 맞는 데이터를 데이터베이스에서 찾아서 모두 뿌려주어야 한다.
받은 키워드를 테이블에서 찾을 때 가장 위에서 부터 차례대로 찾아서 그 결과를 보내주게 된다.
이러한 방식을 테이블 풀스캔 이라고 부른다.

테이블 풀스캔 방식은 문제점이 존재한다.
만약 키워드가 많은 데이터 중 중간에 하나 마지막에 하나 있다고 가정해보면 이를 찾기 위해서는 매우 오랜 시간이 걸리게 되기에 매우 비효율적이다.
이러한 문제점을 해결하기 위해 나온 방식이 존재한다.

ElasticSearch

데이터베이스에서 검색용 테이블을 하나 더 만들어서 특정 키워드 별로 저장을 하고 키워드에 맞는 데이터 번호를 같이 저장을 해준다.
이때 만약 같은 키워드가 존재하면 그 키워드에 데이터 번호만 추가 해주는 방식이다.
이러한 데이터를 키워드 별로 잘라 번호를 주는 과정을 토크나이징이라고 한다.
토크나이징들을 가지고 테이블을 만드는 것을 역색인(invertedindex)이라고 한다.

위와 같은 테이블을 직접 만들 수 있지만 직접 만들지 않고 사용할 수 있는 전용 데이터베이스가 엘라스틱서치(ElasticSearch)라고 한다.

엘라스틱서치에서 역색인을 파일로 저장을 해놓게 된다.
그렇기에 디스크에 저장이 되게 되고 디스크 기반 데이터베이스가 되는 것이다.
디스크 기반 데이터베이스는 속도가 메모리 기반 데이터베이스에 비해 느리지만 안정성이 올라간다.
속도 또한 메모리 기반에 상대적으로 느린것이지 트래픽이 매우 많이 몰리지 않는 이상 체감이 크게 되지는 않는다.

위와 같은 데이터베이스에서 데이터를 뽑아와 프론트로 보내주게 되면 프론트에서는 그에 맞는 데이터를 조회 할 수 있게 된다.

profile
풀스택 진행중...

0개의 댓글