재빌드해서 오류 나는지 안나는지 확인해보기 !
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
이렇게 생성하고 실행했더니 알 수 없는 오류가 계속해서 발생했다..
처음에는 Bean 생성 관련 오류가 계속 발생해서, 이름을 잘못 설정했나 ..?
싶어서 검색해보니 index명에 대문자가 들어가면 안된다고 하더라 ..
난 대문자를 넣은 적이 단 한번도 없는데 왜 ..?
@Configuration
@EnableElasticsearchRepositories
public class ElasticSearchConfig extends ElasticsearchConfiguration {
@Value("${spring.data.elasticsearch.cluster-name}")
private String username;
@Value("${spring.data.elasticsearch.cluster-password}")
private String password;
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder()
.connectedTo("localhost:9200")
.usingSsal(disableSslVerification(), allHostsVaild())
.withBasicAuth(username, password)
.build();
} // clientConfiguration
public static SSLContext disableSslVerificaion() {
// SSL 인증서를 체크하지 않도록 설정
try {
TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}};
// trust manager 설치
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
return sc;
} catch (NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
}
return null;
} // disableSslVerificaion
public static HostnameVerifier allHostsValid() {
// HostnameVerifier 생성(호스트 네임 확인 X)
HostnameVerifier allHostsValid = (hostname, session) -> true;
// HostnameVerifier 설치
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
return allHostsValid;
} // allHostsValid
} // ElasticSearchConfig Class
오류 코드를 끝까지 다 확인해보니, Timeout 관련 오류가 있어서
검색해보니까 메소드를 더 추가해주어야 하더라...
@Configuration
@EnableElasticsearchRepositories
public class ElasticSearchConfig extends ElasticsearchConfiguration {
@Value("${spring.data.elasticsearch.cluster-name}")
private String username;
@Value("${spring.data.elasticsearch.cluster-password}")
private String password;
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder()
.connectedTo("localhost:9200")
.usingSsal(disableSslVerification(), allHostsVaild())
.withConnectTimeout(10000)
.withSocketTimeout(30000)
.withBasicAuth(username, password)
.build();
} // clientConfiguration
public static SSLContext disableSslVerificaion() {
// SSL 인증서를 체크하지 않도록 설정
try {
TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}};
// trust manager 설치
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
return sc;
} catch (NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
}
return null;
} // disableSslVerificaion
public static HostnameVerifier allHostsValid() {
// HostnameVerifier 생성(호스트 네임 확인 X)
HostnameVerifier allHostsValid = (hostname, session) -> true;
// HostnameVerifier 설치
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
return allHostsValid;
} // allHostsValid
} // ElasticSearchConfig Class
물건 관련해서 생성해보자 !
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Document(indexName = "product")
public class ProductDocument {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Field(name = "title", type = FieldType.Text)
private String title;
@Field(name = "content", type = FieldType.Text)
private String content;
@Field(name = "price", type = FieldType.Integer)
private Integer price.
@Field(name = "user")
private User user;
@Field(name = "created_at", type = FieldType.Date)
private LocalDateTime createAt;
@Field(name = "updated_at", type = FiledType.Date)
private LocalDateTime updatedAt;
}
일단 여기까지는 문제 없이 잘 실행되었다
해당 Document를 저장하고, 기본적인 CRUD를 완성해봐야겠다 !