728x90
테스트 코드를 실행할때 실제 DB에 접근하는 경우가 있을 것이다.
이런 경우 메인 어플리케이션이 로드될때마다 테이블을 드롭하고 생성하는 경우가 아니면
- 이미 insert된 primary key를 다시 테스트해서 충돌발생
- Auto increment key라면 @Trancsaction이나 delete로 지우더라도 key값은 증가
따라서 메인의 데이터베이스와 테스트의 데이터베이스 분리가 필요하다
application.yml 또는 application.properties
보통 application 파일에 데이터베이스 설정을 작성해주면 스프링부트가 자동으로 DataSrouce 빈으로 데이터베이스 정보를 등록해주어 사용할 수 있게 된다
그렇다면 테스트 데이터베이스는 어떻게 분리할까?
테스트는 인메모리로 간편하게 h2 데이터베이스를 사용한다고 해보자
/test/resources/application.yml
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb;MODE=MySQL;
username: test
password:
위와 같이 설정하면 테스크 코드가 실행될때 설정한 데이터베이스가 메모리에 올라가고, 테스트 종료시 데이터베이스가 메모리에서 내려가게 된다
다만 주의할점은 테스트 데이터베이스는 메인 데이터베이스처럼 스키마가 생성되지 않는다.
따라서 test/resources 에 schema.sql파일을 작성해서 넣어줘야한다
그렇게 하면 스프링 부트가 실행되면서 자동으로 schema.sql 파일이 스캔되어 데이터베이스가 생성된다
'개발 이론 > Spring' 카테고리의 다른 글
[Spring] flyway - BaseJavaMigration? (0) | 2023.11.13 |
---|---|
[Spring] flyway?? DB 마이그레이션?? (1) | 2023.11.13 |
[Spring] @ModelAttribute와 @RequestBody에 대해 (1) | 2023.11.09 |
[Spring] Spring Boot와 데이터베이스 (0) | 2023.11.07 |
[Spring]org.passy 사용하여 @Password validation (0) | 2023.11.07 |