[java] TestContainers로 메시지 큐 테스트하기

이번 블로그 포스트에서는 TestContainers를 사용하여 메시지 큐를 테스트하는 방법에 대해 알아보겠습니다. TestContainers는 도커 컨테이너를 사용하여 테스트 환경을 구성하는 도구로서, 메시지 큐와 같은 외부 의존성을 테스트할 때 매우 유용합니다.

1. TestContainers와 AMQP 메시지 큐

AMQP(Advanced Message Queuing Protocol)는 대규모 분산 시스템에서 메시지 기반 통신을 위한 경량화된 프로토콜입니다. RabbitMQ와 같은 AMQP 메시지 큐는 이 프로토콜을 기반으로 구현되어 있습니다. 이 예시에서는 RabbitMQ를 사용하여 테스트를 진행하겠습니다.

2. 프로젝트 설정

먼저, Maven 또는 Gradle 프로젝트에 TestContainers를 의존성으로 추가해줍니다. 아래는 Maven을 사용하는 경우의 의존성 설정 예시입니다.

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>rabbitmq</artifactId>
    <version>1.16.0</version>
    <scope>test</scope>
</dependency>

3. Testcontainers 사용하기

TestContainers를 사용하여 AMQP 메시지 큐를 테스트하는 방법은 아주 간단합니다. 다음은 테스트 클래스의 예시 코드입니다.

import org.junit.jupiter.api.Test;
import org.testcontainers.containers.RabbitMQContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;

import static org.junit.jupiter.api.Assertions.assertEquals;

@Testcontainers
public class MessageQueueTest {

    @Container
    private final RabbitMQContainer rabbitMQContainer = new RabbitMQContainer();

    @Test
    public void testSendAndReceiveMessage() {
        // RabbitMQ 컨테이너 시작
        rabbitMQContainer.start();

        // RabbitMQ에 메시지 전송

        // RabbitMQ에서 메시지 수신

        // 수신한 메시지 검증

        // RabbitMQ 컨테이너 종료
        rabbitMQContainer.stop();
    }
}

위 코드에서 RabbitMQContainer는 RabbitMQ를 실행하는 TestContainers 컨테이너입니다. @Container 어노테이션을 사용하여 컨테이너를 필드로 선언하고, @Test 메서드에서 해당 컨테이너를 시작하고 종료할 수 있습니다.

테스트 메서드에서는 RabbitMQ에 메시지를 전송하고 수신한 메시지를 검증하는 로직을 구현하면 됩니다.

4. 테스트 실행하기

위 코드를 포함하는 테스트 클래스를 실행하면 TestContainers가 RabbitMQ 컨테이너를 시작하고 테스트를 수행합니다. 테스트가 끝나면 컨테이너를 종료하고 정리합니다.

5. 마무리

이번 블로그 포스트에서는 TestContainers를 사용하여 메시지 큐를 테스트하는 방법에 대해 알아보았습니다. TestContainers는 도커 컨테이너를 사용하여 외부 의존성을 테스트하고 테스트 환경을 구성하는 데 매우 유용한 도구입니다. 메시지 큐 외에도 다양한 외부 시스템과의 통합 테스트에 활용할 수 있습니다.

더 자세한 내용은 TestContainers 공식 문서를 참고하시기 바랍니다.