[JPA] @DataJpaTest 사용할 DB 변경

이멀젼씨

·

2021. 9. 16. 14:32

목적

@DataJpaTest에 대해 알아보고 DB설정을 변경하고자 함

목차

  1. @DataJpaTest란?
  2. 테스트 DB 변경하기

1. @DataJpaTest란?

주석 내용을 보면 아래와 같이 나와있다.

Annotation for a JPA test that focuses only on JPA components.

오직 JPA 구성 요소에만 초점을 맞춘 JPA 테스트를 위한 애노테이션이다.

JPA의존성을 추가하여 사용할 수 있는 모든 JPA 구성요소들을 테스트할 수 있다.

Using this annotation will disable full auto-configuration and instead apply only configuration relevant to JPA tests.

다른 설정은 비활성화 시키고, 오직 JPA 테스트와 관련된 설정들만 적용시킨다.

JPA를 사용하여 DB를 테스트하기 위해서는 다른 스프링빈까지 로딩할 필요가 없기 때문에, @DataJpaTest 하나면 충분하다.

2. 테스트 DB 변경하기

They also use an embedded in-memory database (replacing any explicit or usually auto-configured DataSource)

기본 전략으로는 in-memory db를 사용한다.

나는 실제 개발환경의 DB를 사용하고 싶은데 어떻게 해야할까?

@DataJpaTest 애노테이션을 살펴보면

The {@link AutoConfigureTestDatabase @AutoConfigureTestDatabase} annotation can be used to override these settings.

@AutoConfigureTestDatabase를 사용하여 설정을 덮어 씌울 수 있다고 한다.

@DataJpaTest가 갖고 있는 애노테이션들 중에 @AutoConfigureTestDatabase를 확인할 수 있다.

Annotation that can be applied to a test class to configure a test database to use instead of the application-defined or auto-configured DataSource.

어플리케이션에 정의되어있거나 자동으로 설정되는 DataSource대신에 테스트용 DB를 정의할때 사용된다.

이를 통해 우리가 테스트용 DB로 사용하길 원하는 설정을 정의할 수 있다.

@AutoConfigureTestDatabase안에 보면 replace라는 메소드가 보인다.

기본 설정은 Replace.ANY로 되어있다.

각각의 설정을 보면

  • ANY : 자동 구성 또는 수동 정의 여부에 관계없이 DataSource를 교체
  • AUTO_CONFIGURED : 자동 설정된 경우에만 DataSource를 교체
  • NONE : 기본 DataSource를 교체하지 않음

즉, 우리가 application.yml에 설정을 해두어도 Replace.ANY설정에 의해 DataSource를 in-memory설정으로 변경해버리는 것이다.

따라서 이를 막고 실제 DB환경에서 테스트하고자하면 @AutoConfigureTestDatabase를 추가해주고, replace속성으로 Replace.NONE을 전달하면 우리가 사용하고자 하는 DB가 사용이 될 것이다.

'백엔드 > JPA' 카테고리의 다른 글

[JPA] EnumType 올바르게 사용하기  (0) 2021.06.19
[JPA] N+1 문제  (0) 2021.05.01