데이터 베이스 분리
로컬에서 사용하는 애플리케이션 서버와 테스트에서 같은 데이터베이스를 사용해서 테스트에서 문제 발생
테스트 전용 데이터베이스 별도 운영(가장 간단한 방법)
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 |