JAVA

[SPRING] @Transactional 이

요료료룡 2024. 4. 16. 09:56
  • 트랜젝션이란?
    • 트랜젝션은 우리말로 ‘거래’라는 뜻을 가지고 있음.
  • 트랜젝션의 개념
    • 상대방에게 입금하는 작업이 성공했더라도 원하던 물건을 받지 못했다면 입금이 취소되었을 것이다.
    • 모든 작업들이 성공적으로 완료되어야 작업 묶음의 결과를 적용하고, 어떤 작업에서 오류가 발생했을 때는 이전에 있던 모든 작업들이 성공적이었더라도 없었던 일처럼 완전히 되돌리는 것이 트랜젝션의 개념.
  • 트랜젝션 동작 원리
    • 트랜젝션은 Spring AOP를 통해 구현되어있어, 클래스, 메서드에 @Transactional이 선언되면 해당 클래스에 트랜잭션이 적용된 프록시 객체 생성을 한다.
    • 프록시 객제는 @Transactional이 포함된 메서드가 호출될 경우, 트랜잭션을 시작하고 커밋이나 롤백을 합니다.
      • CheckedException or 예외가 없을 때는 Commit을, UncheckedException이 발생하면 Rollback을 합니다.


  • 데이터베이스를 다룰 때 트랜젝션을 적용하면 데이터 추가, 갱신, 삭제 등으로 이루어진 작업을 처리하던 중 오류가 발생했을 때 모든 작업들을 원 상태로 되돌릴 수 있다. → 롤백
    @Transactional은 우선순위를 가지고 있다.** 클래스 메서드 → 클래스 → 인터페이스 메서드 → 인터페이스
    • transaction : begin, commit을 자동 수행하게 해줌
    • 예외를 발생시키면, rollback 처리를 자동 수행해 준다.
    • JPA의 객체 변경 감지는 transaction이 commit 될 때, 작동.
  • 클래스 메서드에 선언된 트랜젝션의 우선순위가 가장 높고, 인터페이스에 선언된 트랜젝션의 우선순위가 가장 낮다.