Elasticsearch Spring Boot에 적용해보기

Elasticsearch에 대해 공부 후에 실제로 적용해보았습니다.

프로젝트 환경

  • java 11
  • spring boot 2.7.14
  • elasticsearch 4.4.14

dependencies

implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

Config 작성

Elasticsearch에 접속하기 위해 username, password가 필요하기에 CredentialsProvider를 생성해서 설정해주었습니다.

@Configuration
public class ElasticConfig extends AbstractElasticsearchConfiguration {


    @Override
    public RestHighLevelClient elasticsearchClient() {
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();

        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials("username", "password"));

        RestClientBuilder builder = RestClient.builder(HttpHost.create("localhost:9200"))
                .setHttpClientConfigCallback(httpClientBuilder -> {
                    try {
                        return httpClientBuilder
                                .setDefaultCredentialsProvider(credentialsProvider)
                                .setSSLContext(SSLContext.getDefault());
                    } catch (NoSuchAlgorithmException e) {
                        throw new RuntimeException(e);
                    }
                });

        return new RestHighLevelClient(builder);
    }
}

Repository 작성

ElasticsearchRepository를 상속받아주면 됩니다.

public interface UserRepository extends ElasticsearchRepository<User, String> {
}

User Document 작성

user라는 인덱스에 저장할 document의 형식을 작성합니다.


@AllArgsConstructor
@NoArgsConstructor
@Data
@Document(indexName = "user")
public class User {

    @Id
    private String id;

    private String name;

    private Integer age;
}

Controller 작성

간단한 테스트를 위한 컨트롤러를 작성해보았습니다.

@RequiredArgsConstructor
@RestController
public class UserController {
    private final UserRepository userRepository;

    @PostMapping("/api/register")
    public String register(){
        User user = new User("1","연준",28);

        userRepository.save(user);
        return "성공";
    }

    @DeleteMapping("/api/register")
    public String delete(){
        User user = new User("1","연준",28);

        userRepository.delete(user);
        return "성공";
    }
}

'DB' 카테고리의 다른 글

정규화  (0) 2024.01.23
Elasticsearch 테스트  (0) 2024.01.10
Elasticsearch 란?  (1) 2024.01.10
[MySQL] SELECT 문  (0) 2024.01.05
[MySQL] 계정 생성 및 권한 부여  (0) 2024.01.05