E2E :: KernelEngine

ggyu_55·2023년 12월 12일
0

메모

목록 보기
35/46

KernelEngine - 성장하고 싶은 개발자를 위한 블로그 검색 서비스

프로젝트 소개 :: https://github.com/Kernel360/E2E1-KernelEngine

개발 공부를 할 때, 개발 블로그를 많이 참고하게 됩니다. 하지만 내가 원하는 내용이 아니거나, 평소 즐겨 찾는 블로그에 새 글이 올라왔을 때 즉시 확인하지 못함에 있어 저희 팀은 불편함을 느꼈습니다. 이에 착안하여, 가입한 유저의 블로그 게시글과 관리자가 등록한 기술 블로그의 게시글을 키워드를 통해서 검색할 수 있는 검색 서비스를 목표로 제작하였습니다.

기술 스택

기여도

  • 프로젝트 기획 단계에 참여
  • 기능 명세, flowchart, erd diagram 작성에 참여
  • 검색 API CRUD 기능 구현
  • 블로그 크롤링 기능에 Spring batch 적용

회고

  • 정형화 되어 있지 않은 Rss 양식을 어떻게 처리해야 할지 고민이 많았습니다. 등록한 블로그에 대해서 커스텀한 크롤러가 주기적으로 실행되어야 했고, 최악의 경우 크롤러를 등록된 블로그의 개수만큼 추가하여야 하기 때문에 확장성을 고려하는 일이 매우 중요하였습니다.
  • 그래서 아래 이미지와 같이 추상클래스와 인터페이스를 활용하여 크롤링 클래스들이 변화는 지양하고 변경을 추구하도록 설계하였습니다.

  • 또한 크롤링 기능은 주기적으로 실행되어야 하고, 실패하였을 때의 재시도 처리 등이 용이하여야 하였기 때문에 Spring batch 와 접목하여 batch job을 통해 크롤링이 실행되도록 변경하였습니다.

  • 블로그 피드 검색결과를 분석하다 보니 MySQL의 Like 검색은 속도가 느리고 큰 연관성이 없는 결과까지도 반환함을 알게 되었습니다. 예를 들면 "네이버"를 검색하였는데 전혀 연관이 없는 글인데도 불구하고 글 마지막에 '네이버 개발자 000 에게 감사를 드립니다' 등의 문구 때문에 검색결과에 포함되어 나오는 식이었죠.

    • 그래서 이런 검색 결과의 품질 문제를 해결하기 위해 MySQL의 Like 검색 대신 Fulltext 검색을 활용해 보았습니다.
      • 약 1000여 개 피드에 대하여 응답 속도 100ms -> 20ms 의 향상을 확인하였습니다.
    • 그러나 Fulltext 검색은 3자 이하의 너무 짧은 단어, 혹은 일상적으로 사용하는 단어를 무시하는 약점을 보임.
  • 이번엔 Fulltext 검색 대신 Elasticsearch를 도입하여 1000개 피드에 대하여 검색 성능을 비교하였습니다.

    • 응답 속도는 Fulltext 검색에 비해서 대체로 증가하였으나, Like 검색과 비교하였을 때 비슷하거나 빠르고, 연관성이 높은 검색 결과를 반환하는 것을 확인하였습니다.

0개의 댓글