본문 바로가기
프로젝트/MovMag

[MovMag] ElasticSearch setup

by JayAlex07 2023. 11. 2.

[MovMag] ElasticSearch setup

 

엘라스틱서치?

  • 처음에는 query문을 통해서 원하는 내용을 출력하려고 했다
  • like 문을 사용할 수 있지만, 데이터가 너무 많을 때에는 찾는 속도가 느려질 수 있다
    • 현재 만들고 있는 MovMag 이라는 영화 리뷰 API 자체에서, DB에 저장한 영화 개수만 10,000개가 넘고, 캐스트 수는 100,000명이 넘었다

 

엘라스틱서치는 DB는 아니지만, 방대한 양의 데이터를 신속하고 거의 실시간으로 저장, 검색, 분석할 수 있다

 

ELK (ElasticSearch / Logstatsh / Kibana)

  • 단독으로 ElasticSearch를 사용하여 검색 기능을 구현할 수 있다
  • ElasticSearch : 분석 및 저장 기능을 담당
  • Logstatsh : 수집 기능
  • Kibana : 시각화하는 도구

Logstatsh 에서 다양한 소스의 로그 또는 트랜잭션 데이터를 수집, 집계, 파싱하여 ElasticSearch로 전달한다

ElasticSearch는 Logstatsh를 통해 받은 데이터를 검색 및 집계를 하여 필요한 정보를 획득한다

Kibana는 ElasticSearch의 빠른 검색을 통해 데이터를 시각화 및 모니터링을 한다

 

ElasticSearch vs RDBMS

 

RDBMS ElasticSearch
schema mapping
database index
table type
row document
column field

 

ElasticSearch를 REST API를 사용하여 관계형 데이터베이스간 관계

 

ElasticSearch Relational DB CRUD
GET SELECT READ
PUT UPDATE UPDATE
POST INSERT CREATE
DELETE DELETE DELETE

 


 

스프링 설정하기 (Using docker-compose)

 

프로젝트 루트 폴더에 Dockerfile 파일을 만들었다

  • nori 라는 형태소 분석기를 설치하기 위해 Dockerfile에 아래와 같이 설정
  • 이는 오픈소스 한국어 처리기고 스칼라로 쓰여진 한국어 처리기다
  • 텍스트 정규화와 형태소 분석, 스테밍을 지원하고 있다
  • 짧은 글은 물론이고 긴 글도 처리할 수 있다
ARG VERSION
FROM docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
RUN elasticsearch-plugin install analysis-nori

 

프로젝트 루트 폴더에 docker-compose.yml 파일을 만들었다

  • 아래와 같이 만들고 난 후 docker 컨테이너로 만들어준다
  • docker compose -f docker-compose.yml up
    • docker compose 띄우기, 마지막에 -d 붙이면 daemon으로 작동 
  • docker compose -f docker-compose.yml down
    • docker compose 죽이기
version: '3.7'
services:
  es:
    build:
      context: .
      args:
        VERSION: {버전 입력}
    container_name: {이름 입력}
    environment:
      - node.name=single-node
      - cluster.name=backtony
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es-bridge

  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:{버전 입력}
    environment:
      SERVER_NAME: kibana
      ELASTICSEARCH_HOSTS: http://{지정해준 container_name}:9200
    ports:
      - 5601:5601
    depends_on:
      - {지정해준 container_name}
    networks:
      - es-bridge

networks:
  es-bridge:
    driver: bridge

 

프로젝트를 실행하고 http://localhost:5601 에 들어가서 dev tool을 검색창에 친 뒤에 테스트를 한다

  • 아래와 같이 치고, 200-ok 가 나오면 테스트 성공
GET _analyze
{
  "tokenizer": "nori_tokenizer",
  "text" : [
      "테스트 너무 재미있어요."
    ]
}

 

Build.Gradle

  • 아래와 같이 의존성을 추가해 준다
  • 일라스틱서치만 추가해준다면, jakarta.json 관련한 에러 메세지가 뜰 수 있다
// 일라스틱서치
implementation 'jakarta.json:jakarta.json-api:2.0.1'
implementation 'org.springframework.data:spring-data-elasticsearch:4.4.9'

'프로젝트 > MovMag' 카테고리의 다른 글

[MovMag] WebClient  (0) 2023.11.06
[MovMag] ElasticSearch + MySQL  (0) 2023.11.03
[MovMag] 20231031 오늘 배운 것 (@Asnyc)  (0) 2023.10.31
[MovMag] 오늘 배운 것 - 20231030  (0) 2023.10.31