실전 튜토리얼 Elasticsearch × RAG(1)

완벽 한국어 완벽 입문 가이드

by 최재철

제1편 | Elasticsearch 기본 개념 및 RDB 비교

제2편 | nori 분석기로 한국어 인덱스 구축하기

제3편 | RAG를 위한 다양한 검색 쿼리 실습

제4편 | 임베딩 모델을 활용한 Hybrid Search

제5편 | LangChain으로 RAG 구현하기


최근 인공지능 기술의 발전은 단순한 자동화 수준을 넘어, 인간의 지식을 이해하고 활용하는 새로운 단계로 빠르게 진입하고 있다. 특히 대형 언어모델(LLM, Large Language Model)의 등장 이후 많은 기업과 개발자들은 “어떻게 하면 기업 내부의 지식과 데이터를 AI가 활용할 수 있도록 만들 것인가”라는 질문에 직면하게 되었다. 그러나 LLM 자체는 기본적으로 학습 시점 이후의 최신 정보나 특정 조직 내부의 문서를 직접적으로 알지 못한다. 이 한계를 해결하기 위한 대표적인 방법이 바로 RAG(Retrieval-Augmented Generation) 이며, 그 핵심에는 강력한 검색 기술이 자리 잡고 있다.

이때 가장 널리 활용되는 검색 엔진 중 하나가 바로 Elasticsearch이다. Elasticsearch는 대규모 데이터를 빠르게 색인하고 검색할 수 있도록 설계된 분산 검색 시스템으로, 로그 분석부터 전자상거래 검색, 데이터 분석 플랫폼까지 다양한 분야에서 사실상의 표준 기술로 자리 잡았다. 특히 최근에는 전통적인 키워드 기반 검색을 넘어 벡터 검색(Vector Search) 과 하이브리드 검색(Hybrid Search) 기능이 결합되면서, AI 시스템의 지식 검색 계층(Knowledge Retrieval Layer)으로서 그 역할이 더욱 중요해지고 있다.

하지만 많은 개발자들은 Elasticsearch를 처음 접할 때 기존의 관계형 데이터베이스(RDB)와의 개념 차이 때문에 혼란을 겪는다. 테이블과 조인 중심으로 설계된 RDB와 달리, Elasticsearch는 문서 중심(Document-Oriented) 구조와 역색인(Inverted Index)을 기반으로 동작하기 때문이다. 또한 한국어와 같은 자연어 데이터를 효율적으로 처리하기 위해서는 적절한 분석기(Analyzer)를 이해하고 적용해야 한다. 특히 한국어 환경에서는 nori 분석기를 활용한 형태소 기반 인덱싱이 검색 품질을 크게 좌우한다.

이 책은 이러한 배경 속에서 Elasticsearch의 기본 개념부터 실제 AI 기반 검색 시스템 구축까지의 과정을 단계적으로 설명하는 것을 목표로 한다. 먼저 Elasticsearch의 구조와 개념을 RDB와 비교하여 이해하고, 이어서 한국어 데이터를 위한 인덱스 설계와 분석기 설정을 살펴본다. 그 다음에는 다양한 검색 쿼리를 실습하며 검색 엔진의 동작 원리를 체계적으로 익힌다. 이후 임베딩 모델을 활용한 벡터 검색과 하이브리드 검색을 통해 현대적인 AI 검색 아키텍처를 이해하고, 마지막으로 LangChain을 활용하여 실제 RAG 시스템을 구현하는 과정을 다룬다.

이 책이 독자에게 단순한 기술 설명서를 넘어, “검색과 AI가 결합된 새로운 데이터 활용 방식”을 이해하는 실질적인 길잡이가 되기를 바란다. 특히 Elasticsearch와 LLM을 결합한 RAG 아키텍처는 앞으로 다양한 산업에서 중요한 기술 기반이 될 가능성이 높다. 따라서 본서를 통해 독자들이 검색 기술과 AI 시스템을 연결하는 실무적인 통찰을 얻을 수 있기를 기대한다.


제1편

Elasticsearch 기본 개념과 RDB 비교


RAG(Retrieval-Augmented Generation)에서 검색 엔진 + DB를 구축할 때, JSON으로 데이터를 관리하고 Faiss로 검색하는 등 각각의 컴포넌트를 하나씩 구현해야 했던 시절이 있었습니다. Elasticsearch는 이러한 기능들을 추상화하여 적은 노력으로 강력한 검색 기능을 구현할 수 있게 해줍니다.


1. Elasticsearch 기본 개념

Elasticsearch는 대량의 데이터를 고속으로 검색·분석할 수 있는 분산형 검색 엔진입니다. 주요 용어는 다음과 같습니다.(Elasticsearch 8.x 기준)

image.png

※ Elasticsearc는 Lucene 구조와 맞지 않는 문제 때문에 Type을 단계적으로 제거했습니다.

Index = Table 역할입니다.

예시

index: users
document: {name:"kim", age:30}

index: tweets
document: {content:"hello"}


2. Elasticsearch vs RDB: 어떤 경우에 어떻게 사용할까?

Elasticsearch와 RDB(관계형 데이터베이스)는 데이터를 바라보는 방식이 근본적으로 다릅니다. RDB는 테이블(표)로 데이터를 관리하고 정규화된 스키마를 갖는 반면, Elasticsearch는 도큐먼트 지향으로 JSON 형식으로 데이터를 저장합니다. 스키마는 유연하게 변경할 수 있습니다.

화면 캡처 2026-03-04 103840.png

※ 패싯 검색은 쇼핑몰에서 "브랜드", "가격대", "색상" 등 여러 카테고리 필터를 동시에 선택해서 결과를 좁혀나가는 방식입니다. 예: 나이키 + 5만원 이하 + 흰색으로 필터링.


3. 설치 및 기본 설정

Elasticsearch를 Docker로 설치하는 절차를 단계별로 설명합니다.

1. Docker와 Docker Compose가 설치되어 있는지 확인합니다.


$ docker --version

$ docker compose version


2. 프로젝트 디렉터리를 생성합니다.


$ mkdir elasticsearch-demo

$ cd elasticsearch-demo


3. docker-compose.yml 파일을 작성합니다.


services:

elasticsearch:

image: docker.elastic.co/elasticsearch/elasticsearch:8.18.0

container_name: elasticsearch

지금 바로 작가의 멤버십 구독자가 되어
멤버십 특별 연재 콘텐츠를 모두 만나 보세요.

brunch membership
최재철작가님의 멤버십을 시작해 보세요!

(전) SK(주)C&C R&D AI개발부서 파트장, BC카드, 하나카드, 롯데카드를 거쳐 20여년차 IT개발자입니다. 그간의 경험을 쉽게 공유드립니다.

211 구독자

오직 멤버십 구독자만 볼 수 있는,
이 작가의 특별 연재 콘텐츠

  • 최근 30일간 8개의 멤버십 콘텐츠 발행
  • 총 20개의 혜택 콘텐츠
최신 발행글 더보기
작가의 이전글Ollama로 클라우드 · API 키 없이 완전 로컬화