Database/Elasticsearch
[ES] Elasticsearch8.x.x & SpringBoot 연동 세팅하기
hampangee
2024. 9. 27. 10:29
원래는 elasticsearch config와 kibana config를 먼저 세팅해야하는 것이 맞지만 기능개발이 조금 급해서 세팅부터 하는 것으로 했다...
1. dependency 추가
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation group: 'co.elastic.clients', name: 'elasticsearch-java', version: '8.13.3'
2. application.properties & .env
우리는 세팅을 application.yaml형태로 하기로 해서
아래와 같이 설정했다.
# Elasticsearch Settings
elasticsearch:
url: ${ELASTICSEARCH_URL}
username: ${ELASTICSEARCH_USERNAME}
password: ${ELASTICSEARCH_PASSWORD}
fingerprint: ${ELASTICSEARCH_FINGERPRINT}
이 후 .env파일에 각 값을 입력
# ElasticSearch
ES_URL=localhost:9200
ES_USER_NAME=elastic
ES_USER_PASSWORD=elastic
ES_FINGERPRINT=비밀~~
3. ESConfig class파일
import co.elastic.clients.transport.TransportUtils;
import javax.net.ssl.SSLContext;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration;
@Configuration
public class ESConfig extends ElasticsearchConfiguration {
// Elasticsearch 호스트 URL (예: https://localhost:9200)
@Value("${elasticsearch.url}")
private String host;
// Elasticsearch 기본 사용자 이름
@Value("${elasticsearch.username}")
private String username;
// Elasticsearch 기본 사용자 비밀번호
@Value("${elasticsearch.password}")
private String password;
// Elasticsearch 인증서 지문 (SSL 인증서와 연결된 Fingerprint)
@Value("${elasticsearch.fingerprint}")
private String fingerprint;
@NotNull
@Override
public ClientConfiguration clientConfiguration() {
// 주어진 fingerprint를 이용하여 SSLContext 생성
SSLContext sslContext = TransportUtils.sslContextFromCaFingerprint(fingerprint);
// Elasticsearch 클라이언트 설정
return ClientConfiguration.builder()
.connectedTo(host) // 연결할 Elasticsearch 호스트
.usingSsl(sslContext) // SSL 사용 및 호스트 이름 검증 활성화
.withBasicAuth(username, password) // 기본 인증 설정
.build();
}
}
Elasticsearch 8.x.x부터는 기본적으로 HTTPS프로토콜이 활성화 되어있어 보안을 위해 자체 서명된 SSL 인증서를 이용하여 연결할 수 있게 했다.
Elastic을 처음 실행하면 username을 default로 elastic으로 주고, password, fingerprint, enrollmentToken을 주는데 이때 부는 fingerprint로 elasticsearch 서버에 접근할 수 있다.
개발환경에서는 .usingSsl(sslContext, (hostname, session) -> true)로 하면 ssl검증을 안해서 fingerprint가 필요없어진다.
다음에는 내 프로젝트에 맞게 index구조와 index template을 설정하고 한글 tokenizer인 nori를 설치하고 여러 세팅을 해볼 예정이다!