Spring

@Transactional 동작원리

whyWhale 2022. 12. 23. 22:59

Build Up



Spring Aop 2가지 방식

JDK Dynamic Proxy

동적으로 생성하는 전략으로 타겟의 Interface 기준으로 Proxy를 생성한다.

Reflection 이 비싸다는 특징이 있다.

CGLIB Proxy

스프링 부트가 기본적으로 제공하는 방식이다.

바이트 코드를 조작하여 프록시 객체를 생성한다.

인터페이스가 아닌 상속을 한 타켓을 호출하게 된다.

동작과정


@Transcational을 메소드 또는 클래스에 명시하게 되면 Spring AOP를 통해 타겟이 상속하고 있는 인터페이스 또는 타겟을 상속한 프록시 객체가 생성된다.

SpringAop를 사용하고 있기 때문에 @Transactional을 사용하고 있는 클래스의 메소드를 호출 할 때 유념해야 한다.

@Transactional 주의 사항

  1. caller에서 AOP 프록시를 타고 직접적인 Traget을 호출하지 않고 Proxy를 호출하게 된다.
  2. AOP는 트랜잭션 Advisor를 호출한다. ⇒ 해당 과정에서 커밋, 롤백이 된다.
  3. Custom Advice가 있다면, 트랜잭션 Advisor 실행 전후로 동작한다.
  4. Custom Advisor는 타겟 메소드를 호출하여, 실제 비즈니스 로직을 호출한다.
  5. 호출 역순으로 리턴을 한다.