Spring

@Transactional 동작원리

whyWhale 2022. 12. 23.

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. 호출 역순으로 리턴을 한다.

'Spring' 카테고리의 다른 글

Validation Custom 하기  (0) 2023.02.24
트랜잭션 전파속성  (0) 2023.02.15

댓글