[java] TestContainers로 Kafka 컨테이너를 시작하는 방법

소개

TestContainers는 테스트를 위한 컨테이너를 프로그래밍 방식으로 시작하고 관리하는 데 도움을 주는 도구입니다. 이를 사용하면 Kafka와 같은 외부 서비스의 컨테이너를 테스트에 쉽게 통합할 수 있습니다. 이번 게시물에서는 TestContainers를 사용하여 Kafka 컨테이너를 시작하는 방법을 알아보겠습니다.

준비 사항

코드 예제

아래는 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를 비롯한 다양한 서비스 컨테이너를 쉽게 관리할 수 있습니다.

참고 자료