'RESTful'에 해당되는 글 4건

  1. 2021.08.12 [Elasticsearch] RESTful API + ID:PASSWORD 요청.
  2. 2021.07.05 [Elasticsearch] Bulk Request by Restful API
  3. 2021.01.28 [Spring] Springboot @RestController 404 에러 발생 시
  4. 2017.07.17 [esquery-proxy] Elasticsearch 용 RESTful API Gateway/Proxy

[Elasticsearch] RESTful API + ID:PASSWORD 요청.

Elastic/Elasticsearch 2021. 8. 12. 13:18

분명 어딘가에 기록해 두었는데 이걸 왜 못찾고 있는 거지..ㅡ.ㅡ;

 

http://elastic:password@localhost:9200/test-index

 

elasticsearch 에서 기본 인증을 사용 할 경우 API token 사용 이런게 아니라면 단순하게는 저렇게 보낼 수 있습니다.

 

https://www.ietf.org/rfc/rfc2617.txt

공식 스펙은 위 문서 참고 하시면 됩니다. (Basic Authentication)

 

URL 로 보내기 싫으시면 header 로 보내시면 됩니다.

 

elastic:password 를 base64 인코딩 하시고 "Authorization" 헤더로 값을 보내시면 되겠습니다.

 

KEY : Authorization

VALUE : Basic ZWxhc3RpYzpwYXNzd29yZA==

 

:

[Elasticsearch] Bulk Request by Restful API

Elastic/Elasticsearch 2021. 7. 5. 15:41

공홈 문서 보시면 됩니다.

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html

 

워낙에 제가 예전에 작성해 놓은 글이 있어서 그냥 최신 버전으로 remind 합니다.

$ curl -s -H "Content-Type: application/x-ndjson" -XPOST http://localhost:9200/_bulk 
  --data-binary "@ATC.json"

 

ATC.json)

{"index": { "_index": "atc", "_id": "1"}}
{"chosung": "ㄴㅇㅋ", "chosung_eng": "nike", "jamo_kor": "ㄴㅏㅇㅣㅋㅣ", "jamo_eng": "skdlzl", "item_kor": "나이키", "item_eng": "nike"}

 

:

[Spring] Springboot @RestController 404 에러 발생 시

ITWeb/개발일반 2021. 1. 28. 15:11

분명 유저 불량입니다.

보통 Annotation 선언하고 빨갱이도 없고 정상적으로 실행도 되었는데 REST API 호출 시 404 Not found 가 떨어 지는 경험을 해 보신 분들이 계실 것 같습니다.

 

특히 쥬니어 분들 중에 많을 것 같고요.

 

딱 봐도 Component Scan 이 정상적으로 되지 않았기 때문인데 코드를 보면 아무 문제가 없어 보입니다.

제가 본 이슈는 Main Application Class 파일의 위치가 잘못 되어 있는 것을 확인 했습니다.

 

tree 구조로 예를 들면) 틀린 예

ㄴ com.abc.app

MainApplication.java

ㄴ com.abc.api

ApiRestController.java

 

이렇게 되면 MainApplication 상위에 있는 class 는 scan 이 되지 않습니다.

반드시 MainApplication  하위로 패키지와 클래스를 이동 시켜 주셔야 합니다.

그게 아니라면 별도 @ComponentScan 이용해서 수동 등록을 해주시는 것도 방법 일 것 같습니다.

 

tree 구조로 예를 들면) 맞는 예

ㄴ com.abc.app

MainApplication.java

ㄴ com.abc.app.api

ApiRestController.java

 

:

[esquery-proxy] Elasticsearch 용 RESTful API Gateway/Proxy

ITWeb/검색일반 2017. 7. 17. 19:01

Elasticsearch 를 서비스 용도로 많은 분들이 사용하고 계시는 것으로 압니다.

