일상

기술 블로그 검색엔진 개발기 - 1

ri5 2023. 9. 24. 17:58

시작하게 된 계기

현재 만들어진 검색 기능

현재 개발자들의 글쓰기 모임을 진행하면서 여러 글들을 읽다보면 양질의 글들이 많이 존재하는데 이런 글들을 나중에 챙겨보고 싶은데 바뻐서 깜박한 순간 다른 많은 글들에 휩쓸려 사라지고 말아버린다는 이야기를 들었다. 물론 지금도 검색기능이 존재하지만 검색엔진처럼 좋은 검색 품질은 기대할 수 없고 모임이 사라지면 활용하기 어렵다는 것이 흠이였다. 그래서 나는 ELK스택도 실습해볼 수 있는 기회고 어느정도의 사용자가 보장되기 때문에 바로 실천에 옮기기로 했다.

 

첫번째 스탭

첫번째 스탭은 테스트로 활용할 수 있는 데이터가 필요했기에 글또를 운영하고 계신 성윤님께 구글 시트애 저장되어 있는 데이터를 요청드렸고 이부분은 은찬님과 상의해본 후 전달받기로 했다. 

다행히도 흔쾌히 수락해주셔서 샘플 데이터로 활용할 수 있는 CSV파일을 전달받을 수 있었고 해당 데이터를 어떻게 활용해야할지가 고민이였다.

 

문제의 핵심을 잘 살펴보자

유저들의 글들을 잘 가져와야하고 검색 품질 또한 좋아야 했기에 생각해야되는 부분이 너무 많았다. 초기에는 '그렇다면 동의어 사전이 필요하고 고품질의 데이터를 갖추기 위해서는 섬세한 데이터 전처리도 필요하다. 그리고 유저들이 글을 작성할 때마다 스크래핑을 해야하니 스케줄링 해주는 시스템도 개발해야겠다'. 이렇게 장황하게 생각들만 많아지다 보니 진행조차 제대로하기 어려웠다. 그래서 단 하나의 방법에 대해서만 집중하고 나머지는 다음에 생각해보기로 했다.

 

단 한개의 검색 API

지금 당장 필요한 것은 단 한개의 검색 API가 필요했고 해당 API의 처음은 유저의 글과 내용만 가져와서 검색기능을 해줘도 활용성은 무궁무진했다. 그렇게 생각의 정리가 끝나고나니 일의 우선순위가 자동으로 정렬이 되고 어떻게 스텝을 진행해야 되는지 대략적으로 틀이 잡혀지기 시작했다. 정리하자면 아래와 같다. 

  1. CSV 데이터를 데이터 베이스 스키마에 맞춰 저장하는 API 개발
  2. 유저가 작성된 글의 내용들도 같이 스크래핑하여 테이블에 저장
  3. 로그스태시를 통해 전처리된 데이터를 토큰화하여 엘라스틱 서치에 저장
  4. 검색 API 서버를 배포하여 잘 작성된 문서형태로 제공해준다.

 

현재 문제점

글내용 스크래핑을 처음 생각했을 때에는 단순히 html을 통째로 가져와서 태그만 제거하고 토그나이저를 통해 토큰화하여 저장하면 될 것이라고 생각했는데 그러기에는 필요없는 정보들이 생각보다 많아서 해당 데이터를 태그정보만 빼서 토큰화하여 넣기에는 데이터 신뢰성이 너무 떨어질 것 같았다. 그리고 또 다른 문제점은 플랫폼마다 다른 형태의 HTML 구조로 구성하고 있어서 너무 많은 경우의 수를 가지고 있다라는 것이다. 간단할 것이라고 생각했던 일들이 마치 빙산의 일각처럼 얕게 보고 있었다라는 생각이 들었다.

 

다음 단계 갈 수 있을까?

데이터의 품질은 어느정도 타협하여 진행해야겠지만 다양한 플랫폼의 블로그글을 적정 수준의 데이터 품질을 가져오기 위해서는 생각보다 많은 고민이 필요할 것 같다. 업무를 진행하면서 같이 하다보니 들어가는 리소스도 같이 고려해야 벌써부터 머리가 아파오지만 이번에 긴 추석 연휴가 있기 때문에 잘 활용하여 해결해봐야될 것 같다.