상황
현재 프로젝트에서 이미 구축되어있는 엘라스틱 서치를 활용하여 검색 서비스를 제공하고 있다.
내 업무는 구현된 엘라스틱서치에 데이터를 넣고, 제거하고, 불러오는 작업까지가 범위였다.
그러던 중에, 엘라스틱 서치가 무엇인지, 구현은 어떻게 하는지 궁금증이 생겼고
직접 간단한 서비스를 구현해보고 싶어졌다.

적용
구현하기 앞서, 엘라스틱 서치에 대해 알아보자.
✔️1. 엘라스틱 서치 (Elasticsearch) 란?
대용량 데이터를 실시간으로 검색하고 분석할 수 있는 검색 및 분석 엔진.
RESTful API를 제공해주고, JSON 형식의 데이터를 저장하고 검색한다.
📌RDB로 검색시 느린 이유?
만약 RDB를 사용해서 LIKE %검색어% 로 데이터를 검색한다면, 테이블의 데이터가 많을수록 결과 반환하기까지 오래걸린다.
테이블을 Full Scan하면 모든 행을 탐색하기 때문에 당연한 결과다.
인덱스를 사용하더라도 부문 문자열 검색에서는 비효율적이다.
📌엘라스틱서치가 빠른 이유?
역색인(Inverted Index)구조를 사용해서 데이터를 저장하고 검색한다.
1) 단어(토큰) 단위로 인덱싱한다.
- 예로, '견과류 크랜베리 에너지바'라는 단어라면 ['견과류', '크랜베리', '에너지바']로 토큰 단위로 저장한다.
2)검색 시 단어 기반 매칭을 수행한다.
- '크랜베리'가 포함된 데이터를 찾을 때, 역색인 테이블에서 즉시 해당하는 목록을 반환하기에, 모든 문서를 비교할 필요가 없다.
✔️2. 엘라스틱 서치, Kibana 설치
1. 도커(Docker) 설치 및 실행
엘라스틱 서치를 설치할 서버에 자신의 OS 에 맞게 도커를 설치해야 한다.
설치를 완료했으면, Docker Desktop앱을 실행하고 후속 작업을 진행한다.
2. docker-compose 작성
(난 인텔리제이 IDE + Springboot + Kotlin 을 활용해서 설치하는 과정을 작성하려고 한다.)

version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ports:
- "9200:9200"
- "9300:9300"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
networks:
- elastic
# 선택사항: Kibana (키바나는 엘라스틱서치의 데이터를 시각화하고 대시보드로 보여주는 도구로 엘라스틱 서치의 데이터를 쉽게 조회, 분석, 모니터링 할 수 있도록 도와주는 도구)
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elastic
volumes:
elasticsearch_data:
driver: local
networks:
elastic:
driver: bridge
참고로 Kibana는 엘라스틱서치의 데이터를 시각화하고 대시보드로 보여주는 도구로 엘라스틱 서치의 데이터를 쉽게 조회, 분석, 모니터링 할 수 있도록 도와주는 도구이다.
3. cmd로 설치
# 기존에 실행한 컨테이너가 있다면 먼저 삭제
docker rm -f elasticsearch
# Docker Compose로 실행 (백그라운드)
docker-compose up -d
# 로그 확인
docker-compose logs -f elasticsearch
# 중지
docker-compose down
# 중지 + 볼륨 삭제 (데이터도 삭제됨)
docker-compose down -v
문제없이 설치되었는지 확인하려면 아래 명령어로 가능하다.
# Elasticsearch
curl http://localhost:9200
# Kibana (브라우저에서)
# http://localhost:5601
다음 포스팅에서는 Springboot + Kotlin 과 연동하여 실제 어떻게 구현하는지 작성할 예정이다.
'Back > Kotlin' 카테고리의 다른 글
| [Kotlin] 생성자 개념 정리 (2) | 2025.01.22 |
|---|
댓글