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

![](https://blog.kakaocdn.net/dna/bCcD5O/dJMcaaEapRe/AAAAAAAAAAAAAAAAAAAAAPTcYBJzowfH4AVUfzS2x91Ro8008aMYcIsOGOXrqVE_/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=Cj03tKK80nb%2BXjYc7ixHWJvNWlE%3D align="left")

\-elastic

## ▶ 들어가며

이번 글에서는 이전 포스팅에 이어서, **Elasticsearch를 MySQL과 비교하며 아키텍처 관점에서 어떻게 다른지** 살펴보고,  
직접 **Kibana를 사용한 개발 환경 세팅**까지 진행해보려고 한다.

단순히 개념으로만 이해하는 것이 아니라,

* 요청이 어떤 방식으로 전달되는지
    
* 실제로 Elasticsearch가 잘 동작하는지
    

까지 확인하는 것을 목표로 한다.

---

## ▶ Elasticsearch 아키텍처

Elasticsearch의 기본적인 동작 흐름은 다음과 같다.

\-MySQL의 요청 흐름

![](https://blog.kakaocdn.net/dna/eTtgXO/dJMcahccwok/AAAAAAAAAAAAAAAAAAAAAIIaJ8q_9SS2stLT7GJDH5PdXTsl_9pEVrifc20DZAQc/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=ID%2B1%2FBFJfmJwx6ATsGRez8o0q1w%3D align="left")

\-Elasticsearch의 요청 흐름

![](https://blog.kakaocdn.net/dna/dm8b5k/dJMcabC40H3/AAAAAAAAAAAAAAAAAAAAACzXvZNs0_3nMHrbv8PHNVxjcRMBIzspegUtDkspddJx/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=6UCay3VMyf7ddpGzXzPaZK7f6vY%3D align="left")

여기서 가장 중요한 점은  
👉 **REST API 기반으로 동작한다는 점**이다.

자체 문법을 실행하는 방식이 아니라 우리에게 익숙한 HTTP 요청을 통해 데이터를 삽입하고 조회한다.

예를 들어 데이터를 삽입한다고 가정하면,

* MySQL
    

```plaintext
INSERT INTO user (name, age)
VALUES ('bo', 26);
```

* Elasticsearch
    

```plaintext
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 세팅 구조

전체 흐름을 정리하면 다음과 같다.

![](https://blog.kakaocdn.net/dna/sZPa4/dJMcacaVouN/AAAAAAAAAAAAAAAAAAAAAHuCgSE7OznedzPQWIDnW0PgUm4CS8AE-0-PbvkDLuad/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=mjrpUk3cul19XVlWXTAg5fBKXys%3D align="left")

* **5601 포트**: Kibana
    
* **9200 포트**: Elasticsearch REST API
    

---

## ▶ 개발 환경 세팅

서로 다른 개발환경을 통일시킬 수 있는 **Docker**를 사용하여 Docker위헤 Elastic과 Kibana를 띄우는 방식으로 세팅을 해볼 것이다.

<s>도커 관련 지식이나 막혔을때는 인터넷을 찾아서 하는것이 훨씬 빠를것이다.</s>

* docker-compose.yml 파일을 작성/수정
    
* Elasticsearch + Kibana를 동시에 실행
    

```plaintext
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](http://localhost:9200)의 GET요청과 브라우저에서 [http://localhost:5601](http://localhost:5601) 주소로 접속했을때 응답이 200OK로 오거나 접속창이 로딩되면 성공!.

![](https://blog.kakaocdn.net/dna/bUhMDS/dJMcaaqC6J6/AAAAAAAAAAAAAAAAAAAAAB2o3pba99bekMV8Z4vJBV-6fwLhvNtlDLO8-TXNPvDb/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=p9yTIpQfEh%2Bug7I%2FtuXCdZa9UyY%3D align="left")

\-postman 응답 화면

![](https://blog.kakaocdn.net/dna/mPMhi/dJMcaiCacUO/AAAAAAAAAAAAAAAAAAAAALDWNu3nT9ywb8H3l4ergv4M5wqBY0yGRDAmpSDNkpMo/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=kLhuT5sLPSOhy%2Fk%2FEPZn8%2FmhPHM%3D align="left")

\-[localhost:5601](http://localhost:5601) Kibana화면

* 모두 정상적으로 뜬다면  
    👉 **Elasticsearch와 Kibana가 잘 실행 중**이라는 의미다.
    

햄버거 바에서 "**Dev Tools"**를 찾아서 GUI로 편하게 요청을 보낼 수있게 된 나. 기존에 Postman이나 curl로 직접 보내던 REST API 요청을

```plaintext
GET /
```

과 같은 요청으로 Kibana 내부에서 바로 실행하며 결과를 확인할 수 있다.

![](https://blog.kakaocdn.net/dna/ci8vU0/dJMcacaVnon/AAAAAAAAAAAAAAAAAAAAAIo78uWlk3kzJOwcHG86uyUW_4LMS1dWLY69W6SkmjKu/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1772290799&allow_ip=&allow_referer=&signature=ot6uxKUuiegS66GJ%2FYmQHh8NMTg%3D align="left")

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