본문 바로가기

개발 공부

Elasticsearch 써보자(2)

저번에 설정도 끝났으니 이번엔 실제로 어떤 식으로 사용하는지 데이터는 어떻게 들어가고 어떻게 검색되는지 알아볼까 합니다. 

Kibana에서 간편하게 인덱스를 생성하고 여러 데이터를 다뤄볼 수 있는데요. 키바나 화면 상 왼쪽 위의 메뉴에 들어가서 스크롤을 제일 아래로 내리면 Management의 Dev Tools에 들어갑니다. 왼쪽은 내가 입력할 코드 오른쪽은 결과가 나오는 화면 입니다. 여기서 여러 실습을 진행해보겠습니다. 

 

실습하기 전에 ElasticSearch의 특징에 대해 자세히 알아보고자 합니다. 

 

💡 Elasticsearch의 주요 특징

✅ 1. 역색인(Inverted Index) 구조

Elasticsearch의 검색 속도가 빠른 이유는 역색인(inverted index) 구조 덕분입니다.

우리가 일반적으로 사용하는 RDBMS에서는 특정 열(column)을 기준으로 검색 시, 테이블 전체를 순차적으로 스캔하거나 인덱스를 탐색해야 합니다. 반면, Elasticsearch는 문서에서 추출한 단어(토큰)를 기준으로 인덱스를 만들어놓고, 이 단어가 어떤 문서에 등장했는지를 기록합니다.

예를 들어, 다음과 같은 문서들이 있다고 가정해볼게요:

문서 1: 나는 엘라스틱서치를 좋아한다.
문서 2: 엘라스틱서치는 강력한 검색 엔진이다.

이 문서들을 색인하면, 다음과 같은 역색인이 생성됩니다:

단어포함된 문서 번호
엘라스틱서치 1, 2
검색 2
좋아한다 1

사용자가 "엘라스틱서치"라는 단어를 검색하면, 색인을 통해 즉시 1번과 2번 문서를 찾아주는 방식입니다.
이 구조 덕분에 수십만, 수백만 개의 문서 중에서도 검색 속도가 매우 빠릅니다.


✅ 2. 자연어 처리 기능 내장

Elasticsearch는 자연어 처리(Natural Language Processing) 기능이 내장되어 있어, 별도의 전처리 없이도 강력한 텍스트 검색을 수행할 수 있습니다.

  • 토큰화(Tokenization): 문장을 단어 단위로 자동 분리
  • 불용어 제거(Filtering): 조사나 접속사 같은 불필요한 단어 제거
  • 정규화(Normalization): 동의어나 형태가 다른 단어를 표준화 처리

예를 들어, “좋았다”와 “좋아” 같은 형태가 다른 단어도 유사하게 인식하여 정확한 검색 결과를 도출해냅니다.


✅ 3. 다양한 조건 검색 및 정렬 지원

Elasticsearch는 단순 텍스트 검색에 그치지 않고,

  • 특정 단어가 포함된 문서만 필터링하거나
  • 날짜 기준으로 정렬하거나
  • 여러 조건을 조합한 복합 검색

등 다양한 방식의 고급 검색 기능도 제공합니다. 이 덕분에 수많은 사용자 리뷰나 로그 데이터를 실시간으로 필터링하고 분석하는 데 유용합니다.


✅ 4. 반정형/비정형 데이터에 적합

Elasticsearch는 JSON 기반의 문서(Document) 구조로 데이터를 저장하므로, 스키마 없이 유연하게 데이터를 추가할 수 있습니다.
필요한 필드를 자유롭게 넣을 수 있지만, 구조를 바꾸려면 기존 데이터를 다시 색인(재색인)해야 하기 때문에 설계 단계에서 주의가 필요합니다.

🛠 Elasticsearch의 추가적인 주요 기능

Elasticsearch는 단순한 검색 엔진이 아닌, 대규모 데이터를 실시간으로 처리하고 분석하는 강력한 플랫폼입니다. 아래에 소개할 기능들을 통해 왜 다양한 기업과 개발자들이 Elasticsearch를 선택하는지 확인해볼 수 있습니다.

 

🔹 1. 스키마리스 (Schema-less) 구조

Elasticsearch는 처음부터 정해진 스키마 없이 데이터를 저장할 수 있습니다.
즉, 필드를 자유롭게 추가할 수 있어 빠르게 구조를 확장하거나 수정할 수 있습니다.
다만, 성능과 검색 정확도 최적화를 위해 매핑(mapping)을 명확하게 설정해주는 것이 좋습니다.

예: 특정 필드를 문자열로 인식할지 숫자로 인식할지 명확히 지정해두면, 나중에 집계나 정렬 시 에러를 방지할 수 있습니다.


🔹 2. 분산 시스템 기반 (클러스터링)

Elasticsearch는 기본적으로 클러스터 구조를 사용합니다.
데이터를 여러 개의 샤드(shard)로 나누고, 여러 노드에 분산 저장함으로써 대용량 데이터도 안정적으로 처리할 수 있습니다.
노드 수를 유동적으로 늘릴 수 있어 성능이 자연스럽게 확장됩니다.


🔹 3. 높은 확장성과 고가용성

  • 노드 추가/제거가 자유로움
  • 장애 발생 시에도 자동 복구 및 대체 노드 처리
  • 전체 시스템이 멈추지 않고 계속 동작하는 구조

이러한 특성 덕분에 무중단 서비스를 운영할 수 있어, 실시간 분석 시스템에 매우 적합합니다.


🔹 4. 실시간 데이터 처리 및 분석

Elasticsearch는 데이터를 입력하면 거의 실시간으로 인덱싱하고 검색할 수 있습니다.
따라서, 로그 수집 시스템, 보안 이벤트 모니터링, 실시간 대시보드 구축 등에 자주 활용됩니다.

예: 로그 수집 도구인 Filebeat 또는 Logstash와 연동해 Kibana에서 실시간 대시보드를 구성할 수 있습니다.


🔹 5. RESTful API 지원

Elasticsearch는 HTTP + JSON 기반의 REST API를 제공합니다.
따라서 언어에 상관없이 손쉽게 Elasticsearch와 통신할 수 있으며, CURL 명령어나 Postman을 통해 직접 요청을 테스트할 수도 있습니다.

Java, Python, Node.js 등 다양한 클라이언트 라이브러리도 공식 제공됩니다.


🔹 6. 유연한 질의(Query DSL)

Elasticsearch는 JSON 기반의 **강력한 질의 언어(Query DSL)**를 지원합니다.
복잡한 검색 조건, 정렬, 필터링, 범위 검색 등을 직관적인 JSON 문법으로 구현할 수 있습니다.

{ "query": { "bool": { "must": [ { "match": { "title": "엘라스틱서치" }}, { "range": { "date": { "gte": "2024-01-01" }}} ] } } }
{ "query": 
	{ "bool": 
    	{ "must": 
        	[ { "match": { "title": "엘라스틱서치" }}, 
     	        { "range": { "date": { "gte": "2024-01-01" }}} ] 
        } 
    } 
}

🔹 7. 다양한 분석 및 집계 기능

Elasticsearch는 검색 결과뿐만 아니라, 그 결과에 대한 통계, 집계, 분석도 수행할 수 있습니다.

  • 매출 분석
  • 사용자 행동 패턴 분석
  • 시간대별 이벤트 분포 등

이러한 기능은 Kibana와 함께 시각화할 때 더욱 빛을 발합니다.


🔹 8. 자동 인덱스 관리 (ILM: Index Lifecycle Management)

데이터가 시간이 지나면 쌓이기만 하고, 저장 공간을 차지하게 되죠.
Elasticsearch는 오래된 데이터를 자동으로

  • 삭제
  • 압축
  • 백업
  • 저비용 스토리지로 이동

하는 Index Lifecycle Management (ILM) 기능을 통해 스토리지 효율성과 관리 자동화까지 제공합니다.

 

알아보다보니 너무나 많은 장점과 기능들이 있었습니다. 이렇게 많은 기능이 있지만 알아야 잘 쓸 수 있겠죠? 실습을 통해 ElasticSearch에 익숙해져 봅시다. 하지만 이번 포스트는 너무 길어져서 쿼리문 실습은 다음 포스트에서 진행하겠습니다.

 

 

'개발 공부' 카테고리의 다른 글

.equals(), == 비교  (0) 2025.09.26
Elasticsearch써보자(1)  (0) 2025.04.10
TPS(Transaction Per Second)  (0) 2025.03.28
WebSocket과 STOMP  (0) 2025.03.26
WebSocket 통신 방식이란?  (0) 2025.03.26