@Transactional과 @Rollback은 주로 테스트 환경에서 사용되는 어노테이션으로, 데이터베이스 연동 테스트에서 트랜잭션 관리와 롤백을 다루는 데에 사용됩니다.
@Transactional 어노테이션:
@Transactional 어노테이션은 테스트 메소드 내에서 실행되는 모든 작업을 하나의 트랜잭션으로 묶어줍니다.@Rollback 어노테이션:
@Rollback 어노테이션은 @Transactional과 함께 사용될 때, 해당 테스트 메소드의 실행 후에 트랜잭션을 롤백하도록 지정합니다.@Rollback 어노테이션을 사용하지 않으면 테스트 메소드의 작업이 실제로 데이터베이스에 적용될 수 있습니다.@Rollback(true)로 설정하면 테스트 메소드의 작업이 트랜잭션을 통해 실행되며, 테스트 종료 후 데이터베이스는 롤백됩니다.@Rollback(false)로 설정하면 테스트 메소드의 작업이 트랜잭션을 통해 실행되고, 테스트 종료 후 데이터베이스는 롤백되지 않습니다.@Transactional과 @Rollback 어노테이션은 같이 사용할 수도 있지만, 반드시 같이 사용해야 하는 것은 아닙니다. 각 어노테이션은 다음과 같이 독립적으로 사용될 수 있습니다.
@Transactional만 사용하는 경우:@Rollback 어노테이션을 명시적으로 사용하지 않아도 기본적으로 테스트 종료 후 롤백됩니다.@Rollback만 사용하는 경우:@Transactional 없이 @Rollback 어노테이션만 사용하면, 테스트 메소드 내에서 데이터베이스 작업을 수행하고, 테스트가 종료될 때 해당 트랜잭션을 롤백합니다.@Transactional과 @Rollback 어노테이션을 모두 사용하면, 테스트 메소드 내에서 데이터베이스 작업을 트랜잭션으로 묶고, 테스트가 종료될 때 트랜잭션을 롤백합니다.@Rollback 어노테이션을 사용하여 @Transactional의 롤백 동작을 명시적으로 설정할 수 있습니다.어노테이션을 사용하는 방식은 테스트 목적과 상황에 따라 다를 수 있습니다. 일반적으로는 @Transactional을 주로 사용하며, 데이터베이스 작업을 수행하고 테스트 종료 후 롤백하여 테스트 전 상태를 유지하는 데 활용됩니다. @Rollback은 추가적인 롤백 제어가 필요한 경우에 사용될 수 있습니다.
@Transactional 어노테이션은 트랜잭션을 시작하고 종료하며, @Rollback 어노테이션은 해당 트랜잭션의 롤백 동작을 지정합니다. 두 어노테이션을 어떻게 조합하느냐에 따라 테스트가 데이터베이스에 어떤 영향을 미치는지를 조절할 수 있습니다.