public이외의 메서드는 AOP가 걸리지 않는다. 스프링 aop에서 프록시는 크게 JDK Dynamic proxy또는 CGLIB으로 작동합니다. 그리고 spring boot 1.4 버전 이후부터는 default로 CGLIB을 사용합니다. CGLIB은 동적으로 상속을 통해 프록시를 생성합니다. 따라서 private 메서드는 상속이 불가능하기 때문에 프록시로 만들어지지 않는것이죠! 그러면 아래처럼 protected나 public으로 메서드를 만들면 정상적으로 트랜잭션이 동작할까요? 정답은 protected일 때 또한 정상 동작하지 않습니다. JDK Dynamic proxy는 인터페이스를 기반으로 동작합니다. 따라서 protected 메서드에서는 프록시가 동작할 수 없는 것이죠. 그래서 스프링에서는 일관된 ..
Spring AOP
AOP 가 무엇일까 Aspect Oriented Programming 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나누어 그 관점을 기준으로 모듈화하는 프로그래밍. 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 반복 작업을 줄이고 핵심 비즈니스 로직 개발에만 집중할 수 있다. Spring AOP는 프록시 기반으로 JDK Dynamic Proxy와 CGLIB을 활용하여 AOP 제공. 사용 목적에 따라 프록시 패턴: 클라이언트가 타깃에 접근하는 방법 제어 데코레이터 패턴: 타깃에 부가적인 기능 부여 프록시 동작 방식 클라이언트로부터 타켓을 대신해서 요청을 받는 대리인. 실제 오브젝트인 타겟은 프록시를 통해 최종적으로 요청받아 처리함. 따라서 타겟은 자신의 기능에만 집중하고 부가기능은 프록시에게 위임..