저 처럼 Java API를 사용하고 계신 분들도 계실 테고 RESTful API 를 사용하고 계신 분들도 계실 것으로 압니다.

그냥 버전 업그레이도 해야 하고 해서 재미 삼아 가볍게 만들어 보았습니다.

관련해서 

- 단순 기능 동작 유무만 확인했습니다. (잘 됩니다.)

- 성능 테스트 하지 않았습니다.

- 안정성 테스트 하지 않았습니다.

그래서 가져다 막 고쳐서 사용하시면 좋겠습니다. 


일단 만들게 된 동기는

- Search 와 Aggregation 에 대해서 사용할 목적으로 만들었습니다.

- Elasticsearch JAVA API 버전 관리에 대한 유지보수 비용을 절감 해야 했습니다.

- Elasticsearch Cluster 에 대한 Version Upgrade 도 수행 해야 했습니다.

- Multi Cluster 에 대한 Concurrent 처리가 가능 해야 했습니다.


프로젝트 코드를 보시면 아시겠지만 매우 간단 합니다.


사용한 Framework)

- SpringMVC + Maven Project

- pom.xml  내 dependency 참고 하시면 됩니다.


지원 가능한 API)

- Elasticsearch에서 제공하는 거의 모든 RESTful API 를 제공 합니다.

- HTTP POST 만 구현해 놨기 때문에 POST 를 지원하지 않는 API 는 동작 하지 않습니다.

- 조만간 시간 나는데로 추가해 보겠습니다.

- Single Request 뿐만 아니라 Multi Request 도 지원 합니다.

- Single Cluster 뿐만 아니라 Multi Cluster 로 Request 를 보낼 수 있습니다.

-  서로 다른 Version 의 Cluster 라도 상관 없습니다.


Single Request Example)

[WAS Endpoint]

http://localhost:8080/query


[Method]

POST RAW


[Request Body]

{

  "target":"http://{YOUR-CLUSTER}/{YOUR-INDEX}/_search",

  "query":{}

}

- target

-  요청할 Elasticsearch Cluster 의 RESTful Endpoint 를 작성 하시면 됩니다.

- {YOUR-INDEX} 는 alias, single index, multi index  모두 사용 가능 합니다.

- query

- 기존에 사용하시던 QueryDSL 문을 그대로 넣어 주시면 됩니다.

- match_all  query 가 실행 됩니다.


Multi Request Example)

[WAS Endpoint]

http://localhost:8080/mquery


[Method]

POST RAW


[Request Body]

[

{

  "target":"http://{YOUR-CLUSTER1}/{YOUR-INDEX1}/_search",

  "query":{}

},

{

  "target":"http://{YOUR-CLUSTER1}/{YOUR-INDEX2}/_search",

  "query":{}

},

{

  "target":"http://{YOUR-CLUSTER2}/{YOUR-INDEX1}/_search",

  "query":{}

},

{

  "target":"http://{YOUR-CLUSTER2}/{YOUR-INDEX2}/_search",

  "query":{}

}

]


 Multi Request 의 경우 _msearch API 와 비슷 하게 동작은 합니다.

다만, _msearch의 경우 서로 다른 클러스터간에 통신은 지원 하지 않습니다.



추가 Parameters)

- routing

이 기능은 특정 key 를 가지고 문서를 저장 하기 위한 대상 shard 를 지정 하기 위해 사용 합니다.

문서 저장 시 해당 key 에 대한 Grouping 이나 Classify 를 위해 사용 합니다.

자세한 내용은 Elastic 사의 Reference 문서를 참고하세요. (클릭)

- preference

이 기능은 검색 질의 시 아주 유용하게 활용이 가능 합니다.

특정 shard 를 지정 할 수도 있고 질의 하고 싶은 node 를 선택 할 수도 있습니다.

자세한 내용은 Elastic 사의 Reference 문서를 참고하세요. (클릭)


Github Repository)

https://github.com/HowookJeong/esquery-proxy

: