[lines 세미나] 3년간의 검색 서비스 담당기

YoungHyo Choi·2024년 4월 20일
0

Search Engine

목록 보기
4/4

24.04.20 (토) lines 세미나 발표 자료

0. 도입


사내 동료 분께서 기술 / 경험 공유 세미나를 연다고 하셨고, 간단하게라도 발표 할 의향이 있다면 참석해보면 좋을 것 같다고 하셔서 세미나에 참가해 발표를 진행했습니다.

ELK 시스템을 구축해보는 내용을 발표해볼까 했지만 발표 시간이 짧아 경험한 내용을 공유하는게 좋다고 생각했고, 현재 업무로 진행하고 있고 관심이 많은 검색 도메인 담당에 대한 얘기를 발표 주제로 선정했습니다.

1. 왜 검색인가?


우리는 살면서 정보를 얻기 위해 항상 검색 행위를 합니다. 개발 디버깅을 위해 구글링을 하거나, 유튜브에서 관심있는 정보를 얻거나, 원하는 물건을 사기 위해서 등등...
저도 많은 검색 행위를 해오며 검색이 잘 되면 좋겠다 라는 생각을 가지고 있던 와중에 사내에서 검색 서비스와 관련된 업무를 하게 되었습니다. 그러면서 자연스럽게 ELK 스택에 대해서 알게 되었고, 여러 삽질을 거치며 이 기술에 대한 매력을 느끼게 되었습니다.

ELK 란 Elasticsearch, Logstash, Kibana, Beats 라는 오픈 소스 프로젝트를 합쳐 ELK 스택이라고 합니다.

  • Elasticsearch : 검색 엔진을 위한 데이터베이스
  • Logstash : 데이터 파이프라인,
  • Kibana : 이와 관련한 UI, 시각화, 대시보드 역할을 가능하게 합니다.
  • Beats : 데이터 수집기 (metricbeat, filebeat, auditbeat, ...)

주로 beats (수집) -> logstash (전송) -> elasticsearch (저장) -> kibana (UI)

2. 무얼 했는가?


크게 두 가지를 진행했습니다. 첫째, 검색 기능 개선 프로젝트. 둘째, 검색 서비스 운영

검색 기능 개선 프로젝트로는

  • 기존 레거시 코드에 대한 개선을 진행했습니다. node.js 로 되어있던 코드를 사내 표준 언어였던 golang 으로 전환하고 이 과정에서 string 으로 짜여있던 검색 쿼리를 go-elasticsearch 라이브러리를 활용해 유지 보수가 좀 더 수월하도록 변경했습니다.
    (시간이 지난 지금 봤을 때는 이 코드도 마음에 들지 않아 리팩토링을 거치고 싶은데 단순히 마음에 들지 않은 이유로 리팩토링을 하고 싶다는 생각이기 때문에 우선순위가 밀려있습니다.)
  • 데이터 수집 방식을 조금이나마 통합했습니다. 각 기능 별로 비즈니스 로직이 끝난 뒤에 필요한 경우에 Elasticsearch 로 넣어주고 있었는데, 이로 인해 어느 포인트에서 데이터 수집이 이뤄지고 있는지 파악이 잘 안되는 상황이었습니다.
    이러한 포인트를 줄이고자 GCP Pub/Sub 을 통해 각 도메인의 이벤트를 받고 여기서 Elasticsearch 로 데이터를 쌓아주도록 작업했습니다.
  • 그리고 기존에 Elasticsearch index mapping 이 dynamic mapping 을 사용하고 있어 필드 타입이 안맞는 경우 인덱싱이 안되는 이슈가 있었는데 필요한 필드를 정리하고 해당 옵션을 끄고 불필요한 text 필드를 keyword 필드로 바꾸는 등 약간의 인덱스 매핑 수정 작업을 진행했습니다.

서비스 운영으로는 관련 기능 이슈 해결이나 장애 대응 등의 작업을 주로 진행했습니다.
주로 처리했던 이슈 중 하나로는 데이터 싱크가 맞지 않는 이슈가 있었는데 logstash 를 통해 데이터를 넣어주던 부분도 존재해 logstash 문제인 경우도 있었고, ES cluster 장애로 인해 데이터 수집이 안되는 경우가 있었습니다.
아직은 자동으로 장애 데이터를 싱크해주는 작업이 되어있지 않아 장애 발생시 수동으로 해당 기간의 데이터를 검색 엔진으로 넣어주는식으로 처리했습니다.

3. 앞으론 무얼 할 것인가 & 하고 싶은가?


앞으로 내가 맡는 검색 서비스는 안정적이고 빠르게 운영을 하고 싶습니다.
현재 시점에서 진행하고 있는 작업으로는

  1. ES 클러스터에 대한 모니터링
  2. CDC 를 활용한 검색 데이터 수집
  3. Elasticsearch reindex 자동화 및 작업시 클러스터 부하 감소

를 크게 생각하고 있습니다.

현재 ELK 는 VM 에 직접 설치로 운영을 하고 있는데 그렇다보니 logging 이나 metric 시스템이 빈약한 상황입니다. 장애 감지를 위해서 이런 시스템이 필요하다고 생각해서 구축해보는 작업을 현재 진행하고 있고,
데이터 수집 방식도 일부 개선을 했지만 아직 logstash 를 통한 데이터 수집 방식도 남아있고, 새로운 기능이 추가되고 검색에 대한 요구사항이 들어올 때, 관련 시스템을 빠르게 구축할 수 있는 작업을 진행하고 싶습니다.
마지막으로 검색 품질에 대한 부분도 아쉬운 부분이 좀 있는데 필요할 때만 작업을 진행하다보니 elasticsearch reindex 시 사람이 직접하고 있습니다. 이를 좀 더 자동화하고, 부하없이 효과적으로 이런 작업을 할 수 있는 시스템도 구축해놓고 싶습니다.

4. 맺으며..


ELK 를 좋아하고 현업에서 사용하고 있지만 아직 부족하다는 생각이 항상 듭니다. 해결 방법은 계속해서 공부하고 업무에서 사용해 현재 가지고 있는 문제를 해결하면 이런 생각도 조금씩 나아질거라고 생각합니다. 좀 더 나은 시스템을 위해서 다시 열심히 해봐야겠습니다.

profile
golang과 elasticsearch를 좋아하는 3년차 백엔드 엔지니어입니다.

0개의 댓글