-
ElasticSearch - RestHighLevelClient 파헤치기ElasticSearch/문법 2024. 11. 13. 17:09반응형
RestHighLevelClient는 Elasticsearch에서 제공하는 Java High Level REST Client API의 핵심 클래스입니다. 이 API는 Elasticsearch의 기능을 Java 애플리케이션에서 사용하기 위한 라이브러리로, Elasticsearch 클러스터와 상호작용하여 데이터 검색, 색인 생성, 업데이트 및 삭제와 같은 다양한 작업을 수행할 수 있습니다. RestHighLevelClient는 REST API를 통해 Elasticsearch와 통신하며, REST API 호출을 간편하게 할 수 있도록 도와주는 추상화된 기능을 제공합니다.
주요 특징 및 기능
- Elasticsearch 클러스터와의 상호작용: RestHighLevelClient는 Elasticsearch 클러스터와의 통신을 간단하게 처리할 수 있습니다. 이를 통해 클러스터에 데이터를 색인하고 검색할 수 있으며, 각종 관리 작업을 수행할 수 있습니다.
- 통합된 REST API 지원: Elasticsearch는 JSON 형태의 REST API를 기반으로 동작합니다. RestHighLevelClient는 이러한 REST API 호출을 쉽게 처리할 수 있는 메서드를 제공하여, Java 개발자가 복잡한 HTTP 요청을 직접 작성하지 않아도 되도록 돕습니다.
- 요청 및 응답 객체화: RestHighLevelClient는 요청과 응답을 객체화하여 직관적으로 사용할 수 있게 해줍니다. 예를 들어, 문서를 검색하려면 SearchRequest 객체를 만들고 필요한 매개변수를 설정한 다음, RestHighLevelClient의 search 메서드를 호출하면 됩니다. 응답은 SearchResponse 객체로 반환되어 결과를 쉽게 처리할 수 있습니다.
- 구성 가능성 및 유연성: RestHighLevelClient는 다양한 구성 옵션을 제공하여 Elasticsearch 클러스터에 대한 연결 설정, 시간 초과, 재시도 정책 등을 유연하게 설정할 수 있습니다.
- 비동기 및 동기 요청 처리: RestHighLevelClient는 동기 및 비동기 요청을 모두 지원합니다. 비동기 요청은 ActionListener를 통해 처리되며, 이를 통해 비동기 방식으로 클러스터와 상호작용할 수 있습니다. 이는 큰 데이터 세트에 대한 작업이나, 지연 시간이 중요한 경우 유용합니다.
- 호환성 및 버전 관리: RestHighLevelClient는 Elasticsearch의 특정 버전과 호환됩니다. 따라서 애플리케이션에서 이 클라이언트를 사용할 때는 클러스터와 클라이언트 버전이 일치하도록 신경 써야 합니다.
기본적인 사용 방법 예시
다음은 RestHighLevelClient를 사용하여 Elasticsearch에서 기본적인 색인 및 검색 작업을 수행하는 예시입니다.
// 클라이언트 생성 RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http")) ); // 문서 색인 (인덱싱) IndexRequest request = new IndexRequest("posts", "_doc", "1") .source("field", "value"); IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT); System.out.println("Index Response: " + indexResponse.getResult().toString()); // 문서 검색 SearchRequest searchRequest = new SearchRequest("posts"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchAllQuery()); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); System.out.println("Search Response: " + searchResponse.toString()); // 클라이언트 종료 client.close();
주요 메서드 설명
- index(IndexRequest, RequestOptions): 문서를 인덱스에 저장합니다.
- get(GetRequest, RequestOptions): 지정된 ID의 문서를 검색합니다.
- search(SearchRequest, RequestOptions): 검색 쿼리를 실행하여 결과를 반환합니다.
- delete(DeleteRequest, RequestOptions): 지정된 ID의 문서를 삭제합니다.
- update(UpdateRequest, RequestOptions): 문서의 특정 필드를 업데이트합니다.
장점과 주의 사항
- 장점: RestHighLevelClient는 REST API를 보다 쉽게 사용할 수 있도록 Java 개발 환경에 맞춘 기능을 제공하여 생산성을 높입니다. 또한 동기/비동기 방식 지원으로 유연한 설계를 도와줍니다.
- 주의 사항: 클라이언트와 Elasticsearch 서버 간의 버전 호환성을 유지해야 하며, 비동기 호출 시에는 자원 관리에 주의를 기울여야 합니다.
구성 및 사용 예시
아래 그림은 RestHighLevelClient의 구조와 동작 방식을 시각적으로 설명합니다.+------------------+ +---------------------+ | Application | | Elasticsearch | | (Java Code) | | Cluster | +------------------+ +---------------------+ | | v ^ +------------------+ +---------------------+ | RestHighLevel | | REST API | | Client +-------> (HTTP) | | (Elasticsearch) | | | +------------------+ +---------------------+ | v +------------------+ | RestClient | | (Low Level) | +------------------+
구성 요소와 동작 원리
- Application (Java Code):
- 이 부분은 사용자가 작성한 Java 애플리케이션 코드입니다. Elasticsearch 클러스터와 상호작용하여 데이터를 색인하고, 검색하며, 업데이트하는 등의 작업을 수행할 수 있도록 RestHighLevelClient API를 호출합니다.
- Java 애플리케이션은 RestHighLevelClient를 통해 Elasticsearch와 통신하기 때문에, 사용자는 복잡한 HTTP 요청을 직접 작성하지 않고도 Elasticsearch의 기능을 사용할 수 있습니다.
- RestHighLevelClient:
- RestHighLevelClient는 Java 애플리케이션이 Elasticsearch 클러스터와 상호작용하는 주요 인터페이스 역할을 합니다.
- 이 클라이언트는 Elasticsearch의 주요 기능들을 간단한 메서드 호출로 사용할 수 있게 해줍니다. 사용자는 색인, 검색, 업데이트, 삭제와 같은 작업을 직관적인 API로 수행할 수 있습니다.
- 내부적으로 RestHighLevelClient는 RestClient(Low Level Client)를 사용하여 Elasticsearch REST API와 통신합니다.
- RestClient (Low Level Client):
- RestClient는 RestHighLevelClient가 직접 Elasticsearch 클러스터에 요청을 보낼 수 있도록 해주는 낮은 수준의 클라이언트입니다.
- HTTP 요청을 통해 REST API로 직접 요청을 전달하며, 응답을 수신하고 에러를 관리하는 역할을 담당합니다.
- RestClient는 다양한 HTTP 구성(연결 풀, 타임아웃 등)을 지원하므로, RestHighLevelClient는 이를 활용하여 안정적으로 Elasticsearch에 요청을 보낼 수 있습니다.
- Elasticsearch Cluster:
- 최종적으로 RestHighLevelClient가 보내는 요청은 Elasticsearch 클러스터로 전송됩니다.
- 클러스터는 REST API를 통해 색인 및 검색 작업 등을 처리하고, 그 결과를 다시 RestClient를 통해 RestHighLevelClient로 전달합니다. 클러스터는 노드 간 분산 환경을 구성하여 대규모 데이터 검색을 수행할 수 있는 기능을 갖추고 있습니다.
데이터 흐름 요약
- Java 애플리케이션은 RestHighLevelClient의 메서드를 호출하여 Elasticsearch와 상호작용합니다.
- RestHighLevelClient는 내부적으로 RestClient를 통해 HTTP 요청을 준비하고, 이를 Elasticsearch 클러스터의 REST API로 전송합니다.
- 클러스터는 요청을 처리한 후, 응답을 RestClient로 반환하고, 다시 RestHighLevelClient를 통해 Java 애플리케이션으로 전달합니다.
이 구조 덕분에 RestHighLevelClient는 RestClient의 저수준 HTTP 통신을 캡슐화하여, 개발자가 더욱 직관적이고 안전하게 Elasticsearch와 상호작용할 수 있게 해줍니다.
반응형'ElasticSearch > 문법' 카테고리의 다른 글
ElasticSearch - Keyword, Text 차이점 파헤치기 (5) 2024.11.14 ElasticSearch - Term, Match 차이점 (0) 2024.11.14