Spring 의 트랜잭션

박북velog·2023년 3월 16일
0

클래스,메서드 위에 어노테이션을 추가해서 사용할 수 있다.

@Transactional 입력으로
트랜잭션 기능이 적용된 프록시 객체 생성

String 트랜잭션의 세부설정들

1. Isolation ( 격리수준 )

@Transactional(isolation=Isolation.DEFAULT)

  • DEFAULT

  • READ_UNCOMMITTED ( Dirty Read 발생 )
    = 사실상 격리를 하지 않는 0레벨 격리 수준

  • READ_COMMITTED ( Dirty Read 방지 )
    = 커밋된 데이터만 조회 가능하게 설정

  • REPEATABLE_READ ( Non-Repeatable Read 방지 ) = 트랜잭션이 완료될 때까지 lock 상태로 다른 사용자는 사용이 불가

  • SERIALIZABLE ( Phantom Read 방지 )
    = 트랜잭션이 완료될 때까지 트랜잭션이 사용하고 있는 모든 영역이 lock 상태로 다른 사용자는 해당하는 영역에 접근이 불가

아래로 내려갈 수록 트랜잭션 간 충돌은 없을 수 있으나, 성능의 저하는 감당해야한다.

2. Propagation ( 전파수준 )

트랜잭션 동작 도중 다른 트랜잭션을 호출하는 상황

트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법에 대해 결정하는 속성값

  • REQUIRED ( Default )
    = 트랜잭션 A 안에 트랜잭션 B를 호출하는 메소드가 있다면 A는 부모 트랜잭션이 되고, B는 자식 트랜잭션이 된다. 부모 트랜잭션 안에서 자식 트랜잭션까지 함께 실행.

  • SUPPORTS
    = 이미 시작된 트랜잭션이 있으면 참여하고, 없으면 트랜잭션없이 진행하는 옵션

  • REQUIRES_NEW
    = 부모 트랜잭션 안에서 함수 B가 동작하는 경우에 부모 트랜잭션이 있음에도 자신의 자식 트랜잭션을 위한 트랜잭션을 새로 생성하여 동작하는 방식

  • NESTED
    = 이미 진행중인 트랜잭션이 있는 경우에 중첩 트랜잭션을 시작하는 옵션 ( 진행중인 트랜잭션안에 트랜잭션을 하나 새로 만드는 것 )

  • ...

3. ReadOnly 속성

@Transactional(readOnly=true)

트랜잭션을 읽기 전용 속성으로 지정

4. 트랜잭션 롤백 예외

예외 발생했을 때 트랜잭션 롤백시킬 경우를 설정

@Transactional(rollbackFor=Exception.class)
@Transactional(noRollbackFor=Exception.class)

Default: RuntimeException,Error

5. timeout 속성

일정 시간 내에 트랜잭션을 끝내지 못하면 롤백

@Transactional(timeout=10)

profile
느리지만 끝까지 해보자구

0개의 댓글