TIL (Today I learned

2024/01/25 목요일 TIL Spring boot @Transactional Annotation

코딩준우 2024. 1. 25. 21:53

@Transactional

  • 트랜잭션이 필요한 영역에 추가한다.

  • 클래스 레벨, 메서드 레벨에 @Transactional을 적용할 수 있다.

    • 클래스 레벨에만 @Transactional이 적용된 경우, 해당 클래스의 모든 메서드에 일괄 적용된다.
    • 클래스 레벨과 메서드 레벨에 @Transactional이 함께 적용된 경우, 메서드 레벨의 @Transactional만 적용되며, 만약 메서드레벨에 @Transactional이 적용되지 않으면, 클래스 레벨의 @Transactional이 적용된다.
  • readOnly attribute

    • @Transactional(readOnly = true)
    • 읽기 전용 트랜잭션이 적용되며, 주로 조회하는 메서드(Get method)에 사용한다.
    • commit만 진행되고, flush와 스냅샷 생성을 하지않으므로 불필요한 추가 동작을 줄일 수 있다.
  • propagation attribute

    • 트랜잭션 전파(Transaction Propagation)
    • 트랜잭션의 경계에서 진행 중인 트랜잭션이 존재할 때 또는 존재하지 않을 때, 어떻게 동작할 것인지 결정하는 방식
    • 일반적으로 Propagation.REQUIRED을 많이 사용하며, 진행 중인 트랜잭션이 없으면 새로 시작하고, 진행 중인 트랜잭션이 있으면 해당 트랜잭션에 참여한다.
    • 서로 다른 클래스에 존재하는 여러 개의 작업을, 하나의 트랜잭션으로 묶기 위해 사용한다
    • isolation attribute
      • 트랜잭션 격리 레벨(Isolation Level)
      • ACID 원칙 중 격리성에 관한 속성이다
      • (격리성 : 트랜잭션은 다른 트랜잭션에 영향을 주지 않고, 독립적으로 실행되어야 한다)
  1. Isolation.DEFAULT : 데이터베이스에서 제공하는 기본 값
  2. Isolation.READ_UNCOMMITTED : 다른 트랜잭션에서 커밋하지 않은 데이터를 읽는 것을 허용한다
  3. Isolation.READ_COMMITTED : 다른 트랜잭션에 의해 커밋된 데이터를 읽는 것을 허용한다
  4. Isolation.REPEATABLE_READ : 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회되도록 한다
  5. Isolation.SERIALIZABLE : 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행되지 못하도록 한다