일단 결론부터 말하자면 트랜잭션이 동작하지 않는다. @Transaction 과 같은 어노테이션들은 모두 런타임에 동작하는 Spring AOP를 기반으로 동작하는데 Spring AOP에서는 어노테이션이 붙어있는 타겟 클래스의 프록시를 만들어 해당 타겟 클래스의 메서드 수행 전후에 일련의 처리를 한다. 이때 타겟 클래스의 타입에 따라 인터페이스 기반의 프록시 생성 시 JDK Dynamic Proxy, 그 외에는 CGLIB을 사용한다고 한다. 우선 Spring이 빈 생성시 해당 빈에 AOP 어노테이션이 있는지 확인하고 만약 있다면 프록시 객체를 생성하여 빈을 대체한다. 이때 위에서 말한 JDK Dynamic Proxy의 경우 인터페이스의 public 메서드, CGLIB의 경우 private를 제외한 pub..
[매일메일] private 메서드에 @Transactional 선언하면 트랜잭션이 동작할까?
일단 결론부터 말하자면 트랜잭션이 동작하지 않는다. @Transaction 과 같은 어노테이션들은 모두 런타임에 동작하는 Spring AOP를 기반으로 동작하는데 Spring AOP에서는 어노테이션이 붙어있는 타겟 클래스의 프록시를 만들어 해당 타겟 클래스의 메서드 수행 전후에 일련의 처리를 한다. 이때 타겟 클래스의 타입에 따라 인터페이스 기반의 프록시 생성 시 JDK Dynamic Proxy, 그 외에는 CGLIB을 사용한다고 한다. 우선 Spring이 빈 생성시 해당 빈에 AOP 어노테이션이 있는지 확인하고 만약 있다면 프록시 객체를 생성하여 빈을 대체한다. 이때 위에서 말한 JDK Dynamic Proxy의 경우 인터페이스의 public 메서드, CGLIB의 경우 private를 제외한 pub..
2025.02.07