스프링 부트 도커를 이용하여 테스트하는 방법

greenTea·2023년 6월 20일
0

테스트 환경 도커

🫡스프링 부트로 테스트 할 경우 다양한 방법으로 db와 서비스등을 격리 시킬 수 있습니다.
그 중 스프링 부트로 테스트시 도커로 해당 서비스를 띄워 사용하는 방법에 대해서 알아보겠습니다.

gradle

먼저 아래 코드를 gradle에 추가합니다.

    testImplementation "org.junit.jupiter:junit-jupiter:5.8.1"
    testImplementation "org.testcontainers:testcontainers:1.17.6"
    testImplementation "org.testcontainers:junit-jupiter:1.17.6"

코드

@Testcontainers  <- 자신이 사용할 테스트 코드에 추가
@ActiveProfiles("test")
@Transactional
@SpringBootTest

...

    @Container
    private static final GenericContainer<?> redis = new GenericContainer<>("redis").withExposedPorts(6379);
    
    @DynamicPropertySource
    static void redisProperties(DynamicPropertyRegistry registry) {
        registry.add("spring.data.redis.host", redis::getHost);
        registry.add("spring.data.redis.port", redis::getFirstMappedPort);
     }
  1. @Testcontainers
    Testcontainers는 테스트용 도커 컨테이너를 제공하는 라이브러리입니다. @Testcontainers 어노테이션을 테스트 클래스에 적용하면 Testcontainers가 사용됩니다.

  2. @Container
    Testcontainers에서 컨테이너를 생성하는 어노테이션입니다. 해당 어노테이션을 사용하여 도커 컨테이너를 생성하고 관리할 수 있습니다.

  3. GenericContainer<>("redis")
    Redis를 사용하기 위한 GenericContainer를 생성합니다. Redis 이미지를 사용하여 컨테이너를 생성합니다.

  4. withExposedPorts(6379)
    컨테이너의 6379 포트를 외부에 노출합니다. 이렇게 하면 테스트 코드에서 컨테이너에 접근할 수 있습니다.

  5. @DynamicPropertySource 동적인 프로퍼티를 등록할 수 있는 어노테이션입니다. 테스트 실행 중에 동적으로 프로퍼티 값을 설정할 수 있습니다. (위에 설정을 통해 기존의 설정한 환경변수 값을 동적으로 바꿔치기 해줄 수 있습니다.)

  6. registry.add("spring.data.redis.host", redis::getHost) spring.data.redis.host 프로퍼티를 컨테이너의 호스트로 설정합니다. 이렇게 하면 Redis 호스트에 연결할 수 있습니다.
    registry.add("spring.data.redis.port", redis::getFirstMappedPort) spring.data.redis.port 프로퍼티를 컨테이너의 첫 번째 매핑된 포트로 설정합니다. 이렇게 하면 Redis에 접근하기 위한 포트를 설정할 수 있습니다.

😓이를 통해 격리된 환경에서 테스트를 진행할 수 있으며 해당 도커 컨테이너는 테스트가 종료되면 자동으로 사라지게 됩니다. (다만 도커로 컨테이너를 띄우는 과정이 포함되기 때문에 테스트가 느려집니다.)

profile
greenTea입니다.

0개의 댓글