IT/삽질

[SpringBoot] @Transactional 어노테이션, 트랜잭션 전파

_하늘여우_ 2023. 5. 4. 23:26

출처 : unsplash.com

 

서비스(Service)에서 2개 이상의 DAO 를 처리하는 경우 트랜잭션 처리를 해야 한다.

가장 흔한 예시로 은행 계좌이체 사례를 자주 언급한다.

 

A계좌에서 출금 처리 후, B계좌로 입금 처리가 정상 완료되어야 계좌이체를 끝낼 수 있는데,

만약 A 계좌 출금 이후 B 계좌 입금 처리 중 오류가 발생한다면 A 계좌 출금처리도 다시 취소를 해야 한다.

이러한 일련의 트랜잭션 처리를 스프링의 @Transaction 어노테이션을 사용해서 핸들링할 수 있다.

 

@Transaction 어노테이션은 클래스 혹은 메서드에 적용 가능하고, 해당 범위는 하나의 트랜잭션으로 묶인다.

REQUIRED, REQUIRES_NEW 2개의 속성값이 주로 많이 사용되는데 각각 "전체 롤백", "부분 롤백" 을 위해 사용된다. (참고 예제)

 

처음 이 부분이 많이 헷갈렸는데, 아래 블로그 참고해서 이해 완료!

https://velog.io/@minnseong/UnexpectedRollbackException-%EB%B0%9C%EC%83%9D

 

[이슈해결] UnexpectedRollbackException 발생

트랜잭션 내 다시말해 @Transactional 어노테이션이 붙어 있는 메서드 내에 내부 메서드가 있을 수 있다. 또한 해당 내부 메서드는 @Transactional 어노테이션이 붙어 있을 수 있다. 이 때 고려해야하는

velog.io