DEVLOG

[Spring Boot] @Transactional(rollbackFor = Exception.class) 본문

Spring Boot

[Spring Boot] @Transactional(rollbackFor = Exception.class)

BINTHEWORLD 2022. 7. 31. 23:54

트랜잭션이란?

데이터베이스의 상태를 변경하는 작업 또는 한 번에 수행되어야 하는 연산들을 의미한다.

begin, commit 을 자동으로 수행해준다.

예외 발생 시 rollback 처리를 자동으로 수행해준다.

트랜잭션의 4가지 성질

- 원자성 : 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉, 모두 성공 또는 모두 실패

- 일관성 : 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다.

- 격리성 : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야 한다.

- 영속성 : 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다.

트랜잭션 처리 방법

프로그래밍 방식의 트랜잭션과 선언적 방식의 트랜잭션이 있다.

스프링은 메소드, 클래스, 인터페이스 위에 @Transactional을 추가하여 사용하는 방식인 선언적 방식의 트랜잭션을 일반적으로 많이 사용하며, 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 commit 혹은 rollback을 진행해준다.

(메서드에 @Transactional 어노테이션 작성 시, 해당 메서드 실행  java.lang.RuntimeException 발생하면 트랜잭션이 롤백된다.)

@Transactional 옵션

1. isolation (해당 속성에 대해 알고싶다면 클릭!)

2. propagation

3. noRollbackFor

4. rollbackFor

5. timeout

6. readOnly

 

해당 포스팅에서는 rollbackFor 속성에 대해서만 알아보고자 한다.

 

rollbackFor 속성은 특정 예외 발생 시 강제로 Rollback 한다.

기본적으로 @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

 

[Java]@Transactional Annotation 알고 쓰자

초반 @Transactional 어노테이션에 대해 자세히 알아보지 않고,막연히 롤백때 사용한다고 하여 SQL C,U,D 를 할 때마다 메소드 위에 붙여서 사용하곤 하였다.하지만, 내 코드를 보신 선임께서 단지 @Tran

velog.io

https://developsd.tistory.com/129

 

스프링 트랜잭션 @Transactional 개념 (+주요 설정값)

스프링에서 트랜잭션을 사용하는 @Transaction 어노테이션을 추가 하게 된다. 일반적으로 DB에서 데이터를 조회, 추가, 수정, 삭제 등을 하는 경우 메소드 상단에 트랜잭션 어노테이션을 붙인다. 보

developsd.tistory.com

Comments