Skip to main content

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

Published 2 min readMarkdown

-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 내부에서 바로 실행하며 결과를 확인할 수 있다.

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

No comments yet. Be the first to comment.

More from this blog