웹 애플리케이션을 개발하다보면 로컬 환경에서 테스트하는 것이 매우 중요합니다. 하지만 로컬 환경에서 개발된 애플리케이션을 다른 환경으로 배포할 때 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 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를 사용하는 경우, 다음 단계를 따르면 됩니다.
- IntelliJ IDEA에서 프로젝트를 엽니다.
WebServerTest
클래스를 선택하고, 컨텍스트 메뉴로 이동합니다.- “Run ‘WebServerTest’“를 선택하여 테스트를 실행합니다.
테스트가 실행되면 Docker 컨테이너가 자동으로 실행되고, 해당 컨테이너에서 웹 서버가 구동됩니다. 테스트 결과를 확인하여 웹 서버가 정상적으로 동작하는지 확인할 수 있습니다.
결론
TestContainers를 사용하면 로컬 환경이 아닌 독립적인 환경에서 웹 서버를 테스트할 수 있습니다. 이를 통해 개발된 애플리케이션을 배포할 때 예기치 않은 동작을 사전에 발견할 수 있습니다. 웹 애플리케이션 개발자라면 TestContainers를 사용하여 웹 서버를 테스트해보는 것을 권장합니다.