BackEnd/Spring

Spring @Transactional 동작 원리

컴퓨터파르페개발자 2024. 8. 2. 16:30

@Transactional 역할

Spring 프레임워크에서는@Transactional 어노테이션을 통해 트랜잭션을 선언적으로 관리할 수 있습니다.

 

@Transacational 동작 원리

기본적으로 Spring은 프록시 기반의 어드바이스 모드를 사용하여 @Transactional 어노테이션을 처리합니다.
  • 프록시 기반 인터셉션: 트랜잭션은 프록시를 통해 관리되며, 외부에서 들어오는 메서드 호출을 인터셉트합니다. 그러나 같은 클래스 내에서 메서드가 호출되는 경우에는 프록시가 적용되지 않습니다.
  • 제한 사항: 같은 클래스 내에서 호출되는 메서드는 트랜잭션 관리의 대상이 되지 않습니다. 즉, 메서드 A가 메서드 B를 호출하더라도, 메서드 B는 트랜잭션을 적용받지 않을 수 있습니다.

@Transactional 우선순위

Class Level vs. Method Level : Class에 @Transactional이 적용되어 있으면 기본 설정이 클래스 내 모든 메서드에 적용됩니다.
그러나 메서드에 개별적으로 @Transactional을 적용하면 해당 메서드는 클래스 레벨 설정보다 메서드 레벨 설정을 우선시합니다.
@Transactional(readOnly = true)
public class FooService {

    @Transactional // 클래스 레벨 설정을 오버라이드
    public void updateFoo(Foo foo) {
        // 메서드 전용 트랜잭션 설정
    }
}