#ElasticSearch 8
-
ES 불필요 필드 역직렬화가 API 서버 CPU 스파이크를 일으킨 사건
배경 ElasticSearch(ES)를 읽기 전용 조회 DB로 쓰는 Spring Boot 백엔드 애플리케이션에서 발생한 문제였습니다. ES에 비정규화된 문서를 미리 만들어 두고, API는 그 문서를 조회해 내려주는 구조였습니다. 그런
-
ElasticSearch 딥다이브 - 6: 역색인을 Java로 직접 만들어보기
5편까지 ES를 "쓰는 사람" 입장에서 역색인부터 분산까지 정리해보고 많은 부분을 명확히 이해할 수 있었습니다. 그러다 보니 직접 역색인 구조를 Java로 구현해보면 어떨까? 라는 생각이 들었습니다. 그래서 마지막 편은 그 핵심(역색
-
ElasticSearch 딥다이브 - 5: 분산 아키텍처와 실무 적용
4편까지 한 노드 안에서 문서가 어떻게 매핑되고 저장되는지를 봤습니다. 마지막 편은 시야를 클러스터로 넓혀보겠습니다. 인덱스가 여러 노드에 어떻게 흩어지고 복제되는지, 분산이라 생기는 일관성 문제, 그리고 Spring Boot 연동과
-
ElasticSearch 딥다이브 - 4: 저장 구조와 매핑 파라미터
3편까지는 검색하는 쪽을 봤었습니다. 이번 편은 한 단계 내려가서, 문서가 디스크에 실제로 어떻게 저장되는지를 살펴보겠습니다. ES는 루씬(Lucene) 위에 올라가 있어서, 매핑 파라미터 몇 개가 루씬 레벨의 저장 방식을 직접 결정
-
시스템 디자인 - Design A Search Autocomplete System
4편에서 쓰기와 읽기 모델을 상황에 맞게 분배하는 트레이드오프를 살펴봤었습니다. 이번엔 그 발상이 가장 선명하게 드러나는 검색과 자동완성(autocomplete)을 파볼 겁니다. 책 내용의 검색어 자동완성 챕터를 정리하다 보니, 지금
-
ElasticSearch 딥다이브 - 3: Query DSL과 스코어링
2편에서 역색인이 만들어지는 과정을 봤습니다. 이제 그 위에서 검색을 해볼 차례인데요. 이번 편은 ES의 검색 언어인 Query DSL에서 제일 자주 쓰는 것들, match와 term의 차이, bool 쿼리, 그리고 결과 순서를 정하
-
ElasticSearch 딥다이브 - 2: 역색인과 텍스트 분석
1편에서 문자열을 text로 두면 분석기에 태워 단어로 쪼갠다고 했습니다. 이번 편은 그 "쪼개고 저장하는" 과정을 들여다봅니다. 검색이 빠른 뿌리인 역색인(inverted index), 그리고 그걸 만드는 분석기(analyzer)입
-
ElasticSearch 딥다이브 - 1: 문서 모델과 매핑
최근에 새로운팀에 합류하면서, 주 DB를 ElasticSearch로 활용하게 되었습니다. RDBMS만 접해왔다보니 개념 숙지가 너무 어려웠습니다. "인덱스가 테이블인가? 매핑이 스키마고?" 하면서 관계형 모델로 자꾸 끼워 맞추다 오히