김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술을 듣고 정리한 내용입니다.
테스트 - 데이터베이스 분리
로컬에서 사용하는 어플리케이션 서버와 테스트에서 같은 DB 사용하고 있다면 테스트에서 문제가 발생한다.
테스트 전용 데이터베이스를 별도로 운영하면 된다.
- 테스트는 다른 테스트와 격리해야 한다.
- 테스트는 반복해서 실행할 수 있어야 한다.
테스트 - 데이터 롤백
트랜잭션과 롤백 전략
이때 도움이 되는 것이 바로 트랜잭션이다.
예를 들어서 다음 순서와 같이 각각의 테스트 실행 직전에 트랜잭션을 시작하고,
각각의 테스트 실행 직후에 트랜잭션을 롤백해야 한다.
1. 트랜잭션 시작
2. 테스트 A 실행
3. 트랜잭션 롤백
4. 트랜잭션 시작
5. 테스트 B 실행
6. 트랜잭션 롤백
테스트 - @Transactional
@Transactional 애노테이션을 테스트에서 사용하면 특별하게 동작한다.
@Transactional 이 테스트에 있으면 스프링은 테스트를 트랜잭션 안에서 실행하고,
테스트가 끝나면 트랜잭션을 자동으로 롤백시켜 버린다
1.테스트에 @Transactional 애노테이션이 테스트 메서드나 클래스에 있으면 먼저 트랜잭션을 시작한다.
2. 테스트를 로직을 실행한다. 테스트가 끝날 때 까지 모든 로직은 트랜잭션 안에서 수행된다.
3. 테스트 실행 중에 INSERT SQL을 사용해서 item1 , item2 , item3 를 데이터베이스에 저장한다.
물론 테스트가 리포지토리를 호출하고, 리포지토리는 JdbcTemplate을 사용해서 데이터를 저장한다.
4. 검증을 위해서 SELECT SQL로 데이터를 조회한다. 여기서는 앞서 저장한 item1 , item2 , item3 이 조회되었다.
SELECT SQL도 같은 트랜잭션을 사용하기 때문에 저장한 데이터를 조회할 수 있다. 다른 트랜잭션에서는 해당 데이터를 확인할 수 없다. 여기서 assertThat() 으로 검증이 모두 끝난다.
5. @Transactional 이 테스트에 있으면 테스트가 끝날때 트랜잭션을 강제로 롤백한다.
6. 롤백에 의해 앞서 데이터베이스에 저장한 item1 , item2 , item3 의 데이터가 제거된다.
정리
테스트가 끝난 후 개발자가 직접 데이터를 삭제하지 않아도 되는 편리함을 제공한다.
테스트 실행 중에 데이터를 등록하고 중간에 테스트가 강제로 종료되어도 걱정이 없다.
이 경우 트랜잭션을 커밋하지 않기 때문에, 데이터는 자동으로 롤백된다.
(보통 데이터베이스 커넥션이 끊어지면 자동으로 롤백되어 버린다.)
트랜잭션 범위 안에서 테스트를 진행하기 때문에
동시에 다른 테스트가 진행되어도 서로 영향을 주지 않는 장점이 있다.
@Transactional 덕분에 아주 편리하게 다음 원칙을 지킬수 있게 되었다.
- 테스트는 다른 테스트와 격리해야 한다.
- 테스트는 반복해서 실행할 수 있어야 한다.
강제로 커밋하기 - @Commit
import org.springframework.test.annotation.Commit;
@Commit
@Transactional
@SpringBootTest
class ItemRepositoryTest {}
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard
스프링 DB 2편 - 데이터 접근 활용 기술 - 인프런 | 강의
백엔드 개발에 필요한 DB 데이터 접근 기술을 활용하고, 완성할 수 있습니다. 스프링 DB 접근 기술의 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 백엔드 개발자
www.inflearn.com
'스터디 > 2023_스프링부트' 카테고리의 다른 글
[study] 스프링 DB 2편 - 5. JPA (0) | 2023.08.28 |
---|---|
[study] 스프링 DB 2편 - 4. MyBatis (0) | 2023.08.28 |
[study] 스프링 DB 2편 - 2. JdbcTemplate (0) | 2023.08.28 |
[study] 스프링 DB 2편 - 1. 데이터 접근 기술 (0) | 2023.08.28 |
[study] 스프링 DB 1편 - 6. 스프링과 문제 해결 - 예외 처리, 반복 (0) | 2023.08.21 |