[java] TestContainers와 손쉬운 로그 확인

TestContainers는 테스트 환경에서 독립적으로 실행되는 컨테이너를 사용하여 테스트 작성을 쉽게 해주는 자바 라이브러리입니다. 이를 통해 예를 들어, 데이터베이스나 메시지 브로커와 같은 외부 리소스를 테스트 환경에서 쉽게 관리하고 효율적으로 테스트를 실행할 수 있습니다.

하지만 때때로 우리는 TestContainers를 사용하여 동작하는 애플리케이션의 로그를 확인해야 할 때가 있습니다. 예를 들어, 데이터베이스에 작성된 로그 메시지를 검증하거나 특정 이벤트가 발생했는지 확인할 필요가 있을 수 있습니다.

이 글에서는 TestContainers를 사용하여 애플리케이션의 로그를 쉽게 확인하는 방법을 알아보겠습니다.

로그 확인 방법

TestContainers는 Docker 컨테이너를 사용하여 애플리케이션을 실행하므로, 실제 로그는 도커 컨테이너 내부에 기록됩니다. 따라서, 로그를 확인하기 위해서는 도커 컨테이너에 로그인해야 합니다.

TestContainers는 다양한 언어로 작성된 애플리케이션을 지원합니다. 여기서는 자바를 예시로 들어 설명하겠습니다.

  1. 먼저, 자바 프로젝트에서 TestContainers를 사용하는 의존성을 추가합니다. (예를 들어, Gradle의 경우 testImplementation 'org.testcontainers:testcontainers:1.16.0'와 같이 추가합니다.)

  2. 테스트 코드에서 TestContainers를 사용하여 도커 컨테이너를 실행합니다. 예를 들어, PostgreSQL을 사용하는 경우 다음과 같은 코드를 사용할 수 있습니다.

     @Test
     void testContainerLogs() {
         try (PostgreSQLContainer<?> container = new PostgreSQLContainer<>("postgres:13")) {
             container.start();
                
             // 컨테이너 실행 후 로그 확인
                
             // 컨테이너 정리
             container.stop();
         }
     }
    
  3. 컨테이너가 실행되고 로그가 기록되는 동안 로그를 확인해야 합니다. TestContainers는 container.getMappedPort() 메서드를 통해 애플리케이션이 실행 중인 컨테이너의 포트를 가져올 수 있습니다. 이 포트를 사용하여 도커 컨테이너에 SSH로 접속할 수 있습니다. (SSH 클라이언트가 설치되어 있어야 합니다.)

  4. SSH를 사용하여 도커 컨테이너에 접속한 후, 로그 파일을 확인할 수 있습니다. 일반적으로 로그 파일은 /var/log 디렉토리에 위치하므로, 해당 디렉토리로 이동한 후 로그 파일을 확인할 수 있습니다. 예를 들어, PostgreSQL의 로그 파일은 /var/log/postgresql 디렉토리에 있습니다.

요약

TestContainers를 사용하여 애플리케이션의 로그를 확인하는 방법을 간략히 알아보았습니다. 도커 컨테이너를 사용하므로 로그는 컨테이너 내부에 기록되며, SSH를 사용하여 컨테이너에 접속하여 로그 파일을 확인할 수 있습니다.

TestContainers는 테스트 작성을 쉽게 해주는 강력한 도구이며, 로그 확인을 통해 테스트 결과를 검증하는 등 다양한 테스트 시나리오에 활용할 수 있습니다.

더 자세한 내용은 TestContainers 공식 문서를 참조하시기 바랍니다.