Skip to main content

Command Palette

Search for a command to run...

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

Updated
2 min read

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

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

More from this blog

[Elasticsearch] Elasticsearch 기본용어와 CRUD 명령어

-elastic ▶ 들어가며 이번 글에서는 Elasticsearch를 공부하면서 가장 먼저 익혀야 하는 기본 용어를 정리하고,직접 코드를 쳐가며 CRUD(Create / Read / Update / Delete) 명령어에 익숙해지는 시간을 가져보려고 한다. Elasticsearch는 처음 보면 생소한 용어가 많아서 막막할 수 있는데,사실 구조적으로는 우리가 익숙한 MySQL과 닮은 부분이 굉장히 많다. 둘 다 데이터베이스라는 큰 틀 안에서 데...

Feb 17, 20264 min read

Jpa N+1 문제, 우리는 이렇게 잡았다 — 1:1 문의 Api 실전 최적화기

코드 리뷰 한 줄에서 시작된 쿼리 최적화 여정 1. 시작 — "일단 돌아가게 만들자" Finders 프로젝트에서 1:1 문의(Inquiry) API를 맡았다. 현상소에 문의를 남기고, 답변을 받고, 목록을 조회하는 — 평범한 CRUD다. "JPA 쓰면 쿼리 안 짜도 되는 거 아니야?" 솔직히 처음엔 그렇게 생각했다. JpaRepository에 findAll, findById 쓰면 끝이니까. // 첫 번째 버전의 목록 조회 (QueryDS...

Feb 11, 20268 min read

[모니터링] Sentry 도입부터 Discord 에러 알림까지 — 서버 감시 시스템 구축기

"서버 죽었는데 아무도 몰랐다"에서 "에러나면 1분 안에 안다"까지 1. 모니터링을 시작한 계기 프론트엔드: "API 안 되는데요?"백엔드: "엥? 언제부터요?"프론트엔드: "...2시간 전부터요?"백엔드: 😱 어느 날 서버가 죽어있었는데 아무도 몰랐다. 그날 이후, 모니터링 시스템 구축을 결심했다. (Issue #102) 2. 모니터링 도구 비교: 뭘 쓸까? 처음에는 여러 도구를 비교했다. 도구무료 티어장점단점 Sent...

Feb 11, 20268 min read

[CI/CD] 수동 태그에서 자동 릴리즈까지 — Git Flow와 Auto Release

🚀 우리 auto-release.yml 바로 보러가기 → 이 글에서 설명하는 워크플로우의 전체 코드를 바로 확인할 수 있다! main에 머지만 하면 버전 태그부터 릴리즈 노트까지 알아서 생긴다 1. 우리의 Git 전략: Git Flow (경량 버전) Finders 프로젝트는 Git Flow 전략을 사용하고 있다. 다만 hotfix나 release 브랜치 없이, 조금 가볍게 운영한다. main ← 운영 서버 (prod) 배포 브...

Feb 11, 20265 min read

[ci/cd] 대학생 팀의 배포 파이프라인 진화기

PR 하나면 끝나는 무중단 배포까지, 삽질의 기록 1. 시작은 단순했다 "서버에 올려야 하는데... 어떻게 하지?" Finders 프로젝트를 시작했을 때, 배포라는 걸 해본 적이 없었다. 그래서 처음에는 이렇게 했다. 1. SSH로 서버 접속 2. git pull 3. ./gradlew build 4. java -jar app.jar 당연히 문제가 생겼다. 빌드하는 동안 서버가 꺼져있음 (프론트: "API 왜 안 돼요?" 🔥) 빌...

Feb 11, 20267 min read
F

Finders Tech Blog

16 posts