[java] TestContainers를 사용하여 웹 서버 테스트하기

웹 애플리케이션을 개발하다보면 로컬 환경에서 테스트하는 것이 매우 중요합니다. 하지만 로컬 환경에서 개발된 애플리케이션을 다른 환경으로 배포할 때 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 TestContainers를 사용하여 웹 서버를 테스트할 수 있습니다.

TestContainers란?

TestContainers는 Docker를 사용하여 테스트 환경을 구축하는 자바 라이브러리입니다. TestContainers를 사용하면 테스트를 위해 독립적인 컨테이너화된 환경을 생성할 수 있습니다. 이를 통해 로컬 환경과 동일한 환경에서 테스트할 수 있으며, 다른 환경에서의 예기치 않은 동작을 사전에 발견할 수 있습니다.

웹 서버 테스트하기

아래의 예제 코드를 통해 TestContainers를 사용하여 웹 서버를 테스트하는 방법을 살펴보겠습니다. 이 예제에서는 Spring Boot 프레임워크를 사용하여 웹 애플리케이션을 개발하고, TestContainers를 사용하여 이를 테스트합니다.

import org.junit.ClassRule;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpStatus;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Testcontainers;

@Testcontainers
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class WebServerTest {

    @ClassRule
    public static GenericContainer container = new GenericContainer("nginx:latest")
            .withExposedPorts(80);

    @Test
    public void testWebServer() {
        String baseUrl = "http://" + container.getContainerIpAddress() + ":" + container.getMappedPort(80);
        TestRestTemplate restTemplate = new TestRestTemplate();
        HttpStatus statusCode = restTemplate.getForEntity(baseUrl, String.class).getStatusCode();
        assertEquals(HttpStatus.OK, statusCode);
    }
}

이 예제 코드에서는 GenericContainer를 사용하여 NGINX 도커 이미지를 실행합니다. withExposedPorts 메서드를 사용하여 호스트에서 컨테이너 내부의 포트 80을 노출시킵니다.

testWebServer 메서드에서는 컨테이너가 실행 중인 IP 주소와 노출된 포트를 사용하여 웹 서버에 HTTP 요청을 보냅니다. 그리고 응답 상태 코드가 200 OK인지 확인합니다.

실행하기

이제 위의 예제 코드를 실행해보겠습니다. IntelliJ IDEA를 사용하는 경우, 다음 단계를 따르면 됩니다.

  1. IntelliJ IDEA에서 프로젝트를 엽니다.
  2. WebServerTest 클래스를 선택하고, 컨텍스트 메뉴로 이동합니다.
  3. “Run ‘WebServerTest’“를 선택하여 테스트를 실행합니다.

테스트가 실행되면 Docker 컨테이너가 자동으로 실행되고, 해당 컨테이너에서 웹 서버가 구동됩니다. 테스트 결과를 확인하여 웹 서버가 정상적으로 동작하는지 확인할 수 있습니다.

결론

TestContainers를 사용하면 로컬 환경이 아닌 독립적인 환경에서 웹 서버를 테스트할 수 있습니다. 이를 통해 개발된 애플리케이션을 배포할 때 예기치 않은 동작을 사전에 발견할 수 있습니다. 웹 애플리케이션 개발자라면 TestContainers를 사용하여 웹 서버를 테스트해보는 것을 권장합니다.

참고 자료