[java] TestContainers로 Kafka 컨테이너를 시작하는 방법
소개
TestContainers는 테스트를 위한 컨테이너를 프로그래밍 방식으로 시작하고 관리하는 데 도움을 주는 도구입니다. 이를 사용하면 Kafka와 같은 외부 서비스의 컨테이너를 테스트에 쉽게 통합할 수 있습니다. 이번 게시물에서는 TestContainers를 사용하여 Kafka 컨테이너를 시작하는 방법을 알아보겠습니다.
준비 사항
- JDK 8 이상
- Maven 또는 Gradle 프로젝트
코드 예제
아래는 Maven 프로젝트에서 TestContainers와 Kafka 클라이언트를 사용하여 Kafka 컨테이너를 시작하는 예제입니다.
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.KafkaContainer;
import org.testcontainers.utility.DockerImageName;
import java.util.Properties;
public class KafkaContainerTest {
private static final String TOPIC_NAME = "test-topic";
private static KafkaContainer kafkaContainer;
private static KafkaProducer<String, String> kafkaProducer;
@BeforeAll
static void setUp() {
kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.4.3"));
kafkaContainer.start();
Properties producerProps = new Properties();
producerProps.put("bootstrap.servers", kafkaContainer.getBootstrapServers());
producerProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
kafkaProducer = new KafkaProducer<>(producerProps);
}
@AfterAll
static void tearDown() {
kafkaProducer.close();
kafkaContainer.stop();
}
@Test
void sendMessageToKafka() {
String key = "test-key";
String value = "test-value";
kafkaProducer.send(new ProducerRecord<>(TOPIC_NAME, key, value)).get();
}
}
위의 예제에서는 @BeforeAll
어노테이션을 사용하여 Kafka 컨테이너를 시작하고, @AfterAll
어노테이션을 사용하여 컨테이너를 정리합니다. KafkaContainer
클래스는 TestContainers에서 제공하는 Kafka 컨테이너를 생성하고 관리하는 데 사용됩니다. 또한, Kafka 클라이언트를 사용하여 메시지를 Kafka에 전송하는 예제도 포함되어 있습니다.
실행 및 결과
위의 예제를 실행하면 TestContainers가 Kafka 컨테이너를 시작하고 메시지를 Kafka에 전송합니다. 만약 Kafka 컨테이너가 성공적으로 시작되면, 테스트는 통과하게 됩니다.
결론
이번 글에서는 TestContainers를 사용하여 Kafka 컨테이너를 시작하는 방법을 알아보았습니다. TestContainers는 외부 서비스를 테스트에 통합하기 위한 간편하고 효율적인 도구이며, Kafka를 비롯한 다양한 서비스 컨테이너를 쉽게 관리할 수 있습니다.