엘라스틱 서치 구현

PUROMANGA·2025년 5월 23일

기술스택

목록 보기
6/22

개요

	//엘라스틱 의존성 추가
	implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'

✅ application.properties

spring.elastic.url=localhost:9200

🐳 Docker용 Elasticsearch 이미지 주소

image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0

현재(2025년 기준) 최신 안정 버전 중 하나.
버전은 필요 시 공식 DockerHub 참고해서 조정 가능

✅ Docker Compose 예시 (elasticsearch + kibana 포함)

version: '3.8'
services:

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    ports:
      - "9200:9200"

  kibana:
    image: docker.elastic.co/kibana/kibana:8.12.0
    container_name: kibana
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200

Config 구현

@Configuration

public class ElasticConfig extends ElasticsearchConfiguration {

    @Value("${spring.elastic.url}")
    private String elasticUrl;

    @Override
    public ClientConfiguration clientConfiguration() {
        return ClientConfiguration.builder()
                .connectedTo(elasticUrl)
                .build();
    }
}

🔍 이 코드의 목적
Elasticsearch 클라이언트 커넥션을 설정하는 클래스

Spring Boot는 RestHighLevelClient → ElasticsearchClient로 넘어왔고,
지금은 ElasticsearchConfiguration을 상속해서 설정하는 게 표준이야.

✅ 코드 분석

public class ElasticConfig extends ElasticsearchConfiguration {

🔧 역할:

Spring이 Elasticsearch 클라이언트를 자동 구성하지 않도록 하고

우리가 직접 설정한 ClientConfiguration을 사용하게 함

@Value("${spring.elastic.url}")
private String elasticUrl;

🔧 역할:

application.yml 혹은 .properties에 있는 spring.elastic.url 값을 주입받음

예시: localhost:9200, elasticsearch:9200, etc

@Override
public ClientConfiguration clientConfiguration() {
    return ClientConfiguration.builder()
            .connectedTo(elasticUrl)
            .build();
}

🔧 역할:

Spring Data Elasticsearch가 사용할 HTTP 클라이언트 설정

connectedTo(...)는 하나 이상의 노드를 명시할 수 있음

내부적으로 ElasticsearchRestTemplate 혹은 ElasticsearchClient를 이 설정에 따라 생성

✅ 정리 요약표

항목설명
ElasticConfigElasticsearch 연결 설정 클래스
ElasticsearchConfigurationSpring이 제공하는 기본 설정 템플릿
elasticUrl연결할 Elasticsearch 주소
clientConfiguration()연결 구성 리턴 (Host, 포트 등)

엘라스틱서치와 관계형데이터베이스

인덱스 클래스(Document)

package com.example.shopingplusassignment.domain.ProductDocument;


import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.data.elasticsearch.annotations.Setting;

@Getter
@AllArgsConstructor
@NoArgsConstructor
@Setting(settingPath = "/static/elastic-settings.json")
@Document(indexName = "products")

public class ProductDocument {

    @Id
    @Field(name = "id", type = FieldType.Long)
    private Long productId;

    @Field(name = "name", type = FieldType.Text)
    private String productName;

    @Field(name = "description", type = FieldType.Text)
    private String productDescription;

    @Field(name = "price", type = FieldType.Long)
    private Long productPrice;

    @Field(name = "stock", type = FieldType.Long)
    private Long productStock;

    @Field(type = FieldType.Text)
    private String productCategory;

    @Field(name = "brandName", type = FieldType.Text)
    private String brandName;

    @Field(name = "sellerId", type = FieldType.Long)
    private String sellerId;

}

0개의 댓글