
최근 시스템을 파악하며 느낀것이 Elasticsearch의 강력함을 느끼고 있습니다. 사내 시스템에서는 검색, 데이터 저장으로 사용 하고 있는데 왜 elasticsearch를 사용하는것일까? 이게 무엇인지 알아봐야할 필요성을 느끼게 되었습니다.
(1) elasticsearch란 무엇인가?
apache Lucene에 구축되어 배포된 검색 및 분석 엔진입니다. 데이터 저장소가 아니라 Mysql같은 데이터베이스를 대체할 수 는 없지만 방대한 양의 데이터를 신속하고 거의 실시간으로 저장, 검색, 분석 할 수 있습니다.
(2) elasticsearchdml 기본 구성
elasticsearch는 기본적으로 클러스터와 노드에 대해 알아야합니다.

클러스터란, 여러대의 컴퓨터 혹은 구성 요소들을 논리적으로 결합하여 하나의 컴퓨터, 혹은 하나의 구성 요소처럼 사용할 수 있게 해주는 기술입니다. elasticsearch 클러스터 역시 여러개의 프로세스들을 논리적으로 결합하여 하나의 elasticsearch 프로세스처럼 사용할 수 있게 해줍니다. 이때, 클러스터를 구성하는 하나하나의 elasticsearch 프로세스를 노드라고 부릅니다. 즉, 여러개의 elasticsearch 노드들을 하나의 elasticsearch처럼 동작하게 하는 것이 elasticsearch 클러스터라고 할 수 있습니다.
그렇다면 왜 단일 노드로 클러스터를 구성하지 않을까요? 여러개의 노드로 클러스터를 구성하는 이유가 뭘까? 하는 궁금증이 있습니다.

특정 노드에 장애가 발생했을때, 이후의 요청을 처리할 수 없는 요청 불가 상태로 elasticsearch 서비스 전체에 영향을 끼치게 됩니다.

하지만 여러개의 노드로 클러스터를 구성할경우, 하나의 노드에 장애가 발생해도 다른 노드에 요청할 수 있기 때문에 안정적으로 클러스터를 유지할 수 있고 이를 통해서 높은 수준의 안정성을 보장하며 서비스를 운영할 수 있게 됩니다.
그렇다면 노드의 구조에 대해서도 간단히 알아봅시다.
노드의 경우, 클러스터를 구성하는 논리적인 elasticsearch프로세스 하나를 의미합니다. 노드도 클러스터와 마찬가지로 각각의 고유한 노드 이름과 UUID가 있고, 역할에 따라 여러가지 노드로 구분할 수 있습니다.
노드 역할 | 설명 |
마스터 | 클러스터 구성에서 중심이 되는 노드, 클러스터의 상태 등 메타데이터를 관리 |
데이터 | 사용자의 문서를 실제로 저장하는 노드 |
인제스트 | 사용자의 문서가 저장되기 전 문서 내용을 사전 처리하는 노드 |
코디네이트 | 사용자의 요청을 데이터 노드로 전달하고, 다시 데이터 노드로부터 결과를 취합하는 노드 |
위와 같이 노드가 할수 있는 역할은 총 4가지 이며, 각각하나의 역할만 할 수 있는게 아니라 여러개의 역할을 할 수 있습니다.
꼭 유념해야하는 개념은 클러스터 내에서 메타데이터를 관리하는 마스터 노드는 하나라는것입니다. 실질적인 마스터 노드와 마스터노드에서 문제가 발생했을때, 대체할 마스터 후보 노드가 있다고 생각하면 쉬운데, 마스터 후보 노드들은 마스터 노드로부터 지속적으로 클러스터 운영에 필요한 데이터를 전달받기 때문에 항상 같은 메타 데이터를 유지하고 있습니다. 그래서 마스터 노드에 장애가 발생해서 새로운 마스터 노드가 선출되어도 중단없이 서비스를 지속할 수 있습니다.
- 샤드와 세그먼트
샤드는 인덱스에 색인되는 문서들이 저장되는 논리적인 공간을 의미하며, 세그먼트는 샤드의 데이터들을 가지고 있는 물리적인 파일을 의미합니다. 인덱스와 샤드, 세그먼트의 관계는 아래와 같은 그림이 됩니다.

