4.1 REST API

이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍니다.

Elasticsearch는 http 프로토콜로 접근이 가능한 REST API를 지원합니다. 자원별로 고유 URL로 접근이 가능하며 http 메서드 PUT, POST, GET, DELETE 를 이용해서 자원을 처리합니다. 이런 특성을 가진 시스템을 보통 RESTFul 한 시스템이라고 말합니다.

REST API가 익숙치 않은 분들을 위해 간단한 비교 설명을 드리면 다음과 같습니다. 사용자 정보를 다루는 user.com 이라는 시스템이 있다고 가정하고 name=kim, age=38, gender=m 이라는 사용자 정보를 처리한다고 해 보겠습니다. REST를 지원하지 않는 시스템에서는 보통 다음과 같이 각 가능에 대한 개별 페이지로 접근하거나 명령을 매개변수로 처리합니다.

RESTFul 하지 않은 시스템에서의 데이터 처리

  • 입력 : http://user.com/input.jsp?name=kim&age=38&gender=m

  • 조회 : http://user.com/get.jsp?name=kim

  • 삭제 : http://user.com/delete.jsp?name=kim

REST API를 지원하는 시스템은 kim 이라는 사용자에 대해 항상 단일 URL로 접근을 하고 PUT, GET, DELETE 같은 http 메서드로 데이터를 처리합니다

RESTFul 한 시스템에서의 데이터 처리

  • 입력 : PUT http://user.com/kim -d {"name":"kim", "age":38, "gender":"m"}

  • 조회 : GET http://user.com/kim

  • 삭제 : DELETE http://user.com/kim

유닉스 curl

MacOS, 리눅스와 같은 유닉스 기반 운영체제에서는 curl 명령어로 간편하게 REST API 사용이 가능합니다. Elasticsearch를 실행한 뒤 curl 명령을 이용해서 elasticsearch 클러스터의 최상위 경로를 호출하며 다음과 같이 클러스터의 상태 정보가 json 형식으로 리턴됩니다.

GET 메서드로 elasticsearch 클러스터 조회
$ curl -XGET "http://localhost:9200"
{
"name" : "Jongminui-MacBook-Pro.local",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "hpmT8TPiR1Kk69YNao9V3w",
"version" : {
"number" : "7.3.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "de777fa",
"build_date" : "2019-07-24T18:30:11.767338Z",
"build_snapshot" : false,
"lucene_version" : "8.1.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

리턴된 결과는 노드명, 클러스터명, Elasticsearch 버전, 루씬 버전 등의 정보들을 담고 있습니다.

Kibana Dev Tools

Rest API를 쉽게 사용하기 위해서는 포스트맨 같은 도구를 사용할 수 있습니다. Kibana에는 elasticsearch 에서 REST API를 간편하게 실행할 수 있는 Dev Tools 라는 도구를 제공합니다.

먼저 Kibana를 실행하기 위해서는 Elastic 홈페이지 (https://www.elastic.co)에서 운영체제별로 맞는 Kibana 버전을 내려받아 압축을 풀고 bin/kibana 또는 bin/kibana.bat (윈도우즈) 를 실행시키면 디폴트로 같은 호스트의 localhost:9200 에서 실행중인 elasticsearch와 통신하며 실행이 됩니다.

Elasticsearch와 Kibana가 서로 다른 호스트에서 실행되고 있거나 통신 포트가 9200이 아니면 Kibana 홈 config 디렉토리 아래에 있는 kibana.yml 파일에서 elasticsearch.url: "http://localhost:9200" 옵션을 설정하면 됩니다. 기본적으로 Kibana는 5601 포트에서 실행이 되며 변경하고 싶으면 server.port: 5601 을 변경하고 싶은 포트 값으로 설정합니다.

Kibana를 실행한 뒤 웹 브라우저를 열고 http://localhost:5601 로 접속하면 Kibana를 바로 사용할 수 있습니다. Kibana Dev Tools는 쿼리의 자동 완성도 되고 호스트 경로도 별도로 입력할 필요가 없습니다. 그리고 Dev Tools 에서 입력한 명령을 curl 명령으로 변환하여 클립보드에 복사하는 것도 가능합니다.

Kibana 의 Dev Tools 메뉴