본문 바로가기

카테고리 없음

[Spring] Elasticsearch를 Spring에 적용해보자(1)

바로 지난주만 해도 코프링을 해보고자 마음 먹었지만, 세상일은 내 뜻보단 회사의 뜻대로 움직이는 법이라..

기존 MariaDB 파이프라인 구조에서 Elasticsearch를 사용하는 구조로 변경하는 작업을 진행하게 되었다.

 

계속 해보고 싶었던 작업이기도 해서, 패기있게 진행하게 되었지만, 역시 설정부터가 쉽지가 않았다.

다행히 스프링부트에서는 이미 훌륭한 기능을 지원하고 있다.(spring-data-elasticsearch)

이 기능을 최대한 활용하기로 하였고, 우선적으로 로컬에서 환경을 구축해보기로 했다.

 

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.12
docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -d --name elasticsearch -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.17.12
  • elasticsearch는 기본적으로 json 형식으로 rest api 통신을 통해 데이터를 주고 받을 수 있다.
  • 먼저 HealthCheck를 해보자
curl -X GET "localhost:9200/_cluster/health?pretty"
 
 {
  "cluster_name" : "docker-cluster",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 5,
  "active_shards" : 5,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 2,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 71.42857142857143
}
  • Elasticsearch와 RDBMS의 개념상으로는 아래와 같이 비교할 수 있다.
RDBMS Elasticsearch
Database Index
Table Type
Row Document
Column Feild
SELECT GET
INSERT POST
UPDATE PUT
DELETE DELETE
  • Elasticsearch 7 이후부터는 Type을 사용하지 않기 때문에, 기존 MariaDB 구조와 유사하게 가져가고자 한다면, 기존의 테이블명을 Index와 매핑해야 할 것으로 보인다.
  • 더미 데이터를 하나 넣고, 조회해보자. 물론 이 부분도 공식문서를 참고했다.(https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docs-index_.html)
curl -XPOST "localhost:9200/my_index/_doc/1" -H 'Content-Type: application/json' -d'{"name":"kadun"}'

curl -XGET "localhost:9200/my_index/_doc/1?pretty"
{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "kadun"
  }
}

다음 글에서는 SpringBoot에서 설정하고 연동하는 방법을 진행해보고자 한다.