BackEnd/Elasticsearch

RDB vs Elasticsearch

bora-ovo 2025. 9. 10. 14:41

Elasticsearch란?

Apache Lucene 기반의 Java 오픈소스 분산형 RESTful 검색 및 분석 엔진이다.

방대한 양의 데이터에 대해 실시간으로 저장과 검색 및 분석 등의 작업을 수행할 수 있다.

Elasticsearch는 텍스트, 숫자, 위치 기반 정보, 정형 및 비정형 데이터 등 모든 유형의 데이터를 위한 무료 검색 및 분석 엔진으로 분산형 및 개방형을 특징으로 한다. 

 

 

RDB vs Elasticsearch

기존에 우리에게 익숙한 RDB와 Elasticsearch의 차이점에 대해 알아보자

 

RDB는 구조적 데이터 저장·조회, Elasticsearch는 대용량 비정형 데이터의 빠른 검색·분석에 특화되어 있다.

 

RDB와 Elasticsearch는 경쟁관계라기 보다 보완관계라고 볼 수 있다.

따라서 둘 중 하나가 언제나 정답이 되는 것은 아니다.

데이터 저장, 검색, 확장성 등 접근 방식이 다르기 때문에 내가 하는 프로젝트의 요구사항이 뭔지 먼저 분석하고, 그에 맞게 더 나은 선택을 해야한다.

 

 

1. 데이터 구조

RDB는 데이터를 테이블에 저장하고, 테이블 내붑는 행(Row)과 열(Column)로 정형화된 구조를 갖고 있다.

 

Elasticsearch의 경우 데이터는 인덱스(Index)에 문서(Document) 형태로 저장하고 문서는 JSON 타입이다. 문서의 각 속성들은 필드(Field) 역할을 하고, 이 덕분에 테이블과 행 구조보다 더 자유롭고 다양한 형태의 데이터를 담을 수 있다는 장점이 있다.

 

2. 스키마

RDB는 정해진 타입이나 다양한 제약조건이 있기 때문에 엄격한 스키마가 필요하다.

덕분에 안정성과 일관성 측면에서는 유리하지만 유연성 측면에서는 불리하다.

 

Elasticsearch스키마리스(Schema-less)가 가능하고, 데이터를 넣으면 자동으로 필드와 타입을 추론하는 동적 매핑이 가능하다.

또한 필요하다면 명시적인 매핑 정의가 가능하다. 이를 통해 다양한 데이터 구조(텍스트, 숫자, 배열, JSON 중첩 구조) 저장에 유리하다.

 

3. 쿼리 언어

RDB는 기본적으로 SQL(SELECT, JOIN, GROUP BY, WHERE 등)을 사용한다.

 

Elasticsearch는 JSON 기반 질의인 DSL(Query DSL)을 사용한다.

때문에 SQL처럼 구조화된 연산보다 검색과 분석 중심 질의에 특화되어있다.

{
  "query": {
    "match": { "message": "에러 로그" }
  }
}

 

4. 검색 기능

RDB는 쿼리에 대한 정확한 일치 검색이 기본이다.

  SELECT * FROM HUMAN
  WHERE name = ‘보라’

⇒ HUMAN 테이블에서 보라라는 이름을 가진 행을 검색

 

ElasticsearchFull-text search(형태소 분석, 유사도 점수 기반 검색) 를 지원한다. 이는 오타가 허용되고, 연관성 점수(relevance scoring)에 따라 검색이 가능하며, 자연어 처리가 가능하다.

 

5. 트랜잭션

RDBACID를 보장한다. (Atomicity, Consistency, Isolation, Durability) 이는 원자성, 일관성, 고립성, 지속성을 뜻한다.

 

Elasticsearch실시간 검색에 초점을 맞춰두고 있고, 데이터를 입력하면 즉시 검색이 가능하지만 ACID 수준의 트랙잭션은 약하다. 또한 분산환경에서 최종 일관성(Eventual Consistency) 을 지향한다.

 

6. 확장성

RDB는 서버 성능을 높이는 방식으로 주로 수직적 확장인 Scale-up을 한다. 이 때문에 일정 이상의 규모를 넘어가게 된다면 확장하는데에 한계가 있다.

 

Elasticsearch는 수평적 확장인 Scale-out을 한다. (Scale-out은 여러 서버<노드>를 추가해 클러스터를 구성한다.) 또한 데이터를 자동으로 분산하기 때문에 빅데이터 처리에 적합하다.

 

7. 속도 최적화

RDB는 쓰기 · 갱신이 자주 발생하는 OLTP 시스템에 적합하다. 주로 은행 계좌 관리를 예시로 들 수 있다. 인덱스(Index)를 걸면 특정 쿼리는 빨라지지만 대규모 텍스트 검색은 느리다.

 

Elasticsearch검색과 분석(집계와 필터링)에 최적화되어있다.

Inverted Index(역색인) 구조 덕에 대량의 텍스트 검색 또한 빠르게 할 수 있다.

 

8. 사용 사례

RDB : 은행 시스템, ERP, 회원 관리 시스템, 회계 프로그램 등 정형화된 데이터를 관리할 때

Elasticsearch : 로그 분석(ELK Stack), 검색 엔진(ex. 쇼핑몰 상품 검색 등), 추천 시스템, 모니터링(Kibana 시각화)

 

9. 저장방식

RDB는 디스크를 기반으로 행 단위 저장을 하게 된다.

 

Elasticsearch는 Inverted Index(역색인)을 기반으로 하여 “보라가 책을 읽는다” 라면 “보라”, “책”, “읽는다” 처럼 단어 단위로 색인해두어 특정 키워드가 들어간 문서를 빠르게 찾을 수 있다. (검색 속도 최적화된 구조)

 

 

 

따라서 RDB는 정확하고 안전하게 데이터를 관리하는데에 강점을 두고,

Elasticsearch는 빅데이터에서 빠르고 유연하게 검색·분석 하는데에 강점을 가지고 있다.