@Transactional

최승아·2021년 11월 24일
0

트랜잭션 정의

  • 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미
  • begin, commit을 자동으로 수행해줌
  • 예외 발생 시 rollback 처리를 자동으로 수행해줌
  • 일련의 단위들을 묶어서 한번에 처리

트랜잭션 처리 방법

  • 스프링에서는 간단하게 어노테이션 방식으로 @Transactional을 메소드, 클래스, 인터페이스 위에 추가하여 사용하는 방식 👉 이 방식으로 선언적 트랜잭션이라 부르며, 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 commit혹은 rollback을 진행해줌

@Transactional 옵션

  1. isolation : 트랜잭션에서 일관성없는 데이터 허용 수준을 설정
  2. propagation : 트랜잭션 동작 도중 다른 트랜잭션 호출시, 어떻게 할 것인지 지정하는 옵션
  3. noRollbackFor : 특정 예외 발생 시 rollback 하지 않음
  4. rollbackFor : 특정 예외 발생 시 rollback 함
  5. timeout : 지정한 시간 내에 메소드 수행이 완료되지 않으면 rollback 함 (-1일 경우 timeout을 사용 안함)
  6. readOnly : 트랜잭션을 읽기 전용으로 설정

(rollbackFor = Exception.class)

  • @Transactional은 기본적으로 Unchecked Exception Error만을 rollback하고 있음
  • 그렇기 때문에 모든 예외에 대해서 rollback을 진행하고 싶은 경우 (rollbackFor = Exception.class)를 붙여야 한다는 것을 깨달음

참조 : https://velog.io/@kdhyo/JavaTransactional-Annotation-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-26her30h | kdhyo

profile
⭐ 개발 정리 공간 ⭐

0개의 댓글