개발놀이터

Elasticsearch CRUD 해보기 본문

CS 지식/데이터베이스

Elasticsearch CRUD 해보기

마늘냄새폴폴 2023. 5. 26. 05:26

이번 포스팅에선 Elasticsearch 의 테이블 (Elasticsearch에선 Index) 생성과 값을 집어넣고, 읽고, 변경하고, 지우는 방법을 알아보도록 하겠습니다. 

 

우선 Elasticsearch에 대한 전반적인 이해가 있으면 정말 좋습니다. 아래의 링크에서 확인해주세요!

https://coding-review.tistory.com/315

 

Elasticsearch

이번 포스팅에서는 Elasticsearch에 대해서 알아보겠습니다. Elasticsearch가 뭐야? 라고 물으면 "index 아냐?", "검색 엔진이잖아", "데이터베이스 분석하는 툴이지", 구글같은거?" 이런 많은 대답이 오고

coding-review.tistory.com

 

그리고 하나 또 알아두셔야 하는 것이 바로 Elasticsearch는 NoSQL 카테고리에 들어갑니다. 때문에 SQL처럼 쿼리를 날려서 테이블을 만들거나 값을 저장하지 않는다는 의미이죠. 

 

우선 Elasticsearch의 다운로드 주소는 아래입니다!

https://www.elastic.co/kr/downloads/past-releases#elasticsearch

 

Past Releases of Elastic Stack Software

Looking for a past release of Elasticsearch, Logstash, Kibana, es-hadoop, Shield, Marvel, or our language clients? You're in the right place.

www.elastic.co

 

압축을 해제하고 bin 폴더에 elasticsearch.bat 파일을 실행하면 실행이 된겁니다.

 

앞선 Redis에선 RedisTemplate으로 값을 저장하고 조회했습니다. 그럼 Elasticsearch는? 바로 HTTP 통신으로 값을 저장합니다. 

 

저는 이 사실을 알고 정말 깜짝 놀랐습니다. 하다하다 HTTP 통신으로 데이터를 집어넣다니..

 

때문에 Elasticsearch에선 값을 저장하고 조회할 때 특정한 조건이 필요합니다. 때문에 준비물은 Postman입니다. 

 

Postman의 다운로드 경로는 바로 아래로 가셔서 다운 받으시면 됩니다. 

https://www.postman.com/downloads/

 

Download Postman | Get Started for Free

Try Postman for free! Join 25 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

 

이제 본격적으로 시작해보죠!

 

테이블 (Index 생성)

Elasticsearch에선 SQL의 테이블을 Index (이하 인덱스) 라고 부릅니다. 

 

Elasticsearch는 철처하게 RESTful API의 규칙을 따르고 있습니다. 때문에 HTTP 메서드에 대해서 알고 계시면 더 이해하기 편하실겁니다. 

 

그럼 인덱스를 생성해볼까요? 

 

 

  1. 먼저 HTTP 메서드를 PUT으로 바꾸고
  2. localhost:9200 (Elasticsearch는 9200포트를 사용합니다) 뒤에 자신이 만들고싶은 인덱스 이름을 적어줍니다. 저는 item이라고 적었습니다. 
  3. 주소창 아래 Body를 클릭하고
  4. raw를 클릭한다음
  5. 기존 TEXT라고 되어있는 것을 JSON으로 바꿔줍니다. 이러면 자동적으로 application/json 으로 바꿔줍니다. 
  6. 그리고 Body에 내용을 적으시면 됩니다. 

Body에 적힌 내용을 하나씩 살폅보도록 하자면 

 

  • settings : 여기에 shard와 replica의 개수가 들어갑니다. 이 세팅으로 얼마나 큰 데이터 셋을 담을 것인지를 설정하는 것이죠. 
  • mappings : mappings는 어떤 데이터를 매핑시킬 것인지를 정하는 곳입니다. 
    • properties : 이곳은 SQL로 치면 column을 설정하는 곳입니다. 
      • type : 어떤 타입의 데이터를 담을 것인지 선택합니다. 저는 text를 담을 것이기 때문에 text로 설정했습니다. 

 

저는 이렇게 간단하게 설정했지만 실전에선 더 다양한 정보들을 기입해야 합니다. 

 

짧게 설명만 해드리자면

 

  • type : 이 옵션은 데이터 타입을 설정합니다. text, keyword, date, long, double, boolean을 설정할 수 있습니다. 
  • index : 이 옵션은 찾을 수 있는 필드인지 설정하는 것입니다. true로 설정하면 검색가능하다는 것이고 false로 하면 검색할 수 없는 필드라는 의미입니다. 
  • analyzer : 이 옵션은 인덱스를 만들 때 필드에 대해 사용되어야 하는 애널라이저를 설정할 수 있습니다. 
  • search_analyzer : 이 옵션은 검색을 할 때 필드에 대해 사용되어야 하는 애널라이저를 설정할 수 있습니다. 위의 것과 비슷한 듯 조금 다르죠?
  • fields : 이 옵션은 다른 방법으로 같은 필드를 찾거나 인덱스할 수 있게 해줍니다.

 

저도 아직 Hello world 수준이라 자세히는 알지 못하지만 언젠가 사용할 날이 오길 기대해봅니다. 

 

 

CRUD

Create

먼저 데이터를 삽입해야겠죠? 

이제 Postman의 대략적인 조작 방식은 알고 있다고 가정하고 빠르게 넘어가겠습니다. 

 

먼저 POST로 바꾸고 localhost:9200 뒤에 인덱스 이름 그리고 _doc 을 붙여주고 / (슬래쉬) 하나를 붙여줍니다. 

 

바디를 JSON으로 바꾸고 내가 설정한 인덱스의 필드와 일치하게 넣으면 됩니다. 

 

Read

그냥 GET요청으로 바꾸면 데이터를 읽을 수 있지만...

 

우리는 이런식으로 안쓸거잖아요? 

 

검색어가 있고 그 검색어를 바탕으로 검색할 것입니다. 

 

먼저 GET요청으로 바꾸고 자신이 검색할 인덱스 이름 뒤에 _search 를 붙여서 내가 검색할 것이라는 것을 알려줍니다. 

 

그리고 바디에 query, match를 연달아 적고 field 이름을 적고 검색어를 검색하면 됩니다. 

 

Update

앞선 예제와 거의 비슷합니다. 조금 다른 점은 인덱스 뒤에 _update 를 붙인다는 것과 업데이트할 데이터를 적는 다는 것입니다. 

 

Delete

Delete는 document 아이디를 알아야 삭제가 됩니다. document는 SQL로 치면 row에 해당하는 각각의 데이터를 말합니다. 

 

그리고 내가 넣은 데이터를 눈으로 보고싶으신 분은 제가 사이트 하나를 추천해드릴게요. Elasticsearch GUI가 많이 있지만 저는 이걸 사용하고 있습니다. 

https://chrome.google.com/webstore/detail/elasticvue/hkedbapjpblbodpgbajblpnlpenaebaa

 

Elasticvue

Elasticsearch frontend

chrome.google.com

 

크롬 확장 프로그램이고 공짜입니다. 사용법은 어렵지 않으니 몇번 만져보시면 바로 익숙해지실겁니다. 

 

마치며

이렇게 Elasticsearch 인덱스 생성과 CRUD에 대해서 알아봤습니다. NoSQL은 진입장벽이 정말 어마어마하네요...

 

저도 필요에 의해 익힌 기술이지만 정말 까다롭기 그지없습니다. 왜 RDBMS가 현재 주류인지 알 것 같은 느낌이 드네요. 

 

아무튼 Elasticsearch는 검색엔진인만큼 검색에 특화되어 있습니다. 그렇기 때문에 검색성능을 향상시키고 싶으신 분들은 한번쯤 해보시는 것을 추천합니다!