안녕하세요! 오늘은 검색 엔진의 절대 강자, Elasticsearch에 대해 알아볼게요!
Elasticsearch가 뭔가요? 🤔
여러분이 엄청 큰 도서관에 있다고 상상해보세요.
- 수백만 권의 책이 있는데 특정 주제를 찾아야 한다면?
- 일일이 책장마다 확인하는 건 불가능하죠!
Elasticsearch는 바로 이런 상황을 해결해주는 마법 같은 도구입니다!
- 초대형 도서관의 완벽한 사서 🧙♂️
- 모든 책의 내용을 미리 분석해서
- 원하는 정보를 0.1초 만에 찾아주는 능력을 가졌어요
쉽게 말해서, Elasticsearch는:
- 방대한 데이터에서 원하는 정보를 초고속으로 찾아주는 분산형 검색 엔진
- JSON 기반으로 데이터를 저장하고 검색
- 실시간으로 빠르게 분석할 수 있는 오픈소스 솔루션
어떻게 동작하나요? 🎬
1. 기본 아키텍처
클러스터 (대형 도서관)
├── 노드1 (1층 서가)
│ ├── 샤드1 (역사 섹션)
│ └── 샤드2 (과학 섹션)
├── 노드2 (2층 서가)
│ ├── 샤드3 (문학 섹션)
│ └── 샤드4 (예술 섹션)
└── 노드3 (3층 서가)
├── 레플리카1 (역사 섹션 복사본)
└── 레플리카2 (과학 섹션 복사본)
2. 데이터 저장하기 (인덱싱)
// 책 정보 저장하기
PUT /books/_doc/1
{
"title": "엘라스틱서치 완벽 가이드",
"author": "김데이터",
"description": "초보자도 쉽게 배우는 검색 엔진",
"publish_date": "2023-05-20",
"categories": ["기술", "컴퓨터", "빅데이터"]
}
3. 데이터 검색하기
// '검색 엔진'이라는 단어가 포함된 책 찾기
GET /books/_search
{
"query": {
"match": {
"description": "검색 엔진"
}
}
}
동작 방식 💫
마치 스마트한 도서관 사서가 일하는 것처럼 작동합니다!
- 색인(Indexing) - 책 정리하기Elasticsearch는 문서를 저장할 때 역색인(Inverted Index)이라는 특별한 자료구조를 만듭니다. 이건 마치:
- 책의 맨 뒤에 있는 '찾아보기' 페이지와 같아요
- '검색 엔진'이라는 단어가 포함된 모든 페이지 번호를 기록해둡니다
- 사서: "새 책이 들어왔네! 모든 단어를 카드에 기록하고 정리해둬야지"
- 분석(Analysis) - 똑똑하게 정리하기텍스트를 토큰으로 나누고, 대소문자 통일, 불용어 제거 등의 작업을 수행합니다.
- 사서: "검색엔진, 검색 엔진, Search Engine은 모두 같은 의미니까 함께 분류해두자!"
- 검색(Search) - 빠르게 찾아주기
- 방문자: "검색 엔진에 관한 책 있나요?" 사서: "네! 여기 3권 있습니다. 0.002초 걸렸어요!"
장점은? 🌟
- 초고속 검색 ⚡
- 수백만 개의 문서에서도 밀리세컨드 단위 검색 속도
- 역색인 덕분에 일반 DB보다 최대 100배 빠름
- 유연한 스키마 🤸♀️
- 미리 구조를 정하지 않아도 됨
- 필요할 때 필드 추가 가능
// 새 필드 추가해도 문제 없음! PUT /books/_doc/2 { "title": "빅데이터 입문", "author": "박분석", "price": 25000, // 새로운 필드! "categories": ["데이터", "기술"] }
- 강력한 분석 기능 📊
- 다양한 집계(Aggregation) 기능
- 복잡한 검색 쿼리 지원
// 카테고리별 평균 가격 계산하기 GET /books/_search { "size": 0, "aggs": { "category_stats": { "terms": { "field": "categories.keyword" }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } }
- 확장성 📈
- 데이터가 늘어나도 서버만 추가하면 OK
- 수평적 확장 가능
주의할 점 ⚠️
- 메모리를 많이 사용해요
- 검색 속도를 위해 많은 데이터를 메모리에 올림
- 최소 8GB 이상 권장 (프로덕션은 16GB~32GB)
- 트랜잭션 지원이 약해요
- 은행 계좌 관리같은 ACID 트랜잭션이 필요하면 다른 DB 추천
- 러닝 커브가 있어요
- 강력한 만큼 배워야 할 것이 많음
- Query DSL이 처음에는 복잡하게 느껴질 수 있음
실제 사용 예시 📱
1. 쇼핑몰 검색 엔진
// 상품 검색 - 노트북 중 가격이 100만원 이하인 제품
GET /products/_search
{
"query": {
"bool": {
"must": {
"match": {
"name": "노트북"
}
},
"filter": {
"range": {
"price": {
"lte": 1000000
}
}
}
}
}
}
2. 로그 분석 (ELK 스택)
// 오류 로그 검색 - 최근 1시간 내 500 에러
GET /logs-*/_search
{
"query": {
"bool": {
"must": [
{ "match": { "status": 500 } }
],
"filter": {
"range": {
"@timestamp": {
"gte": "now-1h"
}
}
}
}
}
}
3. 자동완성 구현
// 자동완성을 위한 인덱스 설정
PUT /autocomplete
{
"mappings": {
"properties": {
"title": {
"type": "search_as_you_type"
}
}
}
}
// 자동완성 검색
GET /autocomplete/_search
{
"query": {
"multi_match": {
"query": "엘라스틱",
"type": "bool_prefix",
"fields": [
"title",
"title._2gram",
"title._3gram"
]
}
}
}
마치며 🎁
Elasticsearch는 마치 초능력을 가진 도서관 사서처럼, 방대한 데이터 속에서 원하는 정보를 번개처럼 빠르게 찾아줍니다. 단순한 키워드 검색부터 복잡한 텍스트 분석, 실시간 모니터링까지 - 데이터를 다루는 모든 곳에서 큰 힘을 발휘합니다!
시작이 어렵게 느껴질 수 있지만, 한번 익숙해지면 데이터의 바다에서 보물을 찾는 가장 강력한 동반자가 될 거예요! 😊
궁금한 점이 있으시면 댓글로 남겨주세요!
참고자료
- Elasticsearch 공식 문서: https://www.elastic.co/guide/index.html
- 책: "Elasticsearch: The Definitive Guide" - Clinton Gormley & Zachary Tong
- Elastic 블로그: https://www.elastic.co/blog/
728x90
'600===Dev AWS > ElasticSearch' 카테고리의 다른 글
Elasticsearch가 DB보다 빠른 이유: 비밀은 역색인! 🚀 (0) | 2024.10.30 |
---|---|
What is an inverted index, and why is it crucial for ElasticSearch? (0) | 2024.06.09 |
ElasticSearch Introduced (0) | 2024.06.09 |