[java] TestContainers를 사용하여 AWS SQS 테스트하기

AWS SQS (Simple Queue Service)는 대규모 데이터 처리를 위한 분산 메시지 대기열 서비스입니다. 이 서비스를 사용하기 위해서는 테스트를 실행해보고 확인해야 할 필요가 있습니다. 이때 TestContainers를 사용하여 쉽게 AWS SQS를 테스트할 수 있습니다.

TestContainers란?

TestContainers는 Docker를 사용하여 애플리케이션을 테스트하는 데 필요한 외부 컨테이너 환경을 구축하는 도구입니다. 이를 통해 애플리케이션과 외부 리소스 간의 통합 테스트를 수행할 수 있습니다.

AWS SQS 테스트를 위한 TestContainers 설정

먼저 pom.xml 파일에 TestContainers와 AWS SQS 의존성을 추가합니다.

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

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>sqs-local</artifactId>
    <version>1.15.3</version>
    <scope>test</scope>
</dependency>

다음으로 AWS SQS 테스트에 필요한 설정을 작성합니다.

@Container
public static final LocalSqsAsyncClient sqsClient = new LocalSqsAsyncClient();

@BeforeAll
public static void setup() {
    sqsClient.createQueue(CreateQueueRequest.builder().queueName("test-queue").build()).join();
}

@Test
public void sendMessageToQueue() {
    // SQS 큐에 메시지를 보내는 테스트 코드 작성
    // ...
}

@AfterAll
public static void cleanup() {
    sqsClient.deleteQueue(DeleteQueueRequest.builder().queueUrl("test-queue-url").build()).join();
}

이제 sendMessageToQueue 메서드 내에서 SQS 큐에 메시지를 보내는 테스트 코드를 작성할 수 있습니다. TestContainers는 SQS 로컬 컨테이너를 자동으로 시작하고 중지하여 테스트 환경을 구축합니다.

실행 및 확인

테스트를 실행하면 TestContainers가 SQS 로컬 컨테이너를 시작하고 메시지를 큐에 보내는지 확인합니다. 마지막으로 TestContainers가 SQS 로컬 컨테이너를 중지합니다.

테스트 결과를 확인하여 AWS SQS 통합 테스트가 성공적으로 수행됐는지 확인할 수 있습니다.

참고 자료