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

컨테이너 기반 애플리케이션 테스트를 위해 TestContainers를 사용하는 경우, Nginx 컨테이너를 시작하고 테스트하는 방법에 대해 알아보겠습니다.

TestContainers란?

TestContainers는 개발자가 로컬 환경에서 통합 테스트를 수행할 때 필요한 외부 시스템의 컨테이너를 관리하는 자바 라이브러리입니다. TestContainers를 사용하면 테스트 시에 외부 시스템을 재현할 수 있으며, 간단한 코드로 컨테이너의 라이프사이클을 제어할 수 있습니다.

Nginx 컨테이너 시작하기

Nginx 컨테이너를 TestContainers로 시작하기 위해서는 먼저 TestContainers 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml에 다음의 의존성을 추가하세요:

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

그리고 다음과 같은 코드를 작성하여 Nginx 컨테이너를 시작할 수 있습니다:

import org.testcontainers.containers.GenericContainer;
import org.testcontainers.utility.DockerImageName;

public class NginxContainerTest {

    private static final int NGINX_PORT = 80;

    @Rule
    public GenericContainer<?> nginxContainer = new GenericContainer<>(DockerImageName.parse("nginx:latest"))
            .withExposedPorts(NGINX_PORT);

    @Test
    public void testNginxContainer() {
        String nginxHost = nginxContainer.getHost();
        int nginxMappedPort = nginxContainer.getMappedPort(NGINX_PORT);

        // Nginx 컨테이너에 대한 테스트 코드 작성
        // 예시: HTTP 요청을 보내고 응답을 확인하는 코드

        // ...

    }
}

앞의 예시 코드에서는 GenericContainer 클래스를 사용하여 Nginx 컨테이너를 시작합니다. DockerImageName.parse("nginx:latest")를 통해 Nginx 이미지를 지정하고, withExposedPorts(NGINX_PORT)를 통해 컨테이너의 포트를 노출합니다.

@Rule 어노테이션을 사용하여 nginxContainer 필드를 테스트 메서드 전에 시작하고, 테스트 완료 후에 종료할 수 있습니다.

nginxContainer.getHost()를 통해 컨테이너의 호스트 IP 주소를 가져올 수 있으며, nginxContainer.getMappedPort(NGINX_PORT)를 통해 매핑된 포트를 가져올 수 있습니다.

테스트 코드에서는 이러한 정보를 사용하여 Nginx 컨테이너에 대한 테스트를 수행할 수 있습니다.

마무리

TestContainers를 사용하여 Nginx 컨테이너를 테스트하는 방법을 알아보았습니다. TestContainers는 애플리케이션의 외부 의존성을 쉽게 관리할 수 있도록 도와주는 강력한 도구입니다. 이를 활용하여 통합 테스트를 더욱 쉽고 효과적으로 수행할 수 있습니다.

참고 자료