티스토리 뷰

트랜잭션이란?

여러 과정을 하나의 행위로 묶을 때 사용됩니다

여러 단계를 수행했을때, 하나라도 실패하면 모두 취소되어야 합니다. 이렇게 함으로써 데이터의 무결성을 보장합니다

 

 

스프링에서 사용방법

@Transactional을 클래스 또는 메소드 레벨에 명시하면 해당 메써드 호출시 지정된 트랜잭션이 작동하게 됩니다

단, 같은 빈 내에서 @Transactional이 명시된 다른 메소드를 호출해도 작동하지 않습니다Spring Framework는 내부적으로 AOP를 통해 해당 어노테이션을 인지하여 프록시를 생성하여 트랜잭션을 자동 관리하기 때문입니다

하지만 스프링부트에서는 바이트 코드를 수정(CGLIB)이 기본으로 변경 되었습니다

 

 

전파옵션(Propagation)

▶ REQUIRED

  • 디폴트 속성, 부모 트랜잭션 내에서 실행하며 부모 트랜잭션이 없을 경우 새로운 트랜잭션을 생성합니다.

▶ SUPPORTS

  • 이미 시작된 트랜잭션이 있으면 참여하고 그렇지 않으면 트랜잭션 없이 진행하게 만듭니다.

▶ MANDATORY

  • REQUIRED와 비슷하게 이미 시작된 트랜잭션이 있으면 참여합니다.

  • 반면에 트랜잭션이 시작된 것이 없으면 새로 시작하는 대신 예외를 발생시킵니다.

  • 혼자서는 독립적으로 트랜잭션을 진행하면 안 되는 경우에 사용합니다.

▶ REQUIRES_NEW

  • 항상 새로운 트랜잭션을 시작합니다.

  • 이미 진행 중인 트랜잭션이 있으면 트랜잭션을 잠시 보류시킵니다.

▶ NOT_SUPPORTED

  • 트랜잭션을 사용하지 않게 합니다.

  • 이미 진행 중인 트랜잭션이 있으면 보류시킵니다.

▶ NEVER

  • 트랜잭션을 사용하지 않도록 강제합니다.

  • 이미 진행 중인 트랜잭션도 존재하면 안된다 있다면 예외를 발생시킵니다.

▶ NESTED

  • 이미 진행중인 트랜잭션이 있으면 중첩 트랜잭션을 시작합니다.

  • 중첩 트랜잭션은 트랜잭션 안에 다시 트랜잭션을 만드는 것입니다.

  • 하지만 독립적인 트랜잭션을 만드는 REQUIRES_NEW와는 다릅니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함