트랜잭션이 적용 되었다
왜?
@Transactional이 적용된 메서드 내에서 호출되면 해당 트랜잭션에 참여하게 됨
스프링에서 트랜잭션 전파(Transaction Propagation) 타입의 기본값은 REQUIRED
REQUIRED 타입은 진행중인 트랜잭션 내부에 새로운 트랜잭션이 들어온다면 기존 트랜잭션에 참여하는 전파 방식
private 에는 트랜잭션이 적용 안되는줄알았는대 트랜잭션이 선언된 메서드 내에서 선언하면
트랜잭션이 되는걸 깨달았다
여기서 이해해야 할 핵심은 Main 클래스의 main(..) 메서드 내부의 클라이언트 코드가 프록시에 대한 참조를 가지고 있다는 점입니다. 이는 해당 객체 참조에 대한 메서드 호출이 프록시에 대한 호출이라는 의미입니다. 결과적으로, 프록시는 특정 메서드 호출과 관련된 모든 인터셉터(어드바이스)에 위임할 수 있습니다.
하지만 호출이 최종적으로 대상 객체(이 경우 SimplePojo 참조)에 도달하면, 그 객체가 자신에 대해 수행하는 메서드 호출(예: this.bar() 또는 this.foo())은 this 참조에 대해 호출되며, 프록시에 대해 호출되지 않습니다. 이는 중요한 의미를 갖습니다. 자기 호출(self-invocation)의 경우, 메서드 호출과 관련된 어드바이스가 실행될 기회를 얻지 못한다는 뜻입니다.