티스토리 뷰

반응형

🙋‍♀️

회사에서 이번 프로젝트를 진행하면서 RestAPI 개발을 맡았고, 과정에서 배운것들이 아주 많았다.

크게 보면 JPA, GITLAB, OpenSearch 정도 될 것 같다. 

그 중에서 OpenSearch에 대해 정리하겠다. 

 

🔎OpenSearch 사용이유

OpenSearch는 생각보다 레퍼런스가 없었다.

OpenSearch는 엘라스틱서치를 기반으로한 아마존의 솔루션인데, 엘라스틱서치가 아닌 오픈서치를 쓴 이유는 다음과 같다.

 

RDBMS 환경에서 엘라스틱서치를 사용하려면

RDBMS를 Document형DB로 변경해주는 작업이 필요하다.

이 작업을 보통 ELK스택에서 L(logstash)가 담당하고, 단순 변환뿐만아니라 배치를 통한 변환, 그리고 K(Kibana)를 연동하여 대시보드 및 모니터링 솔루션도 함께 이용할 수 있다.

그런데, 요구사항이 기존 검색API를 엘라스틱서치로 적용하고, 더 나아가 검색추천 정도까지였으니깐, 굳이 ELK스택을 적용할 필요가 없었다. 무거운것도 무거운것이고 공수나 여러가지로 배보다 배꼽이 더 큰것같았다.

 

그래서 대체할만한 것이 없나 찾아보던중 AWS 서버를 사용하고 있었기 때문에 아마존에서 엘라스틱서치를 지원한다는 것을 알게되었고, 그것이 Opensearch였다.

 

Opensearch에서 L(logstash)역할은 AWS DMS(Database Migration Service)가 대체되었다.

아래 사용설명서를 읽어보면 자세하게 설명되어있다.

https://docs.aws.amazon.com/ko_kr/dms/latest/userguide/CHAP_Target.Elasticsearch.html

 

AWS Database Migration Service 대상으로 Amazon OpenSearch Service 클러스터 사용 - AWSDatabase Migration Service

ParallelLoadThreads를 기본값(0)에서 변경하지 않으면 AWS DMS는 한 번에 하나의 레코드를 전송합니다. 이 접근 방식은 OpenSearch Service 클러스터에서 고유의 로드를 생성합니다. 이 옵션을 1 이상으로 설

docs.aws.amazon.com

 

🎈OpenSearch 적용

감사하게도 인프라 담당자가 서버에 DMS와 Opensearch를 설치해주셨다.

그래서 설치된 Opensearch 관리사이트에 들어가 부어진(?)데이터를 기준으로 index를 생성하였다.

-> 사실상,버튼만 클릭하면된다.

 

그리고 curl 로 테스트를 해봤다.

아주 잘되었다.

 

그럼 코드를 적용해보자.

코드는 단순하다.

maven Dependency 적용하고

Opensearch 서버 인증하고

검색 API 호출하면 끝이다.

 

🚀적용예제

아래 가이드 사이트에 아주 친절하게 예제가 나와있다.

https://opensearch.org/docs/latest/clients/java-rest-high-level/#sample-code

 

Java high-level REST client

Java high-level REST client

opensearch.org

예제를 설명하자면

1. maven설정-pom.xml에 추가하면된다.

<dependency>
  <groupId>org.opensearch.client</groupId>
  <artifactId>opensearch-rest-high-level-client</artifactId>
  <version>1.2.0</version>
</dependency>

2. OpenSearch 클라이언트 접속계정

credentialsProvider
.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials("아이디", "비밀번호"));

3. 클라이언트 build

//Create a client.
    RestClientBuilder builder = RestClient.builder(new HttpHost("OpenSearch주소", 포트, "https"))
      .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
        @Override
        public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
          return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            }
          });
    RestHighLevelClient client = new RestHighLevelClient(builder);

4. OpenSearch에 날릴 Request 생성, 검색 요청

//3.Request 생성
SearchRequest searchRequest = new SearchRequest();
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchQuery("필드명(검색조건)", "검색어"));
searchRequest.source(sourceBuilder);

//4.검색 요청
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

이렇게 된다.

해당 예제에는 search API는 안나와있고, 인덱스생성API, GET,DELETE 만 나와있어서 찾는데 애먹었다.

위의 4번코드는 엘라스틱 가이드개발문서에서 참고하였다.

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-search.html

 

ELK를 Base부터 구축하지 않고 아주 간단하게 OpenSearch+DMS 스펙으로 엘라스틱서치를 사용할수있게 되었다.

(a.k.a 돈이 최고다💸💸)

-끝-

 

 

👉Tip. SQL과 OpenSearch에서 매핑되는 용어는 다음과 같다. 숙지하는게 가이드를 읽기 덜 헷갈리다.

👉Tip. 윈도우에서 curl사용하는 방법 참고

https://kitae0522.tistory.com/entry/Windows-%EC%9C%88%EB%8F%84%EC%9A%B010%EC%97%90%EC%84%9C-curl-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

[Windows] 윈도우10에서 curl 사용하는 방법

최근 리눅스를 사용하면서 curl 명령어를 많이 사용하게 되었습니다. 그러다가 머신이 윈도우 환경일 때도 curl 명령어를 사용하고 싶어서 제 나름대로 구글링을 통해 자료를 알아보고, 저와 같은

kitae0522.tistory.com

 

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함