⇒ 관심사를 분리하여 개발한다고 하여, 횡단 관심사(cross-cutting concern) 이라는 용어를 사용한다.
⇒ 디자인 패턴에서 얘기하는 프록시 패턴은 target 객체의 기능을 수행하기 위해 proxy 객체를 통해 client 가 target에 접근하는 방식을 변경하고 return 값에 대해 수정을 하지 않는 패턴이다.
⇒ 그러나 개인적으로 AOP의 프록시는 template callback 패턴과도 비슷하다고 생각한다.
⇒ jdbctemplate와 비슷하게 try-catch-finally로 예외 처리하는 로직도 추가될 뿐 만 아니라 callback 메소드를 비즈니스 로직의 전 후로 횡단 관심사를 수행할 수 있기 때문이다.
Spring AOP의 원리 - CGlib vs Dynamic Proxy
JDK Dynamic Proxy : Interface based
⇒ Target 클래스가 구현하고 있는 interface를 구현하여 횡단 관심사를 추가하는 방법
⇒ 자바의 **Reflection(런타임)**을 활용하여 Proxy를 동적으로 구현하기 때문에 리소스 부담이 높고 성능이 떨어진다.
⇒ interface를 강제화 해야 하는 단점이 있다.
CGLib Proxy : subclass based
⇒ Target 클래스를 상속(extends) 하는 proxy 클래스에서 횡단 관심사를 추가하는 방법
⇒ 바이트 코드 조작을 통해 동적으로 Proxy 인스턴스를 생성한다.
⇒ 상속을 이용하기 때문에 클래스나 메소드에 final이 붙어있으면 구현이 안된다.
⇒ Spring Boot에서 AOP 사용을 위해 채택한 방법
JDK Dynamic Proxy와 CGLIB의 차이점은 무엇일까? | Moon
⇒ Hibernate, Mockito 에서도 cglib 를 채택하여 사용한다.
