Spring

DB / Test

Dear-J 2025. 4. 28. 20:25

데이터 베이스 분리

로컬에서 사용하는 애플리케이션 서버와 테스트에서 같은 데이터베이스를 사용해서 테스트에서 문제 발생

 

테스트 전용 데이터베이스 별도 운영(가장 간단한 방법)

jdbc:h2:tcp://localhost/~/test (local에서 접근하는 서버 전용 데이터베이스)

jdbc:h2:tcp://localhost/~/testcase (test 케이스에서 사용하는 전용 데이터베이스)

 

테스트는 다른 테스트와 격리해야 함

테스트는 반복해서 실행할 수 있어야 함

 

데이터 롤백

테스트가 끝나고 트랜잭션을 강제로 롤백하면 데이터가 깔끔히 제거

 

@Transactional

스프링은 테스트 데이터 초기화를 위해 트랜잭션을 적용하고 롤백하는 방식을 @Transactional 로 깔끔히 해결

 

@Transactional 애노테이션은 로직이 성공적으로 수행되면 커밋하도록 동작

>> 하지만 테스트에서는 테스트를 트랜잭션 안에서 실행하고 테스트가 끝나면 자동 롤백!!

 

임베디드 모드 DB

H2 데이터베이스는 자바로 개발되어 있고 JVM안에서 메모리 모드로 동작하는 기능 제공

>> 애플리케이션을 실행할 때 H2 데이터베이스도 해당 JVM 메모리에 포함해서 함께 실행 가능

>> 애플리케이션이 종료되면 임베디드 모드로 동작하는 H2 데이터베이스도 함꼐 종료, 데이터 모두 사라짐

jdbc:h2:mem:db

>> 데이터소스를 만들 때 임베디드 모드(메모리 모드)로 동작하는 H2 데이터베이스 사용 가능

 

DB_CLOSE_DELAY=-1

>> 데이터베이스 커넥션 연결이 모두 끊어지면 데이터베이스 종료 방지 설정

 

스프링 부트 - 기본 SQL 스크립트를 사용해 데이터베이스 초기화하는 기능

데이터베이스 테이블 새로 만들기

>> SQL 스크립트를 실행해서 애플리케이션 로딩 시점에 데이터베이스 초기화하는 기능

 

schema.sql 에서!!

 

데이터베이스에 대한 별다른 설정이 없으면 임베디드 데이터베이스 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : 김영한, 스프링 DB 2편 - 데이터 접근 활용 기술

'Spring' 카테고리의 다른 글

DB / JPA  (0) 2025.05.01
DB / MyBatis  (0) 2025.04.29
DB / Spring JdbcTemplate  (0) 2025.04.27
DB / 데이터 접근 기술  (0) 2025.04.26
DB / 스프링과 문제 해결 - 예외 처리, 반복  (0) 2025.04.24