kok202
[2019.03.24] 엘라스틱 서치 스프링 연동 방법 정리

2019. 3. 24. 15:14[정리] 데이터베이스/[NoSQL] ElasticSearch

엘라스틱 서치를 스프링과 연동하는 방법

1. 스프링에서 지원하는 Spring-data-elasticsearch 모듈을 다운받아 elasticsearchRepository 인터페이스를 이용하는 법

2. 스프링에서 지원하는 Spring-data-elasticsearch 모듈을 다운받아 elasticsearchTemplate 객체를 이용하는 법

3. ES에서 지원하는 Low level REST Client 모듈을 다운받아 RestClient 클래스를 사용하는 법

4. ES에서 지원하는 High level REST Client 모듈을 다운받아 HighLevelRestClient 클래스를 사용하는 법






사용해보면서 느낀 장단점

1. ElasticsearchRepository

+ 스프링에서 지원해주는 방식으로 JPA와 사용법이 거의 유사하다.

- 엔티티에 @Document(인덱스, 타입) 을 명시해야하기 때문에 인덱스 이름을 바꿔가며 엔티티를 사용할 수 없다.


2. elasticsearchTemplate

+ JPA를 모르는 상태에서도 모듈의 사용법만 얼추 익히면 사용이 가능하다. 

+ application.properties만 조금만 만져주면 elasticsearchTemplate 를 빈으로 생성할 필요도 없이 자동으로 만들어준다.

- 엔티티에 @Document(인덱스, 타입) 을 명시해야하기 때문에 인덱스 이름을 바꿔가며 엔티티를 사용할 수 없다.


3. RestClient

+ ES를 아예 REST API로 통신하는 방법, curl 통신과 똑같다.

+ 통신을 위해 헤더, 바디를 작성할 때 사용자가 Json 으로 직접 작성하는 방식이라서 ES 모듈과의 의존성이 거의 없다.

+ 사실상 curl 통신과 똑같기 때문에 ES의 모든 기능을 사용할 수 있다.

- Request, Response 를 위한 Json 통신용 클래스를 일일히 만들어줘야한다는 불편함이 있다.


4. HighLevelRestClient 

+ ES를 아예 REST API로 통신하는 방법

+ 통신을 위해 헤더, 바디를 작성할 때 리퀘스트 빌더를 이용하여 리퀘스트 데이터를 전달하는 방식이라서 편하다.

+ Request, Response 를 위한 Json 통신용 클래스를 일일히 만들지 않아도 된다.

- ES 모듈에 의존성이 높은 편이다.






1, 2번 방식 사용 참고문서

3, 4번 방식 사용 참고문서

0. 공식문서

1. (2018.07) KWANGSIK LEE's log

2. (2018.03) ES 5 -> ES 6

3. (2017.11) 이케이님