하나의 인덱스는 다수의 샤드로 구성되어 있고 하나의 샤드는 다수의 세그먼트로 구성됩니다. 샤드는 1개 이상의 세그먼트로 구성되는데 샤드마다 세그먼트의 개수는 서로 다를 수 있습니다.
위와 같은 elasticsearch의 기본적인 구성에 의해 서비스를 안정적이게 운영할 수 있게됩니다.
(3) Elasticsearch와 관계형 DB 비교
- 구조
ElasticSearch | 관계형 데이터 베이스 |
인덱스(Index) | 데이터베이스 (Database) |
샤드(Shard) | 파티션 (Partition) |
타입(Type) | 테이블 (Table) |
문서(Document) | 행 (Row) |
필드(Field) | 열 (Column) |
매핑(Mapping) | 스키마 (Schema) |
QueryDSL | SQL |
- CRUD
HTTP Method | 기능 | 데이터 베이스 문법 |
GET | 데이터 조회 | SELECT |
POST | 인덱스 업데이트 | UPDATE |
PUT | 데이터 생성 | INSERT |
DELETE | 데이터 삭제 | DELETE |
HEAD | 인덱스 정보 확인 | - |
(4) elasticsearch API를 통해 조회 간단히 실습해보기
- 검색
기본적으로 RDB에서는 User라는 테이블의 데이터를 검색할때는 아래와 같이 검색합니다.
SELECT *
FROM User;
elasticsearch의 API는 아래와 같이 검색합니다.
GET /User/_search HTTP/1.1
Host: <elsticsearch host>
Content-Type: application/json
- 조건 검색
user의 gender가 man이고 age가 10인 유저를 검색할때는 RDB에서 아래와 같이 검색합니다.
조건이 1개 일때
SELECT *
FROM User
WHERE gender='man';
조건이 2개 이상일때
SELECT
FROM User
WHERE gender='man'
and age = 10;
elasticsearch의 API는 아래와 같이 검색합니다.
GET /Users/_search HTTP/1.1
Host: <elasticsearch host>
Content-Type: application/json
조건이 1개 일때,
{"query": {
"match": {
"gender": {
"query": "man"
}
}
}
}
조건이 2개 이상일때,
{"query": {
"bool": {
"must": [
{
"match": {
"gender": "man"
}
},
{
"match": {
"age": "10"
}
}
]
}
}}
- 범위 검색
User테이블에서 age가 10초과인 유저를 검색할때 RDB에서는 아래와 같습니다.
SELECT *
FROM User
WHERE age > 10;
elasticsearch의 API는 아래와 같습니다.
GET /Users/_search HTTP/1.1
Host: <elasticsearch host>
Content-Type: application/json
{"query": {
"bool": {
"must": {"match_all": {} },
"filter": {
"range": {
"gender": {
"age": {
"gt": 10
}
}
}
}
}
}}
위와 같이 RESTAPI를통해 조회를 간단히 진행할 수 있습니다.
(5) 왜 빠른걸까?
- 분산 아키텍처: Elasticsearch는 데이터를 여러 노드에 분산하여 저장하고 처리합니다. 이렇게 함으로써 데이터의 부하가 분산되므로 병렬 처리를 통해 빠른 검색 및 질의 성능을 제공할 수 있습니다.
- 역색인(Indexing): Elasticsearch는 역색인(index)을 사용하여 문서 내용의 토큰화 및 색인화를 수행합니다. 이로 인해 효율적인 텍스트 검색과 특정 조건에 따른 필터링이 가능해집니다.
- 분산 검색 및 질의 처리: Elasticsearch는 검색 요청을 여러 노드에 분산하여 처리합니다. 이는 검색 작업을 여러 개의 작은 작업으로 나누어 처리하므로 전체적으로 빠른 검색 응답 시간을 보장합니다.
- 메모리 기반 캐싱: Elasticsearch는 자주 사용되는 데이터와 검색 결과를 메모리 캐시에 저장하여 다음 검색에서 더 빠른 응답 시간을 제공합니다. 이를 통해 반복적인 검색 작업의 성능을 향상시킬 수 있습니다.
- 복제 및 샤딩(Sharding): Elasticsearch는 데이터를 여러 파티션으로 나누어 저장하는 샤딩 기술을 사용합니다. 이를 통해 데이터베이스의 확장성과 성능이 향상되며, 복제(replication)를 통해 데이터 손실을 방지하고 고가용성을 보장합니다.
- 다양한 검색 기능: Elasticsearch는 다양한 검색 기능과 질의 기능을 제공합니다. 풀 텍스트 검색, 필터링, 집계, 자동 완성, 유사한 문서 검색 등 다양한 기능을 효율적으로 처리할 수 있습니다.
- 분석 기능: Elasticsearch는 데이터를 실시간으로 분석하고 시각화할 수 있는 다양한 도구와 플러그인을 제공합니다. 이를 통해 데이터를 실시간으로 모니터링하고 인사이트를 얻을 수 있습니다.
요약하면, Elasticsearch의 빠른 성능은 분산 아키텍처, 역색인 기술, 분산 검색 및 질의 처리, 메모리 기반 캐싱, 복제 및 샤딩, 다양한 검색 및 분석 기능 등 다양한 기술적 요소와 최적화가 결합되어 있기 때문에 빠르고 쉽게 이용할 수 있게 됩니다.
간단하게 이번 챕터에서는 elasticsearch의 기본 사용방법과 요소에 대해 알아봤는데 다음챕터로는 elasticsearch와 함께 주되게 사용되는 elk스택 + filebeat에 대해 알아보도록 하겠습니다.
- 출처
Elastic 가이드 북 - Elastic 가이드북
7. 인덱스 설정과 매핑 - Settings & Mappings
esbook.kimjmin.net
기초부터 다지는 ElasticSearch 운영 노하우 | 박상헌 - 교보문고
기초부터 다지는 ElasticSearch 운영 노하우 | [이 책에서 다루는 내용] ▶ ElasticSearch 기본 개념 ▶ 클러스터 구축 방법과 운영 방법 ▶ 클러스터 성능 모니터링과 최적화 ▶ 분석 엔진으로 활용하는
product.kyobobook.co.kr
'기술 > 데이터 엔지니어링' 카테고리의 다른 글
Iceberg vs Hudi vs Delta Lake, 뭘 써야 할까요? (1) | 2025.01.30 |
---|---|
Parquet를 통해 효율적으로 데이터 관리하기 (0) | 2024.05.06 |
데이터 엔지니어링(2) - elk 스택을 활용한 로깅시스템 구축하기 (0) | 2023.08.27 |
데이터 엔지니어링(0) - 데이터 엔지니어링이란 무엇인가? (0) | 2023.08.09 |