1. Elastcisearch 설치 및 실행
Elastcisearch 7.17.12 버전 설치
현재 8.x 버전까지 나와있는데 라이브러리, 보안 설정 등 변경된 부분이 많아 7.17..2 버전을 사용했다.
https://www.elastic.co/kr/downloads/elasticsearch
Download Elasticsearch
Download Elasticsearch or the complete Elastic Stack (formerly ELK stack) for free and start searching and analyzing in minutes with Elastic.
www.elastic.co
Elastisearch 실행
path\bin\elasticsearch.bat

로컬환경에서 실행했다면 http://localhost:9200로 접속한 뒤 아래 화면이 뜨면 정상적으로 실행된 것이다.

2. Spring Boot Elasticsearch
a. 의존성 추가
implementation 'org.springframework.data:spring-data-elasticsearch'
b. application.yml
spring:
elasticsearch:
uris: "<http://localhost:9200>"
socket-timeout: "10s"
- ES 관련 설정부분이고, ES 서버 URL과 포트를 입력하여 연결정보를 설정한다.
- socket-timeout: ES와 통신 중 타임아웃 시간 설정 정보로 10s는 10초를 나타내며 통신 시 응답을 기다리는 최대 시간이 10초로 통신 중 10초 이상 응답이 없으면 타임아웃이 발생한다.
c. Product
@Document(indexName = "products")
@Getter
public class Product {
@Id
private String id;
private String name;
private String description;
private double price;
}
- <@Document(indexName = "products"): ES에서 인덱스와 매핑되는 클래스임을 정의
- @Id: RDBMS에서 고유식별자인 PK와 같은 의미로 Documet에서의 고유 식별자
d. ProductRepostiory
public interface ProductRepository extends ElasticsearchRepository<Product, String>{
// match 검색어는 or 조건으로 검색(name이 하나라도 포함되면 검색결과로 가져온다.)
// oeerator를 and 조건으로 변경할 수 있다
@Query("{\\"match\\": {\\"name\\": \\"?0\\"}}")
List<Product> findByName(String name);
}
- Elasticsearch와 상호작용하기 위한 ProductRepository로 Spring Data Elasticsearch에서 제공하는 ElasticsearchRepository extends한다.
- @Query를 사용하면 쿼리를 직접 작성해서 사용할 수 있다.
e. ProductController
@RestController
@RequiredArgsConstructor
public class ProductController {
private final ProductService productService;
@PostMapping("/create")
public void create(@RequestBody Product product) {
productService.create(product);
}
@GetMapping("/read")
public Optional<Product> read(String id) {
System.out.println(id);
return productService.read(id);
}
@GetMapping("/read_all")
public Iterable<Product> readAll() {
return productService.readAll();
}
@DeleteMapping("/delete")
public void delete(String id) {
productService.delete(id);
}
@PutMapping("/update")
public void update(@RequestBody Product product) {
productService.update(product);
}
@GetMapping("/read_name")
public List<Product> readName(String name) {
return productService.readName(name);
}
}
엔드포인트로 간단하게 테스트하기 위한 용도의 controller이다.
f. ProductService
@Service
@RequiredArgsConstructor
public class ProductService {
private final ProductRepository productRepository;
public void create(Product product) {
productRepository.save(product);
}
public Optional<Product> read(String id) {
return productRepository.findById(id);
}
public Iterable<Product> readAll() {
return productRepository.findAll();
}
public void delete(String id) {
productRepository.deleteById(id);
}
public void update(Product product) {
create(product);
}
public List<Product> readName(String name) {
return productRepository.findByName(name);
}
}
ProductRepository에서 데이터를 불러와 controller로 전달해주기 위한 보통의 Service부분이다.
'Programming > Spring' 카테고리의 다른 글
[Spring] @Autowired에서 조회 빈이 2개 이상인 경우 (1) | 2024.01.10 |
---|---|
[Spring] 순환참조 문제 해결 (1) | 2023.10.04 |
[Spring Boot] Spring Boot + Kafka 예제 (0) | 2023.09.26 |
[Spring Boot] Spring Data JPA + PostgreSQL 예제 (0) | 2023.09.25 |
[Spring Boot] Spring Boot + Redis CRUD 예제 (0) | 2023.09.24 |
1. Elastcisearch 설치 및 실행
Elastcisearch 7.17.12 버전 설치
현재 8.x 버전까지 나와있는데 라이브러리, 보안 설정 등 변경된 부분이 많아 7.17..2 버전을 사용했다.
https://www.elastic.co/kr/downloads/elasticsearch
Download Elasticsearch
Download Elasticsearch or the complete Elastic Stack (formerly ELK stack) for free and start searching and analyzing in minutes with Elastic.
www.elastic.co
Elastisearch 실행
path\bin\elasticsearch.bat

로컬환경에서 실행했다면 http://localhost:9200로 접속한 뒤 아래 화면이 뜨면 정상적으로 실행된 것이다.

2. Spring Boot Elasticsearch
a. 의존성 추가
implementation 'org.springframework.data:spring-data-elasticsearch'
b. application.yml
spring:
elasticsearch:
uris: "<http://localhost:9200>"
socket-timeout: "10s"
- ES 관련 설정부분이고, ES 서버 URL과 포트를 입력하여 연결정보를 설정한다.
- socket-timeout: ES와 통신 중 타임아웃 시간 설정 정보로 10s는 10초를 나타내며 통신 시 응답을 기다리는 최대 시간이 10초로 통신 중 10초 이상 응답이 없으면 타임아웃이 발생한다.
c. Product
@Document(indexName = "products")
@Getter
public class Product {
@Id
private String id;
private String name;
private String description;
private double price;
}
- <@Document(indexName = "products"): ES에서 인덱스와 매핑되는 클래스임을 정의
- @Id: RDBMS에서 고유식별자인 PK와 같은 의미로 Documet에서의 고유 식별자
d. ProductRepostiory
public interface ProductRepository extends ElasticsearchRepository<Product, String>{
// match 검색어는 or 조건으로 검색(name이 하나라도 포함되면 검색결과로 가져온다.)
// oeerator를 and 조건으로 변경할 수 있다
@Query("{\\"match\\": {\\"name\\": \\"?0\\"}}")
List<Product> findByName(String name);
}
- Elasticsearch와 상호작용하기 위한 ProductRepository로 Spring Data Elasticsearch에서 제공하는 ElasticsearchRepository extends한다.
- @Query를 사용하면 쿼리를 직접 작성해서 사용할 수 있다.
e. ProductController
@RestController
@RequiredArgsConstructor
public class ProductController {
private final ProductService productService;
@PostMapping("/create")
public void create(@RequestBody Product product) {
productService.create(product);
}
@GetMapping("/read")
public Optional<Product> read(String id) {
System.out.println(id);
return productService.read(id);
}
@GetMapping("/read_all")
public Iterable<Product> readAll() {
return productService.readAll();
}
@DeleteMapping("/delete")
public void delete(String id) {
productService.delete(id);
}
@PutMapping("/update")
public void update(@RequestBody Product product) {
productService.update(product);
}
@GetMapping("/read_name")
public List<Product> readName(String name) {
return productService.readName(name);
}
}
엔드포인트로 간단하게 테스트하기 위한 용도의 controller이다.
f. ProductService
@Service
@RequiredArgsConstructor
public class ProductService {
private final ProductRepository productRepository;
public void create(Product product) {
productRepository.save(product);
}
public Optional<Product> read(String id) {
return productRepository.findById(id);
}
public Iterable<Product> readAll() {
return productRepository.findAll();
}
public void delete(String id) {
productRepository.deleteById(id);
}
public void update(Product product) {
create(product);
}
public List<Product> readName(String name) {
return productRepository.findByName(name);
}
}
ProductRepository에서 데이터를 불러와 controller로 전달해주기 위한 보통의 Service부분이다.
'Programming > Spring' 카테고리의 다른 글
[Spring] @Autowired에서 조회 빈이 2개 이상인 경우 (1) | 2024.01.10 |
---|---|
[Spring] 순환참조 문제 해결 (1) | 2023.10.04 |
[Spring Boot] Spring Boot + Kafka 예제 (0) | 2023.09.26 |
[Spring Boot] Spring Data JPA + PostgreSQL 예제 (0) | 2023.09.25 |
[Spring Boot] Spring Boot + Redis CRUD 예제 (0) | 2023.09.24 |