오늘은 엘라스틱 서치 검색 엔진을 마무리했다!
오늘은 엘라스틱 서치 검색 엔진 구현을 완전히 마무리하였다!
기존에는 자주 변경되는 값을 엘라스틱 서치에 포함시키지 않기 위해 엘라스틱 서치를 1차 필터링 역할로 사용하고,
데이터 정합성 보존을 위해 DB에서 한번 더 조회를 했었다.
그런데, 엘라스틱 서치는 그렇게 사용하는 것이 아니라고 한다..
엘라스틱 서치에서 데이터가 자주 변경된다는 것은 조회수 같은 필드처럼 일초에도 몇 번씩 바뀔 수 있는 항목들을 취급하는 것 같다.
내가 자주 바뀐다고 판단했던 부분은 모임의 참석자 수, 모임 상태, 그리고 좋아요 수였는데, 좋아요 수를 제외한 항목들은 그 정도로 자주 바뀌는 내용은 아니다.
그래서 결국은 저 내용들을 모두 엘라스틱 서치에 저장하고, 대신 이벤트 기반으로 저 내용들을 엘라스틱 서치에서 수정하기로 하였다.
엘라스틱 서치에 데이터를 수정하는 방법에는 여러가지가 있는데,
첫 번째는 전체 데이터를 다시 엘라스틱 서치에 보내는 것이다.
한 번에 여러 필드가 변경된다면, 데이터의 정합성을 유지하기 위해 이렇게 변경하는 것이 옳다고 한다.
그래서 모임 수정 API에 대해서는 전체 데이터를 다시 엘라스틱 서치에 보내어 재색인 작업을 진행했다.
그리고, 모임 상태와 현재 참여인원 수, 좋아요 수 같은 내용들은 한 번에 하나의 필드만 변경시켜야 한다.
이 부분에 대해서는 문서의 부분만 수정하는 partial update를 사용했다.
하지만 사실 엘라스틱 서치 내부적으로는 데이터 재색인 작업이 진행되는 것은 똑같다고 한다.
이렇게 모임의 내용이 변경될 때는 이벤트를 기반으로 엘라스틱 서치에 반영하였고,
일주일에 한 번씩 전체 데이터에 대한 재색인 작업을 진행하도록 하였다.
이 부분에 대해서는 가장 트래픽이 적을 새벽 4시에 진행되도록 구현하였다.
그런데, 이후에 NHN의 엘라스틱 서치 검색 엔진 구현 과정 유튜브 영상을 보니 전체 재색인 작업과 부분 재색인 작업이 동시에 진행되서는 안 된다고 한다.
그래서 나중에 이 부분에 대해 수정 작업을 진행하려고 한다.
또, NHN 영상을 보며 Alias 기반 재색인 작업에 대해 알게 되었는데, 이후에 시간이 생긴다면 Alias 기반의 재색인 작업도 찾아보고 적용해보려고 한다.
우리 팀이 작성한 코드는 깃허브를 통해 업로드해두었다.
GitHub 보러가기
이제 엘라스틱 서치를 마지막으로 기능 구현이 모두 완성되었다!
엘라스틱 서치에 기능이 너무 너무 많아서 시간만 더 허락된다면 이런 저런 내용들을 다 적용해보고 싶지만,
이번에는 완성 자체를 해야하기 때문에 여기에서 기능 구현을 마무리하려고 한다.
발표 후에 나는 면접이나 이력서 준비를 하지 않으니 이때 더 시도해보아야겠다.