Spring74 스프링 코어 2 - 스프링이 지원하는 프록시(프록시 팩토리) 프록시 팩토리 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB을 작용하기 위해 스프링이 추상화된 편리한 인터페이스를 제공한다. 즉 동적 프록시를 통합해서 편리하게 만들어주는 프록시 팩토리(Proxy Factory)라는 기능을 제공한다. 프록시 팩토리는 인터페이스가 있으면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB을 사용한다. 또한 이 설정을 변경할 수도 있다. Q: 두 기술을 함께 사용할 때 부가 기능을 적용하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler와 CGLIB가 제공하는 MethodInterceptor를 각각 중복으로 따로 만들어야 할까? 스프링은 이 문제를 해결하기 위해 부가 기능을 적용할 때 Advice .. 2022. 1. 10. 스프링 코어2 - CGLIB CGLIB : Code Generator Library - CGLIB은 바이트 코드를 조작해서 동적으로 클래스를 생성하는 기술을 제공하는 라이브러리이다. - CGLIB를 사용하면 인터페이스가 없어도 구체 클래스만 가지고 동적 프록시를 만들어낼 수 있다. - CGLIB는 원래 외부 라이브러리인데, 스프링 프레임워크가 스프링 내부 소스 코드에 포함했다. 따라서 스프링을 사용한다면 별도의 외부 라이브러리를 추가하지 않아도 사용할 수 있다. CGLIB을 스프링의 'ProxyFactory'가 편리하게 사용하도록 제공하므로, 예제 코드로 CGLIB을 간단하게만 이해해보자. 먼저 아래는 정말 간단한 서비스 코드이다.(즉 비즈니스 로직이라고 가정한다.) @Slf4j public class ConcreteService .. 2022. 1. 10. 스프링 코어2 - JDK 동적 프록시 JDK 동적 프록시 JDK 동적 프록시를 사용하면 개발자가 직접 프록시 클래스를 만들지 않아도 된다. 이름 그대로 프록시 객체를 동적으로 런타임에 개발자 대신 만들어 준다. 그리고 동적 프록시에 원하는 실행 로직을 지정할 수 있다. JDK 동적 프록시는 인터페이스를 기반으로 프록시를 동적으로 할당해주기 때문에 인터페이스가 필수이다. 자바가 기본으로 제공하는 JDK 동적 프록시를 알아보자. A, BInterface를 만들고 이를 구현하는 아주 간단한 코드를 보자. A인터페이스와 그 구현체 public interface AInterface { String call(); } @Slf4j public class AImpl implements AInterface{ @Override public String ca.. 2022. 1. 9. 스프링 코어2 - 리플렉션 지금까지 로그 추적기에 프록시를 도입하여 기존의 서비스 로직 코드들을 수정하지 않아도 되도록 하였다. 하지만 대상 클래스 수만큼 로그 추적을 위한 프록시 클래스를 만들어야 한다는 것이 문제점이다. 로그 추적기를 위한 프록시 클래스들의 코드는 거의 똑같은데 말이다. 자바가 기본으로 제공하는 JDK동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어 낼 수 있다. 즉 지금처럼 프록시 클래스를 계속 만들지 않아도 되는 것이다. 프록시를 적용할 코드를 하나만 만든 뒤, 동적 프록시 기술을 사용하여 프록시 객체를 찍어내면 되는 것이다. JDK 동적 프록시를 이해하기 위해서는 자바의 리플렉션 기술을 이해해야 한다. 리플렉션 기술을 사용하면 클래스나 메서드의 메타정.. 2022. 1. 9. 이전 1 2 3 4 5 6 7 ··· 19 다음