이전 글에서 야심차게 Elasticsearch 환경을 구축하고 테스트까지 하였지만,
라이선스 관련 문제로 Opensearch로 변경하게 되었다.
spring-data-elasticsearch를 사용하기 애매해졌지만, 이미 진행한 부분까지는 작성해보고자 한다.
이후에는 Opensearch 전환 및 적용기를 작성하겠다.
Elasticsearch 연동을 위한 SpringBoot 프로젝트를 하나 생성(과정 생략)하고, application.yml에 의존성을 추가한다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
}
이후 연결을 위한 Configuration 클래스를 생성한다.
@Configuration
public class ElasticConfig extends ElasticsearchConfiguration {
@NonNull
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder()
.connectedTo("localhost:9200")
.build();
}
}
인덱스와 연결할 @Document 타입의 클래스를 하나 생성해준다. JPA의 Entity와 유사하다고 보면 된다.
@Document(indexName = "my_index")
@Getter
public class ElasticModel {
@Id
private String id;
@Field(type = FieldType.Text)
private String name;
}
spring-data-elasticsearch가 제공하는 Repository를 구현한 자체 인터페이스를 만들었다.
이후 간단하게 "name" filed를 기준으로 검색하는 로직을 구현했다.
public interface ElasticRepository extends ElasticsearchRepository<ElasticModel, String> {
List<ElasticModel> findByName(String name);
}
이후 Controller - Service 를 통해 미리 저장해 둔 인덱스를 조회해본다.
@Slf4j
@RequiredArgsConstructor
@Service
public class ElasticService {
private final ElasticRepository elasticRepository;
public void findValue() {
List<ElasticModel> model = elasticRepository.findByName("kadun");
log.info("ID = {}", model.get(0).getId());
log.info("Name = {}", model.get(0).getName());
}
2023-08-20T12:30:25.344+09:00 INFO 18188 --- [nio-8080-exec-2] c.e.esexample.service.ElasticService : ID = 1
2023-08-20T12:30:25.346+09:00 INFO 18188 --- [nio-8080-exec-2] c.e.esexample.service.ElasticService : Name = kadun
실제로 값이 맞는지 직접 browser url을 통해 확인해보자.
GET: http://localhost:9200/my_index/_doc/1
Response
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"name": "kadun"
}
}
Spring을 이용한 가장 간단한 Elasticsearch 조회 방법에 대해 알아보았다.
Elasticsearch 는 훨씬 더 복잡하고 다양한 기능들을 지원하고, 다양한 비즈니스 환경에서의 요구사항에 맞는 조회 방법들을 제시하고 있다.
물론 Spring-data-elasticsearch를 통해서도 그러한 조회 기능들을 충분히 활용할 수 있으며,
몇 가지 방식들이 존재하는데(Criteria, NativeQeury, @Query 등..)
지금은 간단한 사용법 정도만 숙지하고 있고, 이 부분에 대해서는 다음에 이어서 작성하고자 한다.
'개발 > Spring' 카테고리의 다른 글
[Spring] Assertj 테스트 지원 메서드 (1) | 2023.11.26 |
---|---|
[Spring] 비동기 처리에 대한 이해(1) - 쓰레드 (1) | 2023.10.03 |
[Spring] Kotlin + Spring 프로젝트 만들고 테스트 해보기 (0) | 2023.08.05 |
[Spring] @RequestParam / @ModelAttribute / @RequestBody / @Requestpart (0) | 2023.07.22 |
[Spring] @Configuration, @Bean 으로 의존성 주입(DI) 하기 (0) | 2023.07.16 |