주뇽's 저장소
🔍 엘라스틱서치(Elasticsearch) – 검색이 되는 이유부터 인덱싱까지 본문
엘라스틱서치의 모든 것 – RDB의 한계를 넘는 검색 시스템 구축 가이드 🔍
이번 글에서는 전통적인 RDB의 한계부터 역인덱스 개념, 그리고 이를 기반으로 한 엘라스틱서치의 구조와 검색 방식, 실무 예제까지 한 번에 정리한다.
1. LIKE 쿼리의 한계 😵
많은 개발자들이 처음에는 RDB의 LIKE '%검색어%'
쿼리로 검색 시스템을 구성한다.
하지만 이 방식은 실무에서 금방 한계에 부딪히게 된다.
문제 | 설명 |
---|---|
🔸 부분 일치 한계 | %API 응답 시간% 은 검색되지만 %API 지연 시간% 은 누락될 수 있음 |
🔸 대소문자 민감 | Timeout ≠ timeout |
🔸 동의어 인식 불가 | "레디스" 와 "Redis" 는 별개 처리됨 |
🔸 검색 정확도 없음 | 유사도(score)를 기준으로 정렬 불가능 |
→ 결국, LIKE
쿼리는 단순 문자열 검색에는 유용하지만,
대용량 로그, 한글 형태소 분석, 동의어/의미 기반 검색이 필요한 실무에서는 부족하다.
2. Full Text Search(FTS)란? 🚀
✅ 인덱스란?
FTS는 문장을 단어 단위로 미리 분해(토크나이징) 하여 저장하고,
검색 시 해당 단어가 포함된 문서를 빠르게 역참조하는 구조이다.
이때 만들어지는 구조가 바로 역인덱스(Inverted Index) 이다.
🔍 RDB에서도 FTS는 가능하지만...
MySQL, PostgreSQL 등에서도 FTS(Full Text Search)를 지원하지만 실무에서 활용하기에는 여러 한계가 존재한다.
항목 | RDB FTS | 엘라스틱서치 |
---|---|---|
언어 분석 | 단순 분리 | 형태소 분석, 사용자 사전 활용 가능 |
대소문자 구분 | O | 자동 소문자 처리 |
동의어 처리 | 거의 불가 | synonym 필터로 유연하게 처리 가능 |
커스터마이징 | 매우 제한적 | tokenizer , filter , analyzer 설정 가능 |
검색 정확도 점수 | 거의 없음 | score 계산 및 관련도 기반 정렬 가능 |
→ 복잡한 텍스트 검색이나 한글 기반 검색이 필요한 환경이라면,
엘라스틱서치의 분석기 설정과 커스터마이징 기능이 훨씬 강력한 선택지가 된다.
3. 역인덱스란 무엇인가? 📚
일반 색인(forward index)은 "문서 → 단어"
구조이지만,
역인덱스(inverted index)는 "단어 → 문서"
구조이다.
예를 들어, 다음과 같은 로그 데이터를 색인한다고 하자.
문서1: API 요청 처리 속도 향상
문서2: Redis 캐시를 적용하여 응답 시간 개선
문서3: 검색 API에 캐시 미적용으로 병목 발생
이를 역인덱스로 구성하면 아래와 같다.
단어 | 포함 문서 |
---|---|
API | 문서1, 문서3 |
요청 | 문서1 |
캐시 | 문서2, 문서3 |
응답 | 문서2 |
병목 | 문서3 |
→ 검색어 "캐시"
에 대해 빠르게 문서2, 문서3을 찾아낼 수 있다.
4. 엘라스틱서치의 인덱싱 구조 🔧
엘라스틱서치는 다음과 같은 3단계로 문서를 분석하고 인덱싱한다.
1. char_filter → 2. tokenizer → 3. token_filter
1️⃣ char_filter
문자 정제를 수행하는 단계이다.
- HTML 제거
- 외국 숫자 → 아라비아 숫자 변환
- 정규식 기반 문자 치환
2️⃣ tokenizer
문장을 단어로 분해하는 핵심 단계이다.
예시:
"Redis 캐시를 적용하여 응답 속도를 개선함"
→ ["redis", "캐시", "적용", "응답", "속도", "개선"]
한글은
nori_tokenizer
를 사용하며,
형태소 분석 + 사용자 사전 기반 분해를 지원한다.
3️⃣ token_filter
추출된 토큰에 추가 가공을 적용한다.
lowercase
: 소문자화stop
: 조사/불용어 제거synonym
: 동의어 처리stemmer
: 어간 추출 (예:doing
→do
)
5. 엘라스틱서치가 빠른 이유는 무엇인가? 🛰
사용자가 "API 캐시"
라는 키워드로 검색한다고 가정해보자.
엘라스틱서치는 다음과 같은 과정을 거친다.
- 검색어
"API 캐시"
를 Analyzer가 토큰화 →["api", "캐시"]
- 역인덱스를 통해 포함 문서를 조회
- SCORE를 계산하여 관련도 높은 문서부터 정렬
- 결과 반환
→ 단어 기준 역참조 + 관련도 기반 정렬이 핵심이다.
6. 주요 구성 요소 이해하기 🧠
용어 | 설명 |
---|---|
Index | 색인 단위 (DB의 테이블 개념) |
Document | 저장되는 단일 JSON 객체 (DB의 row) |
Field | Document의 속성 (DB의 column) |
Shard | Index를 분산 저장하기 위한 물리 단위 |
Replica | 장애 대비를 위한 샤드 복제본 |
Analyzer | tokenizer + filter 를 조합한 분석기 |
7. 엘라스틱서치의 장단점 정리 ✅❗️
✅ 장점
- 형태소 분석, 동의어 인식 등 고급 검색 지원
- SCORE 기반 정렬
- Kibana와 연동 가능
- 다국어 + JSON 기반 API
- 수평 확장 및 샤딩 구조
❌ 단점
- 실시간 아님 (약 1초 지연 존재)
- 트랜잭션 및 롤백 미지원
UPDATE
는 삭제 후 재색인 방식- 자동 매핑 기능은 실무에서 비효율 발생 가능
마무리 📝
엘라스틱서치는 단순한 검색 엔진이 아니다.
역인덱스 기반의 색인 구조, 강력한 커스터마이징, 대량 데이터 처리 성능을 바탕으로
실시간 로그 분석, 검색 시스템, 추천 시스템까지 다양한 분야에서 쓰이고 있다.
'데이터베이스 > Elastic Search' 카테고리의 다른 글
엘라스틱서치의 모든 것 - 인덱스 생성 및 설정 가이드 🧰 (2) | 2025.04.27 |
---|---|
검색 속도를 끌어올리는 핵심 기술 - 역인덱스와 엘라스틱서치 🔍 (6) | 2025.04.23 |