legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #1 방향성에 대한 고민

3hoon 2023. 2. 9. 17:05

우리의 프로젝트는 전국의 음식점을 검색해 찾고 리뷰를 보고 예약을 거는 프로젝트이다.

하지만 유저에게 서비스를 한다기보다는 많은 백엔드적인 기술들을 적용해가면서

성능을 개선하는데에 초점을 맞춘 프로젝트이다.

우리는 최소한의 프론트엔드적인 부분을 뼈대로 갖추고

백엔드 기술적인 부분을 집중적으로 다뤄볼 것이다.

또한 약 천만건의 데이터를 모아서 이를 핸들링하는 경험을 해 볼 것이다.

 

유저에게 서비스를 하는 값진 경험을 포기하는 대신 과연 어떤 기술적인 부분을 다뤄야

프로젝트의 완성도를 높일 수 있을까?

 

  • 동시성 제어
  • 검색 성능 향상
  • 대용량 트래픽 핸들링

나는 동시성 제어와 대용량 트래픽에 대한 핸들링은 우리 유능한 팀원분들에게 맡기고

검색 성능을 향상시키기로 했다.

 

카테고리 검색 

우리는 15가지의 카테고리 검색 기능을 구현하기로 했다.

  • 키워드 검색
    • 가게 이름 포함
    • 도로명 주소
    • 업종
  • 키워드 + 평점 (4~5점)
    • 가게 이름 포함
    • 도로명 주소
    • 업종
  • 키워드 + 평점 높은순
    • 가게 이름 포함
    • 도로명 주소
    • 업종
  • 키워드 + 리뷰 (리뷰 1000개 이상)
    • 가게 이름 포함
    • 도로명 주소
    • 업종
  • 키워드 + 리뷰 높은순
    • 가게 이름 포함
    • 도로명 주소
    • 업종

수많은 데이터를 검색하는 성능을 향상시키려면 어떻게 해야할까?

이러한 검색 조건들을 모두 구현하려면 어떤 기술을 도입해야할까?

 

1. JPA findBy메소드

가장 익숙하고 가장 많이 사용한 기술이다.

 

2. Query Dsl 

가독성 측면에서 이점이 있는 queryDsl을 고려해 볼 수 있다.

 

3. Native Query

검색 기능의 종류가 많은 만큼 직관적인 네이티브 쿼리도 생각 해 볼 수 있다.

 

4. ElasticSearch

약 천만건의 데이터를 핸들링 하기위해서는 검색 성능 또한 중요한데

검색 성능을 향상시키기 위해 전문 검색 엔진인 ES도 고려하게 되었다.