검색 구현 후 느린 검색 속도
•
도입 이유
•
문제 상황
◦
검색에 7~10초 가량 소요될 정도로 시간이 오래걸림
◦
→ 이 시간이 오래걸리는것이, 페이징 때문인지 파악하기가 어려움.
◦
→ 콘솔 로그에서 단순 시간 체크를 해보니 전체 페이지숫자를 연산하는것때문에 느리다
•
해결 방안 의견
◦
%KEYWORD%와 같은 like절의 키워드 검색 속도를 개선 할 수 있는 방법이 없을지 파악 필요
◦
검색 쿼리 최적화: 검색 쿼리를 최적화하여 불필요한 부하를 줄이고 더 효율적으로 데이터를 가져올 수 있도록 개선하는 것이 중요
◦
Full-Text Search Index 검색은 자연어 처리에 기반하고 있어 사용자가 검색할 때 사용하는 언어의 특성을 고려할 수 있어요. 이를 통해 더 유연한 검색이 가능하며, 대용량의 텍스트 데이터에서 효과적으로 활용될 수 있다.
◦
Elasticsearch나 Solr 같은 검색 엔진을 도입하면 검색 엔진은 대용량 데이터에서 빠르고 효율적인 검색을 지원하며, 다양한 기능과 유연성을 제공
◦
캐싱 활용 자주 사용되는 검색어나 결과를 캐싱하여 중복 검색 요청 개선
◦
파티셔닝 및 샤딩: 데이터를 파티셔닝하거나 샤딩하여 검색 범위를 축소
•
의사 결정
검색 결과가 다수 나타날 때 [페이징] 자체가 성능을 좌우하는 문제
•
도입 이유
◦
도서 키워드 검색 시 키워드 검색 결과에 대해서도 페이징 처리가 추가되어있음
◦
해당 페이징 링크를 이동할 때도 첫 키워드 검색과 유사한 시간이 소요됨
유저 - 도서 대출 등 서비스 이용용도 도서 검색 기능 화면
관리자 - 도서 관리용 도서 검색 화면
•
문제 상황
◦
검색 이후 결과가 10개 이상인 경우 페이지 링크는 다음처럼 키워드를 유지하도록 작성한 상태
▪
따라서 다음 페이지 링크를 클릭하는 행위은 결과적으로 키워드 검색+2페이지 이동 요청임
▪
사실상 페이징 링크를 들어가는것 = 검색을 또하는것
▪
→ 검색이 10초 걸린다면 페이지 이동시 마다 10초가 소요된다.
▪
우선 이것 자체가 검색 성능의 문제인가?
▪
실제로 검색 성능은 1초 미만으로 미미한 상태이며
▪
과도한 시간이 소요되는 것은 페이징 카운트 연산에서 소모되고 있다.
•
그럼 이것을 해결한 이후에 검색 성능에 집중해서 테스트 해야 실제 검색성능 개선이 아닐까?
•
우선 페이징 최적화가 우선 필요하다는 말.
•
해결 방안 의견
◦
페이징의 접근 방식 변경(이것이 우선되어야 실제 ‘검색’ 성능에 집중 할 수 있다.)
▪
슬라이스
•
페이지를 나누어 보여주는 대신, 처음에 필요한 일부만을 슬라이스해서 표시하는 방식
▪
"더보기"나 "더 불러오기" 버튼을 사용하는 방식
•
사용자가 현재 결과를 보고 나서 명시적으로 추가 결과를 요청할 때만 서버에서 추가적인 결과를 로딩
•
무한 스크롤(더보기+JS동적구현)
◦
사용자가 페이지를 끝까지 스크롤할 때마다 추가적인 결과를 동적으로 로딩하는 방식
▪
사전 로딩
•
사용자가 다음 페이지로 이동하기 전에, 사용자가 클릭할 것으로 예상되는 링크 주변의 데이터를 미리 로딩하는 것이 목표
◦
서버에서의 로직을 개선하는 방식
▪
쿼리 최적화
•
검색 쿼리를 더 효율적으로 작성하거나 데이터베이스에서 더 빠르게 처리할 수 있도록 최적화하는 것이 목적. 이를 통해 빠른 검색 속도를 유지하면서도 서버 부하를 최소화
▪
캐싱 활용(서버측)
•
검색 결과를 캐싱하여 동일한 검색에 대한 중복 요청을 피할 수 있음
•
→ 도서전체를 캐싱해봤는데
•
→ count 만이라도 캐싱해두면 빠르게 될 것 같다.
▪
인덱싱 개선
•
검색 성능을 높이기 위해 데이터베이스의 인덱스를 최적화
◦
사용자 경험 및 인터페이스 개선에 초점을 맞춘 방식(상호작용 최적화)
▪
DB자체를 변경하는 기술스택도입
•
Elasticsearch나 Solr 같은 검색 엔진을 도입하면 검색 엔진은 대용량 데이터에서 빠르고 효율적인 검색을 지원하며, 다양한 기능과 유연성을 제공
▪
클라이언트 측 캐싱(중요 정보는 제공하면 안됨)
•
서버에서 받은 데이터를 클라이언트 측에서 캐시하는 것을 의미. 이는 주로 브라우저의 로컬 스토리지나 메모리에 데이터를 저장하는 방식
▪
비동기 로딩
•
페이지 이동이 아니라 비동기적으로 검색 결과를 로딩하는 방식을 도입kafka
▪
캐싱
•
Redis 활용해보기.