Guice는 자바의 의존성 주입(Dependency Injection) 프레임워크로서, 개발자가 코드의 결합도를 낮추고 유지보수성을 높이기 위해 사용됩니다. Elasticsearch는 대용량의 데이터를 신속하게 저장하고 검색할 수 있는 오픈소스 검색 엔진입니다. 이번 글에서는 Guice와 Elasticsearch를 함께 사용하는 방법에 대해 알아보겠습니다.
Elasticsearch 클라이언트 생성
먼저 Elasticsearch를 사용하기 위해 Elasticsearch 클라이언트를 생성해야 합니다. Guice 모듈을 사용하여 Elasticsearch 클라이언트를 관리할 수 있습니다. 다음은 Elasticsearch 클라이언트를 생성하는 Guice 모듈의 예시입니다.
import com.google.inject.AbstractModule;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
public class ElasticsearchModule extends AbstractModule {
@Override
protected void configure() {
bind(RestHighLevelClient.class).toInstance(createElasticsearchClient());
}
private RestHighLevelClient createElasticsearchClient() {
RestClientBuilder builder = RestClient.builder(
new HttpHost("localhost", 9200, "http")
);
// 다양한 Elasticsearch 설정을 구성할 수 있습니다.
Settings settings = Settings.builder()
.put("cluster.name", "myElasticsearchCluster")
.build();
builder.setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setDefaultCredentialsProvider(
new BasicCredentialsProvider()
.setCredentials(
new AuthScope("localhost", 9200),
new UsernamePasswordCredentials("username", "password")
)
);
return httpClientBuilder;
});
return new RestHighLevelClient(builder);
}
}
위의 예시 코드에서는 ElasticsearchModule
이라는 Guice 모듈을 정의하고, RestHighLevelClient
의 인스턴스를 Singleton으로 바인딩하고 있습니다. createElasticsearchClient
메소드에서는 Elasticsearch 클러스터와 연결하기 위한 RestClientBuilder
를 생성하고, Elasticsearch 호스트 및 포트를 설정합니다. 또한 인증 정보를 설정하고, 필요한 경우 Elasticsearch 클러스터의 다른 설정도 추가할 수 있습니다.
Elasticsearch 클라이언트 사용
Elasticsearch 클라이언트를 Guice에서 관리하기 때문에, 다른 클래스에서 사용하려면 해당 클래스에 의존성을 주입해야 합니다. Guice는 클래스들 간의 의존성을 자동으로 해결해주므로, Elasticsearch 클라이언트를 사용하는 클래스에서는 다음과 같이 의존성을 주입받을 수 있습니다.
import com.google.inject.Inject;
import org.elasticsearch.client.RestHighLevelClient;
public class MyElasticsearchService {
private RestHighLevelClient client;
@Inject
public MyElasticsearchService(RestHighLevelClient client) {
this.client = client;
}
public void performSearch(String keyword) {
// Elasticsearch 클라이언트를 사용하여 검색 작업 수행
// ...
}
}
위의 예시 코드에서는 MyElasticsearchService
클래스가 Elasticsearch 클라이언트에 의존하도록 선언되어 있습니다. Guice는 @Inject
어노테이션을 통해 의존성을 자동으로 주입하므로, MyElasticsearchService
인스턴스를 생성할 때 Elasticsearch 클라이언트가 자동으로 주입됩니다.
결론
이번 글에서는 Guice와 Elasticsearch를 통합하는 방법에 대해 알아보았습니다. Guice를 사용하여 Elasticsearch 클라이언트를 생성하고, 의존성 주입을 통해 다른 클래스에서 Elasticsearch 클라이언트를 사용할 수 있게되었습니다. 이를 통해 코드의 유연성과 모듈성을 높이고, Elasticsearch와의 통합을 보다 효율적으로 관리할 수 있습니다.
참고자료: