@Transactional 이 붙은 db에 객체를 저장하는 테스트 함수를 동작시키면 해당 함수의 동작 종료후에 db에 저장된 객체를 다시 없애주는거야?
예, 맞습니다. @Transactional이 붙은 테스트 함수가 실행되면, 해당 함수가 끝나는 시점에서 트랜잭션은 종료됩니다. 트랜잭션은 메서드의 실행 범위 내에서 자동으로 시작되고, 메서드가 정상적으로 종료되면 해당 트랜잭션은 커밋(Commit)되어 변경 사항이 영구적으로 데이터베이스에 적용됩니다.
하지만 테스트 함수가 실행 중에 발생한 변경 사항은 트랜잭션이 커밋되지 않은 상태에서 데이터베이스에 영향을 미치게 됩니다. 이로 인해 테스트 함수에서 추가된 데이터나 변경된 데이터는 실제로 데이터베이스에 반영되지만, 트랜잭션이 커밋되지 않은 시점에서는 다른 트랜잭션에서 해당 데이터를 볼 수 없습니다.
따라서 테스트 함수가 끝나면 @Transactional에 의해 자동으로 롤백(Rollback)이 수행되어 테스트 함수에서 수행한 변경 사항이 데이터베이스에 영구적으로 반영되지 않게 됩니다. 이로 인해 테스트 함수의 실행 결과는 데이터베이스 상태에 영향을 주지 않으며, 다른 테스트에 영향을 미치지 않도록 보장됩니다.
이렇게 테스트 함수가 실행된 후에 @Transactional에 의해 롤백되면 테스트 환경에서는 데이터베이스의 일관성을 유지하면서 반복적인 테스트를 수행할 수 있습니다. 이를 통해 테스트 간의 간섭 없이 독립적인 테스트가 가능해지며, 테스트를 반복해서 실행해도 항상 일관된 초기 상태에서 테스트를 시작할 수 있습니다.