🌿REST API를 사용하기 위한 도구
1. curl
2. Postman, Insomnia 등 REST Client
3. Kibana > Dev Tools
잦은 입출력을 해야 하는데 REST Client 도구를 사용하면 되려 번거로워진다. 그래서 Kibana의 Dev Tools를 사용하기로 한다.
REST API에 대해서는 위 글을 참고한다.
🌿Index, Document
Index는 DB, 테이블을 의미하며, Document는 데이터(행)를 의미한다.
Index CRUD
Index 조작
Index를 생성하기 전에 이미 존재하는지를 확인하고 조회하는 작업을 해보도록 하자.
$ curl -X GET "localhost:9200/<인덱스명>"
$ curl -X GET "localhost:9200/member"
$ curl -X GET "localhost:9200/member?pretty"
만약 member라는 테이블을 만든다고 한다면 <인덱스명>에 member를 적으면 된다.
뒤에 pretty를 붙이면 더 보기 좋게 출력 형태를 만들어준다.
Index 생성하기
$ curl -X PUT "localhost:9200/member"
$ curl -X PUT "localhost:9200/member?pretty"
만들고 싶은 인덱스 이름으로 만드는데, 이번에도 보기 좋게 하기 위해 pretty를 사용한다.
GET으로 확인해 보면 member라는 인덱스가 생성된 것을 확인할 수 있다.
Index 삭제하기
$ curl -X DELETE "localhost:9200/member"
$ curl -X DELETE "localhost:9200/member?pretty"
삭제한 뒤에 다시 GET으로 확인해 보면 404 에러가 발생한다.
Elasticsearch에 들어가는 데이터는 정형화 되어 있지 않다. 즉, 형식이 따로 없다. 그래서 완전히 다른 형식의 저장소라고 생각하면 된다.
Document CRUD
Document 조작
- Document == 레코드 1줄
$ curl -X PUT "localhost:9200/member"
인덱스를 생성했으므로 이제 Document를 추가하는 작업을 할 수 있게 된다.
Document 추가하기
- PUT
- 데이터 입력하기
Elasticsearch는 내부적으로 물리적인 구조에 차이가 있어서 오해할 수 있긴 한데, PUT으로 새로운 데이터를 생성한다.
$ curl -X PUT "<서버주소>:<포트번호>/<인덱스>/_doc/<도큐먼트ID>" -H "Content-Type: application/json" -d "데이터"
$ curl -X PUT "localhost:9200/member/_doc/1" -H "Content-Type: application/json" -d '{ "name": "Isaac", "age": 24 }'
$ curl -X PUT "localhost:9200/member/_doc/2?pretty" -H "Content-Type: application/json" -d '{ "name": "Sopia", "age": 25 }'
_doc라는 예약어 뒤에 <도큐먼트ID>가 온다는 점과 대소문자를 구분하기 때문에 점에 주의하도록 한다.
데이터에는 홑따옴표 또는 쌍따옴표로 {} 안에 json 형태로 넣는다. 참고로 windows에서는 홑따옴표로 하면 에러가 발생한다.
도큐먼트 ID가 동일하면 추가가 아니라 수정이라고 생각하므로 2로 바꿔주었다.
version은 생성한 레코드의 버전을 의미하며, 수정하거나 변화를 주면 version이 하나씩 계속 올라간다. 따라서 version의 숫자가 높을수록 수정이 많이 발생한 것이다.
Index 삭제 후 Document 생성
member 테이블을 삭제하면 index가 사라질 뿐만 아니라 안에 들어 있는 데이터도 함께 사라지게 된다.
이때 다시 데이터를 넣으려고 하면 member라는 index가 없는 상태에서 데이터를 집어넣겠다는 의미가 되는데, 이게 실행이 된다.
Elasticsearch는 독특하게 Document를 저장할 Index가 존재하지 않아도 데이터를 넣으면 자동으로 Index를 생성해 준다. 그래서 Index를 만들고 Document를 넣어도 되고, 처음부터 Document부터 넣어도 된다.
🌿Kibana Dev Tools
Kibana의 Dev Tools를 사용하면 훨씬 편리하게 위의 작업을 동일하게 할 수 있다.
http://localhost:5601/app/dev_tools#/console
Index CRUD
$ curl -X GET "localhost:9200/member"
GET member
$ curl -X PUT "localhost:9200/member"
PUT member
$ curl -X DELETE "localhost:9200/member"
DELETE member
현재 접속하고 있는 게 기본값으로 Elasticsearch에 자동으로 연결되어 있기 때문에 위 구문이 동일하다.
Document CRUD
Document 추가하기
# member Index 생성하기
PUT member
# Document 추가하기
PUT member/_doc/1
{
"name": "Isaac",
"age": 24
}
마찬가지로 Document를 생성할 때에도 위와 같이 코드가 생략된다.
Document 조회하기
#Document 생성 확인 (조회하기)
GET member/_doc/1
#데이터만 조회
GET member/_source/1
Document를 조회할 때 데이터만 조회하도록 할 수 있다.
🍃에러 메시지 없애기
$ sudo systemctl stop elasticsearch
에러 메시지를 없애기 위해서는 먼저 Elasticsearch를 중지시켜야 한다.
$ sudo vi /etc/elasticsearch/elasticsearch.yml
YAML을 줄여서 yml이라고 하는 설정 파일이 있다.
이 파일을 설정해 보도록 하자.
xpack.security.enabled: false
o를 눌러 INSERT MODE로 바꾼 뒤에 위와 같이 코드를 입력한다.
이제 다시 elasticsearch를 시작하면 쿼리를 실행했을 때 에러 메시지가 생기지 않는다.