600===Dev AWS/ElasticSearch

Elasticsearch: 강력한 검색 엔진의 모든 것! 🔍

블로글러 2024. 10. 30. 23:15

안녕하세요! 오늘은 현대 검색 시스템의 강자, Elasticsearch에 대해 알아볼게요.

Elasticsearch가 뭔가요? 🤔

도서관에서 책을 찾는 것을 상상해보세요:

  • 일반 DB는 책장을 하나하나 둘러보는 것
  • Elasticsearch는 도서관 검색 시스템으로 즉시 찾는 것!

즉, Elasticsearch는:

  • 분산형 검색 및 분석 엔진
  • JSON 기반의 문서 저장소
  • 실시간 검색과 분석이 가능한 마법상자 ✨

핵심 개념 📚

1. Index (색인)

PUT /books
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}
  • 마치 데이터베이스의 테이블 같은 개념
  • 비슷한 특성을 가진 문서들의 모음

2. Document (문서)

POST /books/_doc
{
  "title": "엘라스틱서치 완벽 가이드",
  "author": "김개발",
  "tags": ["검색엔진", "데이터분석"],
  "price": 35000
}
  • 실제 저장되는 데이터 단위
  • JSON 형태로 저장

어떻게 동작하나요? 🎯

1. 색인 과정

텍스트 입력 → 형태소 분석 → 역색인 구조 생성

예를 들면:

"엘라스틱서치는 정말 편리해요" 
↓
엘라스틱서치 (1번 문서)
정말 (1번 문서)
편리 (1번 문서)

2. 검색 과정

GET /books/_search
{
  "query": {
    "match": {
      "title": "엘라스틱서치"
    }
  }
}

강력한 기능들 💪

  1. Full-Text Search
    • 형태소 분석으로 정확한 검색
    • 오타 교정 기능 제공
  2. 실시간 분석
  3. GET /logs/_search { "aggs": { "popular_tags": { "terms": { "field": "tags" } } } }
  4. 지리 정보 검색
  5. GET /stores/_search { "query": { "geo_distance": { "distance": "5km", "location": { "lat": 37.5665, "lon": 126.9780 } } } }

실제 사용 사례 🌟

1. 쇼핑몰 검색

@RestController
public class ProductSearchController {

    @GetMapping("/search")
    public List<Product> searchProducts(@RequestParam String keyword) {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
            .query(QueryBuilders.matchQuery("name", keyword));

        return elasticsearchClient.search(searchSourceBuilder);
    }
}

2. 로그 분석

// 에러 로그 집계
GET /logs/_search
{
  "query": {
    "match": {
      "level": "ERROR"
    }
  },
  "aggs": {
    "error_over_time": {
      "date_histogram": {
        "field": "timestamp",
        "interval": "1h"
      }
    }
  }
}

주의할 점 ⚠️

  1. 메모리 관리
    • JVM 힙 크기는 물리 메모리의 50% 이하로
    • 너무 큰 힙은 오히려 성능 저하!
  2. 샤드 관리
    • 너무 많은 샤드 = 관리 어려움
    • 너무 적은 샤드 = 확장성 제한

마치며 🎁

Elasticsearch는 마치 도서관의 완벽한 사서와 같습니다. 방대한 데이터 속에서 원하는 정보를 빠르고 정확하게 찾아주죠. 검색 기능이 필요한 서비스라면 꼭 한번 고려해보세요!


더 궁금하신 점 있으시다면 댓글 남겨주세요! 😊

728x90