data.sql 파일로 테스트 데이터 적용하기

spring boot 실행 시 data.sql로 데이터 세팅하기

schema.sql, data.sql 파일을 resource 디렉토리의 루트 경로에 작성하면 ScriptUtils에 의해 sql script를 실행하게된다.

기본 이름은 schema, data이지만 @Sql을 사용하면 다른 이름의 .sql 파일을 지정해줄 수 있다.

 

위 과정이 스프링 부트 2.4 버전까지는 하이버네이트의 ddl-auto 설정대로 테이블을 생성하게 된 후 실행되었다.

하지만 2.5 버전부터 스크립트가 먼저 실행된 후 JPA ddl-auto가 실행된다.

 

그렇기 때문에 ddl-auto가 create로 되어있어 data.sql로 insert한 데이터가 다 지워지게 될 수 있다.

이런 경우 defer-datasource-initialization: true로 설정해주면 ddl을 적용한 후 sql을 실행할 수 있게 된다.

 

또한  spring.sql.init.mode를 통해 .sql를 언제 적용할 지 지정해 줄 수 있다. 일반적으로 사용할 때는 always를 적용해줘야한다.

@Sql(scripts = {"classpath:example.sql"})
  jpa:
    defer-datasource-initialization: true
    hibernate:
      ddl-auto: create
  sql.init.mode: always

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html

 

 

테스트 코드 DB 선택 및 테스트 설정 적용

@ActiveProfile로 테스트 프로필을 적용할 수 있고, @AutoConfigureTestDatabase 설정이 Any인 DataJpaTest의 설정을 None으로 덮어씌워 메모리 테스트 DB가 아닌 실제 DB를 사용하도록 지정할 수 있다.

data.sql을 실행하지 않고, 실제 DB를 사용해서 테스트하기 위해 다음과 같이 선언했다.

@ActiveProfile("test")
@AutoConfigureTestDatabase(replace = Replace.NONE)
@DataJpaTest
public class JpaRepositoryTest {
	
    ...
    
    
}

 

추가적으로 profile을 적용하는 방법은 -D 옵션으로 환경변수 처럼 "spring.profiles.active=test"와 같이 사용할 수 있다.

IDE에서는 VM Option으로 설정가능하고, 인텔리제이 유료 버전에서는 Edit Configure에 들어가면 Active Profiles이 있어서 더 편하게 profile 이름만 입력하면 적용이 된다.

'개발 > Spring' 카테고리의 다른 글

JPA 동작 과정  (0) 2024.01.26
JPA란 무엇인가?  (1) 2024.01.26
JPA Auditing 에러를 해결하며 공부해본 @WebMvcTest  (0) 2024.01.01
[Spring] @DataJpaTest 사용 시 주의사항  (1) 2023.12.31
[Spring] JPA Auditing  (0) 2023.12.30