[SpringBoot] 스프링 부트 테스트 환경 DB 분리하기

Ogu·2024년 1월 9일
0

테스트를 하며 변경된 데이터들은 다음 테스트의 성공을 위해 끝날 때 초기화(트랜잭션/롤백)을 해야합니다.
하지만 auto_increment나 sequence등에 의해 증가된 값이 롤백되지 않는 경우도 있습니다. 이러한 영향이 실제 어플리케이션 서버에도 가면 절대 안되겠죠?

따라서 테스트 시에는 별도의 test DB를 사용하거나, H2와 같은 인메모리(휘발성) DB를 사용해야 합니다.

스프링에서도 서버를 띄울때의 DB 설정과 테스트 코드가 실행될 때의 DB 설정을 따로 할 수 있습니다.

H2 연결

build.gradle

	runtimeOnly 'mysql:mysql-connector-java' // 개발 환경에서 사용하는 DB(MySQL)
	runtimeOnly 'com.h2database:h2' // 테스트 코드 작성시 사용할 DB(H2)

application.yml 설정 파일 작성

테스트 환경 설정을 위한 application.yml 파일 작성의 경로는src/test/resources/application.yml 입니다.

  • main 환경의 application.yml 경로 : src/main/resources/application.yml
  • test 환경의 application.yml 경로 : src/test/resources/application.yml

Test클래스에 @SpringBootTest 어노테이션이 있으면 test패키지 경로에 있는 application.yml 파일이 먼저 적용됩니다.

다음과 같이 test패키지 하위에 application.yml 파일로 인메모리 test H2 DB를 설정해보겠습니다.

spring:
  jpa:
    show-sql: true
    properties:
      hibernate:
        format_sql: true
    defer-datasource-initialization: true
  datasource:
    url: jdbc:h2:mem:testdb
  h2:
    console:
      enabled: true

결과 확인

테스트코드를 실행해 test환경에서 인메모리 db가 잘 띄워졌는지 확인해보겠습니다.

위와 같이 testdb로 잘 띄워졌음을 확인했습니다.

참고

profile
私はゲームと日本が好きなBackend Developer志望生のOguです🐤🐤

0개의 댓글