티스토리 뷰
🙋♀️
회사에서 이번 프로젝트를 진행하면서 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사용하는 방법 참고
[Windows] 윈도우10에서 curl 사용하는 방법
최근 리눅스를 사용하면서 curl 명령어를 많이 사용하게 되었습니다. 그러다가 머신이 윈도우 환경일 때도 curl 명령어를 사용하고 싶어서 제 나름대로 구글링을 통해 자료를 알아보고, 저와 같은
kitae0522.tistory.com
'FrameWork > Spring' 카테고리의 다른 글
트랜잭션의 특성과 @Transactional의 noRollbackFor 옵션 (0) | 2022.12.23 |
---|---|
REST API 버전관리 필요성과 그 방법 (0) | 2022.01.22 |
SQL Injection 서블릿 필터를 이용해 처리하기 - 2 (0) | 2021.07.13 |
SQL Injection '처리' 해야될까...? - 1 (0) | 2021.06.24 |
스프링 DL(Dependency Lookup)/DI(Dependency Injection) (0) | 2021.06.22 |
- Total
- Today
- Yesterday
- 선언적트랜잭션 #noRollbackFor #@Transactional
- 백준
- boj
- 런타임에러
- 백준14501
- 개발중캐시삭제
- c#
- html
- script버전
- C++
- 백준퇴사
- 프론트엔드개발자
- html꿀팁
- 퇴사
- 프론트엔드
- 캐시삭제
- C# java 차이점
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |