[Elasticsearch] Elasticsearch 아키텍처 + GUI(Kibana) 세팅

-elastic
▶ 들어가며
이번 글에서는 이전 포스팅에 이어서, Elasticsearch를 MySQL과 비교하며 아키텍처 관점에서 어떻게 다른지 살펴보고,
직접 Kibana를 사용한 개발 환경 세팅까지 진행해보려고 한다.
단순히 개념으로만 이해하는 것이 아니라,
요청이 어떤 방식으로 전달되는지
실제로 Elasticsearch가 잘 동작하는지
까지 확인하는 것을 목표로 한다.
▶ Elasticsearch 아키텍처
Elasticsearch의 기본적인 동작 흐름은 다음과 같다.
-MySQL의 요청 흐름

-Elasticsearch의 요청 흐름

여기서 가장 중요한 점은
👉 REST API 기반으로 동작한다는 점이다.
자체 문법을 실행하는 방식이 아니라 우리에게 익숙한 HTTP 요청을 통해 데이터를 삽입하고 조회한다.
예를 들어 데이터를 삽입한다고 가정하면,
- MySQL
INSERT INTO user (name, age)
VALUES ('bo', 26);
- Elasticsearch
curl -X POST "http://localhost:9200/user/_doc" \
-H "Content-Type: application/json" \
-d '{
"name": "bo",
"age": 26
}'
조회 역시 마찬가지로, SQL 대신 HTTP 기반 요청으로 처리된다.
이 점 덕분에 Elasticsearch는 웹 서비스와의 연동, 검색 기능 구현에 특히 잘 어울린다.
▶ Elasticsearch의 GUI, Kibana
위에서 본 것처럼 cli를 매번 사용하여 요청을 보내고 테이블을 일일이 확인하는것은 여간 번거러운 일이 아님을 알고있을 것이다. MySQL을 공부하면서 이러한 번거로음을 줄이기 위해서
MySQL Workbench
DataGrip
같은 GUI 도구를 사용하듯이,
Elasticsearch 역시 매번 Postman이나 curl로 요청을 보내는 것은 번거롭다.
그래서 Elasticsearch에서는
👉 Kibana라는 GUI 도구를 함께 사용한다.
Kibana를 사용하면 데이터 조회, 인덱스 관리, 쿼리 테스트 를 훨씬 직관적으로 할 수 있다.
-Kibana 세팅 구조
전체 흐름을 정리하면 다음과 같다.

5601 포트: Kibana
9200 포트: Elasticsearch REST API
▶ 개발 환경 세팅
서로 다른 개발환경을 통일시킬 수 있는 Docker를 사용하여 Docker위헤 Elastic과 Kibana를 띄우는 방식으로 세팅을 해볼 것이다.
도커 관련 지식이나 막혔을때는 인터넷을 찾아서 하는것이 훨씬 빠를것이다.
docker-compose.yml 파일을 작성/수정
Elasticsearch + Kibana를 동시에 실행
version: "3.8"
services:
elastic:
image: docker.elastic.co/elasticsearch/elasticsearch:9.2.4
ports:
- "9200:9200"
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.security.http.ssl.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:9.2.4
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elastic:9200
depends_on:
- elastic
- elastic과 kibana 버전이 반드시 맞아야 함. 다르니까 안됐음.
이후 postman으로 localhost:9200의 GET요청과 브라우저에서 http://localhost:5601 주소로 접속했을때 응답이 200OK로 오거나 접속창이 로딩되면 성공!.

-postman 응답 화면

-localhost:5601 Kibana화면
- 모두 정상적으로 뜬다면
👉 Elasticsearch와 Kibana가 잘 실행 중이라는 의미다.
햄버거 바에서 "Dev Tools"를 찾아서 GUI로 편하게 요청을 보낼 수있게 된 나. 기존에 Postman이나 curl로 직접 보내던 REST API 요청을
GET /
과 같은 요청으로 Kibana 내부에서 바로 실행하며 결과를 확인할 수 있다.

👉 훨씬 간편하게 실행할 수 있다. 따봉!