바로 지난주만 해도 코프링을 해보고자 마음 먹었지만, 세상일은 내 뜻보단 회사의 뜻대로 움직이는 법이라..
기존 MariaDB 파이프라인 구조에서 Elasticsearch를 사용하는 구조로 변경하는 작업을 진행하게 되었다.
계속 해보고 싶었던 작업이기도 해서, 패기있게 진행하게 되었지만, 역시 설정부터가 쉽지가 않았다.
다행히 스프링부트에서는 이미 훌륭한 기능을 지원하고 있다.(spring-data-elasticsearch)
이 기능을 최대한 활용하기로 하였고, 우선적으로 로컬에서 환경을 구축해보기로 했다.
- Docker를 활용하여 Elasticsearch Container를 띄운다
일단 공식문서를 기준으로 진행한다. (https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docker.html)
실 운영에서는 compose를 활용해 멀티 노드로 구축하겠지만, 로컬이니까 그냥 단일 노드로 구성한다.
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에서 설정하고 연동하는 방법을 진행해보고자 한다.