Fullstack 111

heo4·2026년 9월 22일

Fullstack

목록 보기
66/70

풀스택

예습

🔍 Elasticsearch 입문 정리

엘라스틱서치(Elasticsearch)를 처음 공부하면서 알아야 할 기본 개념들을 정리했다. 왜 쓰는지부터 핵심 용어, RDB와의 차이, 기본 REST API 사용법까지 다룬다.

1. Elasticsearch란?

Elasticsearch는 대량의 데이터를 빠르게 검색하고 분석하기 위해 만들어진 분산 검색 엔진이다. Apache Lucene이라는 검색 라이브러리를 기반으로 만들어졌고, JSON 형태의 문서를 저장하고 검색할 수 있는 NoSQL 데이터 저장소 역할도 겸한다.

왜 Elasticsearch가 필요할까

일반적인 관계형 데이터베이스(MySQL, PostgreSQL 등)의 LIKE '%검색어%' 방식은 데이터가 많아질수록 느려지고, 오타나 유사어 검색, 관련도 순 정렬 같은 기능을 구현하기 어렵다.

  • 속도: 대용량 데이터에서도 밀리초 단위로 검색 결과를 반환한다.
  • 전문 검색(Full-text search): 형태소 분석, 오타 허용, 유사어 처리 등 텍스트 검색에 특화되어 있다.
  • 관련도 순 정렬: 단순히 조건에 맞는지가 아니라, "얼마나 관련 있는지" 점수(score)를 매겨 정렬해준다.
  • 분산 처리: 여러 서버에 데이터를 나눠 저장하고 검색해서, 데이터가 늘어나도 확장이 가능하다.

어디에 쓰일까

  • 쇼핑몰의 상품 검색, 자동완성
  • 로그 데이터 수집·분석 (ELK 스택: Elasticsearch + Logstash + Kibana)
  • 커뮤니티/게시판의 게시글 검색
  • 추천 시스템의 유사 콘텐츠 탐색

2. RDB와 비교해서 이해하기

기존에 관계형 데이터베이스를 다뤄봤다면, 아래 대응 관계로 이해하면 감이 빨리 잡힌다.

RDB (MySQL 등)Elasticsearch의미
DatabaseIndex데이터가 모이는 큰 단위
TableType (7.x 이후 사실상 폐지, Index가 그 역할까지 겸함)데이터의 종류
RowDocument데이터 한 건, JSON 형태
ColumnField문서 안의 속성 하나
SchemaMapping필드별 데이터 타입 정의
SQLQuery DSL (JSON 기반 쿼리)데이터를 조회하는 방법

💡 완전히 1:1로 대응되는 건 아니지만, RDB 경험이 있다면 이 표만 봐도 절반은 이해한 셈이다. 가장 큰 차이는 Elasticsearch는 관계(JOIN)를 지원하지 않는다는 점이다. 대신 검색과 텍스트 분석에 완전히 최적화되어 있다.


3. 핵심 개념: 역인덱스(Inverted Index)

Elasticsearch가 빠른 이유의 핵심은 역인덱스 구조에 있다.

일반적인 책의 색인(찾아보기)을 떠올리면 이해가 쉽다. 책 내용을 처음부터 끝까지 훑는 대신, 뒤에 있는 "찾아보기" 페이지에서 단어를 찾아 바로 몇 페이지에 있는지 알 수 있는 것과 같은 원리다.

문서 1: "빠른 갈색 여우가 뛴다"
문서 2: "느린 갈색 개가 걷는다"

이 문서들을 단어 단위로 쪼개서 인덱스를 만들면 이런 구조가 된다.

"갈색"  → [문서1, 문서2]
"빠른"  → [문서1]
"느린"  → [문서2]
"여우"  → [문서1]
"개"    → [문서2]

"갈색"을 검색하면 문서 전체를 뒤지지 않고, 이 색인표에서 바로 [문서1, 문서2]를 찾아낸다. 이게 바로 역인덱스이고, Elasticsearch 검색 속도의 핵심 원리다.


4. 설치하고 첫 요청 보내보기

설치 (Docker 권장)

가장 간단한 방법은 Docker로 실행하는 것이다.

docker run -d --name elasticsearch \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \
  docker.elastic.co/elasticsearch/elasticsearch:8.15.0

실행 후 브라우저나 curl로 http://localhost:9200에 접속하면 버전 정보가 JSON으로 응답된다.

기본 REST API로 CRUD 해보기

Elasticsearch는 모든 조작을 HTTP + JSON으로 한다. RDB처럼 별도의 쿼리 언어를 배우기 전에, 우선 REST API 감각부터 익히는 게 좋다.

인덱스(데이터베이스 격) 생성

curl -X PUT "localhost:9200/products"

문서 추가

curl -X POST "localhost:9200/products/_doc/1" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "무선 이어폰",
    "price": 89000,
    "category": "전자기기"
  }'

문서 조회

curl -X GET "localhost:9200/products/_doc/1"

검색 (여기가 진짜 핵심)

curl -X GET "localhost:9200/products/_search" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "match": {
        "name": "이어폰"
      }
    }
  }'

match 쿼리는 "이어폰"이라는 단어가 포함된 문서를 찾아서, 관련도 순으로 점수(_score)와 함께 돌려준다. 이게 SQL의 LIKE와 결정적으로 다른 지점이다 — 단순 포함 여부가 아니라 얼마나 관련 있는지를 계산해서 정렬해준다.

문서 삭제

curl -X DELETE "localhost:9200/products/_doc/1"

5. 앞으로 학습할 로드맵

처음 시작할 때는 아래 순서로 익히는 걸 추천한다.

  1. 기본 CRUD와 REST API 감각 익히기 (오늘 다룬 내용)
  2. Mapping — 필드별 데이터 타입을 명시적으로 정의하는 방법 (자동 매핑의 한계와 함께)
  3. Query DSL — match, term, bool, range 등 다양한 쿼리 종류
  4. Analyzer(분석기) — 한글 형태소 분석기(예: Nori) 설정, 텍스트가 어떻게 토큰으로 쪼개지는지
  5. Aggregation(집계) — 검색뿐 아니라 통계·집계 기능
  6. 클러스터, 샤드, 레플리카 — 분산 시스템으로서의 동작 원리
  7. Kibana — Elasticsearch 데이터를 시각화하는 도구

마무리

  • Elasticsearch는 "빠르게 검색하고, 관련도 순으로 정렬해주는" 데 특화된 도구라는 게 핵심이다.
  • RDB와 대응 관계(Index-Database, Document-Row, Field-Column)로 먼저 감을 잡고, 가장 큰 차이인 JOIN 미지원과 역인덱스 기반 검색을 기억해두면 이후 학습이 수월하다.
  • 처음엔 복잡한 설정보다 REST API로 직접 CRUD와 검색 요청을 날려보면서 감을 익히는 게 가장 빠른 시작 방법이다.

0개의 댓글