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

TestContainers는 테스트 환경에서 도커 컨테이너를 사용하여 외부 의존성을 가진 서비스를 통합 테스트할 수 있는 도구입니다. 이번 글에서는 TestContainers를 사용하여 AWS EC2 인스턴스를 테스트하는 방법에 대해 알아보겠습니다.

1. TestContainers 설치하기

Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다.

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

Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가합니다.

testImplementation 'org.testcontainers:testcontainers:1.15.0'

2. AWS EC2 테스트 환경 설정하기

AWS EC2 인스턴스를 테스트하기 위해선, AWS SDK를 사용하여 인스턴스를 시작하고 종료하는 로직을 작성해야합니다. TestContainers는 AWS SDK를 사용하여 EC2 인스턴스를 관리합니다.

@Testcontainers
class EC2IntegrationTest {

    @Container
    private static final EC2Container EC2_CONTAINER = new EC2Container()
            .withImageId("ami-12345678") // 시작할 EC2 인스턴스의 AMI ID를 입력하세요.
            .withInstanceType(InstanceType.T2_MEDIUM) // 인스턴스 유형을 선택하세요.
            .withSecurityGroups("my-security-group") // 보안 그룹 설정
            .withKeyName("my-keypair") // 키 페어 설정
            .withUserData("echo 'Hello, TestContainers!'") // User Data 설정
            .withPortBindings(8080) // 포트 바인딩 설정
            .withEnv("ENV", "test"); // 환경 변수 설정

    @Test
    void testEC2Instance() {
        // EC2 인스턴스의 테스트 로직 작성
        // 예: HTTP 요청을 보내고 응답 확인
    }
}

위의 코드에서 EC2Container는 TestContainers가 제공하는 EC2 테스트용 컨테이너입니다. 필요한 설정을 추가하여 EC2 인스턴스를 시작할 수 있습니다. 테스트 메서드에서는 EC2 인스턴스에 대한 테스트 로직을 작성할 수 있습니다.

3. 테스트 실행하기

테스트를 실행하기 전에, AWS 인증 정보를 환경 변수로 설정해야합니다. AWS 관리 콘솔에서 액세스 키와 시크릿 키를 생성한 후, 다음과 같이 환경 변수를 설정합니다.

export AWS_ACCESS_KEY_ID=<your-access-key-id>
export AWS_SECRET_ACCESS_KEY=<your-secret-access-key>

테스트 클래스에 @Testcontainers 어노테이션을 추가하여 TestContainers의 컨테이너가 실행되도록 합니다. 그 후, 테스트를 실행하면 TestContainers가 자동으로 EC2 인스턴스를 시작하고 테스트를 진행합니다.

$ mvn clean test

결론

TestContainers를 사용하여 AWS EC2 인스턴스를 테스트할 수 있습니다. 이를 통해 외부 의존성을 가진 서비스를 포함한 통합테스트를 간단하게 구성할 수 있습니다.

더 자세한 내용은 TestContainers 공식 문서를 참고하세요.