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 될 때, 작동.
- 클래스 메서드에 선언된 트랜젝션의 우선순위가 가장 높고, 인터페이스에 선언된 트랜젝션의 우선순위가 가장 낮다.