ํฐ์คํ ๋ฆฌ ๋ทฐ
ElasticSearch ๋์ OpenSearch ์ฌ์ฉ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์์
๋งค์ง. 2021. 12. 17. 18:27๐โโ๏ธ

ํ์ฌ์์ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ 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 |