개발놀이터
Elasticsearch CRUD 해보기 본문
이번 포스팅에선 Elasticsearch 의 테이블 (Elasticsearch에선 Index) 생성과 값을 집어넣고, 읽고, 변경하고, 지우는 방법을 알아보도록 하겠습니다.
우선 Elasticsearch에 대한 전반적인 이해가 있으면 정말 좋습니다. 아래의 링크에서 확인해주세요!
https://coding-review.tistory.com/315
그리고 하나 또 알아두셔야 하는 것이 바로 Elasticsearch는 NoSQL 카테고리에 들어갑니다. 때문에 SQL처럼 쿼리를 날려서 테이블을 만들거나 값을 저장하지 않는다는 의미이죠.
우선 Elasticsearch의 다운로드 주소는 아래입니다!
https://www.elastic.co/kr/downloads/past-releases#elasticsearch
압축을 해제하고 bin 폴더에 elasticsearch.bat 파일을 실행하면 실행이 된겁니다.
앞선 Redis에선 RedisTemplate으로 값을 저장하고 조회했습니다. 그럼 Elasticsearch는? 바로 HTTP 통신으로 값을 저장합니다.
저는 이 사실을 알고 정말 깜짝 놀랐습니다. 하다하다 HTTP 통신으로 데이터를 집어넣다니..
때문에 Elasticsearch에선 값을 저장하고 조회할 때 특정한 조건이 필요합니다. 때문에 준비물은 Postman입니다.
Postman의 다운로드 경로는 바로 아래로 가셔서 다운 받으시면 됩니다.
https://www.postman.com/downloads/
이제 본격적으로 시작해보죠!
테이블 (Index 생성)
Elasticsearch에선 SQL의 테이블을 Index (이하 인덱스) 라고 부릅니다.
Elasticsearch는 철처하게 RESTful API의 규칙을 따르고 있습니다. 때문에 HTTP 메서드에 대해서 알고 계시면 더 이해하기 편하실겁니다.
그럼 인덱스를 생성해볼까요?
- 먼저 HTTP 메서드를 PUT으로 바꾸고
- localhost:9200 (Elasticsearch는 9200포트를 사용합니다) 뒤에 자신이 만들고싶은 인덱스 이름을 적어줍니다. 저는 item이라고 적었습니다.
- 주소창 아래 Body를 클릭하고
- raw를 클릭한다음
- 기존 TEXT라고 되어있는 것을 JSON으로 바꿔줍니다. 이러면 자동적으로 application/json 으로 바꿔줍니다.
- 그리고 Body에 내용을 적으시면 됩니다.
Body에 적힌 내용을 하나씩 살폅보도록 하자면
- settings : 여기에 shard와 replica의 개수가 들어갑니다. 이 세팅으로 얼마나 큰 데이터 셋을 담을 것인지를 설정하는 것이죠.
- mappings : mappings는 어떤 데이터를 매핑시킬 것인지를 정하는 곳입니다.
- properties : 이곳은 SQL로 치면 column을 설정하는 곳입니다.
- type : 어떤 타입의 데이터를 담을 것인지 선택합니다. 저는 text를 담을 것이기 때문에 text로 설정했습니다.
- properties : 이곳은 SQL로 치면 column을 설정하는 곳입니다.
저는 이렇게 간단하게 설정했지만 실전에선 더 다양한 정보들을 기입해야 합니다.
짧게 설명만 해드리자면
- 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
크롬 확장 프로그램이고 공짜입니다. 사용법은 어렵지 않으니 몇번 만져보시면 바로 익숙해지실겁니다.
마치며
이렇게 Elasticsearch 인덱스 생성과 CRUD에 대해서 알아봤습니다. NoSQL은 진입장벽이 정말 어마어마하네요...
저도 필요에 의해 익힌 기술이지만 정말 까다롭기 그지없습니다. 왜 RDBMS가 현재 주류인지 알 것 같은 느낌이 드네요.
아무튼 Elasticsearch는 검색엔진인만큼 검색에 특화되어 있습니다. 그렇기 때문에 검색성능을 향상시키고 싶으신 분들은 한번쯤 해보시는 것을 추천합니다!
'CS 지식 > 데이터베이스' 카테고리의 다른 글
Elasticsearch 에 MySQL 데이터 동기화하기 (데이터 마이그레이션) (0) | 2023.05.26 |
---|---|
Elasticsearch 스프링에서 사용하기 (0) | 2023.05.26 |
Redis 로 캐싱 구현하기 ver.2 (Low Level 코딩) (0) | 2023.05.15 |
Redis를 이용해 세션 구현하기 (with Spring) (0) | 2023.05.03 |
Redis를 이용해 캐싱 구현하기 (with Spring) (0) | 2023.05.03 |