Guice는 자바의 의존성 주입(Dependency Injection) 프레임워크로, 애플리케이션의 코드를 더 모듈화하고 테스트하기 쉽게 만들어줍니다. Apache Kafka는 대규모 분산 스트리밍 플랫폼으로, 실시간 데이터 흐름을 처리하는 데 사용됩니다.
이 글에서는 Guice와 Apache Kafka를 함께 사용하는 방법에 대해 알아보겠습니다.
Guice 모듈 설정
먼저, Guice에서 Kafka를 사용하기 위해 Kafka 관련 모듈을 설정해야 합니다. 아래는 Guice 모듈 설정의 예입니다.
import com.google.inject.AbstractModule;
import com.google.inject.name.Names;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringSerializer;
import org.apache.kafka.common.serialization.StringDeserializer;
public class KafkaModule extends AbstractModule {
@Override
protected void configure() {
// Kafka Producer 설정
bind(KafkaProducer.class)
.annotatedWith(Names.named("producer"))
.toProvider(KafkaProducerProvider.class);
// Kafka Consumer 설정
bind(KafkaConsumer.class)
.annotatedWith(Names.named("consumer"))
.toProvider(KafkaConsumerProvider.class);
}
}
위의 예제에서는 KafkaProducer
와 KafkaConsumer
를 Guice에 등록하기 위해 bind()
메서드를 사용합니다. @Named
어노테이션을 사용하여 각각의 인스턴스에 이름을 지정합니다.
Kafka Producer Provider
다음으로는 KafkaProducer
인스턴스를 제공하는 KafkaProducerProvider
를 구현해야 합니다. 아래는 간단한 예제입니다.
import com.google.inject.Provider;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.KafkaProducer;
import java.util.Properties;
public class KafkaProducerProvider implements Provider<KafkaProducer<String, String>> {
@Override
public KafkaProducer<String, String> get() {
Properties properties = new Properties();
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new KafkaProducer<>(properties);
}
}
위의 예제에서는 KafkaProducer
를 생성할 때 필요한 설정을 Properties
객체에 지정한 후, 해당 객체를 사용하여 KafkaProducer
인스턴스를 생성합니다.
Kafka Consumer Provider
마지막으로, KafkaConsumer
인스턴스를 제공하는 KafkaConsumerProvider
를 구현해야 합니다. 아래는 간단한 예제입니다.
import com.google.inject.Provider;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.util.Properties;
public class KafkaConsumerProvider implements Provider<KafkaConsumer<String, String>> {
@Override
public KafkaConsumer<String, String> get() {
Properties properties = new Properties();
properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
properties.put(ConsumerConfig.GROUP_ID_CONFIG, "my-group");
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
return new KafkaConsumer<>(properties);
}
}
위의 예제에서는 KafkaConsumer
를 생성할 때 필요한 설정을 Properties
객체에 지정한 후, 해당 객체를 사용하여 KafkaConsumer
인스턴스를 생성합니다.
Guice 모듈 등록
마지막으로, Guice 모듈을 애플리케이션에 등록해야 합니다. 아래는 Guice를 사용하는 예제 애플리케이션의 Main
클래스입니다.
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new KafkaModule());
MyApplication application = injector.getInstance(MyApplication.class);
application.run();
}
}
위의 예제에서는 KafkaModule
을 Guice의 createInjector()
메서드에 전달하여 Guice 모듈을 등록합니다. 그 후, getInstance()
메서드를 사용하여 MyApplication
클래스의 인스턴스를 얻고, 해당 인스턴스의 run()
메서드를 호출합니다.
결론
이 글에서는 Guice와 Apache Kafka를 함께 사용하는 방법에 대해 알아보았습니다. Guice를 사용하면 애플리케이션의 코드를 모듈화하고 테스트하기 쉽게 만들 수 있으며, Apache Kafka를 사용하면 대규모 분산 스트리밍 데이터를 처리할 수 있습니다.
더 자세한 내용은 Guice와 Apache Kafka의 공식 문서를 참조하시기 바랍니다.
- Guice 공식 문서: https://github.com/google/guice
- Apache Kafka 공식 문서: https://kafka.apache.org/documentation/