@Transactional 과 @Rollback의 이해

개발 오답 노트·2024년 11월 5일

개념정리

목록 보기
9/13

@Transactional@Rollback은 주로 테스트 환경에서 사용되는 어노테이션으로, 데이터베이스 연동 테스트에서 트랜잭션 관리와 롤백을 다루는 데에 사용됩니다.

정의와 사용법

  1. @Transactional 어노테이션:

    • @Transactional 어노테이션은 테스트 메소드 내에서 실행되는 모든 작업을 하나의 트랜잭션으로 묶어줍니다.
    • 이를 통해 테스트 메소드가 실행되는 동안 데이터베이스에 변경 사항을 적용하고, 테스트가 끝날 때 트랜잭션을 롤백하여 원래 상태로 되돌릴 수 있습니다.
    • 따라서 테스트가 실패하더라도 데이터베이스는 변하지 않습니다.
  2. @Rollback 어노테이션:

    • @Rollback 어노테이션은 @Transactional과 함께 사용될 때, 해당 테스트 메소드의 실행 후에 트랜잭션을 롤백하도록 지정합니다.
    • @Rollback 어노테이션을 사용하지 않으면 테스트 메소드의 작업이 실제로 데이터베이스에 적용될 수 있습니다.
    • @Rollback(true)로 설정하면 테스트 메소드의 작업이 트랜잭션을 통해 실행되며, 테스트 종료 후 데이터베이스는 롤백됩니다.
    • @Rollback(false)로 설정하면 테스트 메소드의 작업이 트랜잭션을 통해 실행되고, 테스트 종료 후 데이터베이스는 롤백되지 않습니다.

    독립적인 사용과 같이 사용하는 경우

    @Transactional@Rollback 어노테이션은 같이 사용할 수도 있지만, 반드시 같이 사용해야 하는 것은 아닙니다. 각 어노테이션은 다음과 같이 독립적으로 사용될 수 있습니다.

    1. @Transactional만 사용하는 경우:
      • 테스트 메소드 내에서 데이터베이스 작업을 수행하고, 트랜잭션으로 묶어서 실행하며, 테스트가 종료될 때 해당 트랜잭션을 롤백합니다.
      • 이 경우에는 @Rollback 어노테이션을 명시적으로 사용하지 않아도 기본적으로 테스트 종료 후 롤백됩니다.
    2. @Rollback만 사용하는 경우:
      • @Transactional 없이 @Rollback 어노테이션만 사용하면, 테스트 메소드 내에서 데이터베이스 작업을 수행하고, 테스트가 종료될 때 해당 트랜잭션을 롤백합니다.
      • 테스트 메소드 내에서 직접 트랜잭션을 사용하는 것이 아니기 때문에 일부 상황에서는 제한적일 수 있습니다.
    3. 두 어노테이션 모두 사용하는 경우:
      • @Transactional@Rollback 어노테이션을 모두 사용하면, 테스트 메소드 내에서 데이터베이스 작업을 트랜잭션으로 묶고, 테스트가 종료될 때 트랜잭션을 롤백합니다.
      • @Rollback 어노테이션을 사용하여 @Transactional의 롤백 동작을 명시적으로 설정할 수 있습니다.

    어노테이션을 사용하는 방식은 테스트 목적과 상황에 따라 다를 수 있습니다. 일반적으로는 @Transactional을 주로 사용하며, 데이터베이스 작업을 수행하고 테스트 종료 후 롤백하여 테스트 전 상태를 유지하는 데 활용됩니다. @Rollback은 추가적인 롤백 제어가 필요한 경우에 사용될 수 있습니다.

    요약

    @Transactional 어노테이션은 트랜잭션을 시작하고 종료하며, @Rollback 어노테이션은 해당 트랜잭션의 롤백 동작을 지정합니다. 두 어노테이션을 어떻게 조합하느냐에 따라 테스트가 데이터베이스에 어떤 영향을 미치는지를 조절할 수 있습니다.

profile
포토폴리오 https://wikidocs.net/book/10969 유튜브 링크 https://www.youtube.com/@%EC%B5%9C%EC%9B%90%EC%9D%BC-n5r

0개의 댓글