개인적으로 Elasticsearch가 pogresql에 비해 어떤 이점이 있을지 궁금하여 postgresql로 검색을 구현한뒤 둘을 비교해 보았습니다.

Postgresql 검색 구현

물론 기본적인 LIKE query를 이용한 검색과 Elasticsearch의 검색을 비교할 수도 있었지만 이는 Postgresql한테도, Elasticsearch한테도 공정한거 같지 않아 최대한 Elasticsearch가 제공하는 검색 Quality에 맞출려고 노력했습니다.

이를 위해 Nori 형태소 분석기와 tsvector를 이용해 postgresql 검색을 구현하였습니다.

대략적인 작동 방식은 다음과 같습니다.

  1. 유저가 경매 create 요청을 보낸다.
  2. 스프링 서버가 경매의 설명과 이름을 noir를 이용해 어휘소로 쪼갠다.
  3. 그다음 스프링이 쪼개진 어휘소를 Postgresql tsvector로 저장한다.
  4. 그리고 나중에 유저가 검색을 하면 2번처럼 어휘소들로 쪼갠뒤 이를 tsquery로 만들어 tsvector를 검색한다.

Postgresql에서 어휘소를 쪼개지 않고 Spring딴에서 어휘소로 쪼개는 이유는 AWS RDS postgresql에 nori 형태소 분석기를 설치 하는 방법을 찾을 수 없었기 때문입니다.

부하 테스트 방식

저희가 많은 양의 경매 데이터를 가지고 있지 않기 때문에 wikipedia에서 제공하는 데이터를 사용했습니다.

이는 아래 링크에서 다운로드 할 수 있습니다.