@Transactional

jooog·2022년 6월 6일
0

Test

목록 보기
2/2

🎨 @Transactional

이전 글에서는 트랜잭션과 롤백을 사용해서 매번 테스트 할 때 쌓이는 데이터를 초기화 하는 방법에 대해 정리했다. 이번에는 스프링이 제공하는 @Transactional 어노테이션을 사용해서 보다 간편하게 트랜잭션과 트랜잭션 롤백을 하는 과정을 살펴본다.

transactionManager를 통해 트랜잭션 시작과 롤백을 처리했던 이전 코드

import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

@SpringBootTest
class ItemRepositoryTest {

    @Autowired
    ItemRepository itemRepository;
    
    @Autowired
    PlatformTransactionManager transactionManager;
    TransactionStatus status;
}


	//모든 테스트를 실행하기 전 트랜잭션 시작
    @BeforeEach
    void beforeEach(){
        status = transactionManager.getTransaction(new DefaultTransactionDefinition());
    }
    
    //테스트가 끝나면 롤백
    @AfterEach
    void afterEach() 
        
        //트랜잭션 롤백
        transactionManager.rollback(status);
    }

@Transactional 어노테이션을 사용해본다.

import org.springframework.transaction.annotation.Transactional;

@Transactional
@SpringBootTest
class ItemRepositoryTest {

    @Autowired
    ItemRepository itemRepository;
    


    @Test
    void save() {
      
     Item item = new Item("itemA", 50000, 10);
     Item savedItem = itemRepository.save(item);
   
    }
}
 

@Transactional 어노테이션을 테스트에서 사용하면 트랜잭션 안에서 테스트가 실행되고 테스트가 끝나면 자동으로 트랜잭션을 롤백한다.

🎨 @Transactional 사용의 편리함

@Transactional 어노테이션을 사용하면 테스트가 끝난 후 데이터를 직접 삭제해야 하는 번거로움을 덜어주며 매번 트랜잭션 시작과 롤백 코드를 작성해야 하는 수고도 덜 수 있다. 또한 트랜잭선 범위 안에서 테스트를 진행하기 때문에 동시에 다른 테스트가 진행되어도 문제없이 실행될 수 있다.

이 글은 김영한님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의를 듣고 정리한 내용입니다.

0개의 댓글