목록분류 전체보기 (563)
오봉이와 함께하는 개발 블로그
스프링 핵심 원리 - 고급편 > 포인트컷, 어드바이스, 어드바이저 소개포인트컷어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직주로 클래스와 메서드 이름으로 필터링이름 그대로 어떤 포인트에 기능을 적용할지 하지 않을지 잘라서 구분하는 것어드바이스프록시가 호출하는 부가 기능단순하게 프록시 로직이라 생각하면 된다.어드바이저단순하게 하나의 포인트컷과 어드바이스를 가지고 있는 것쉽게 이야기하면 포인트컷 1 + 어드바이스 1정리하면 부가 기능 로직을 적용해야 하는데, 포인트컷으로 어디에? 적용할지 선택하고, 어드바이스로 어떤 로직을 적 용할지 선택하는 것이다. 그리고 어디에? 어떤 로직?을 모두 알고 있는 것이 어드바이저이다.조언(Advice)을 어디(Pointcut)에 할 것..
스프링 핵심 원리 - 고급편 > 프록시 팩토리 예제Advice 만들기Advice는 프록시에 적용하는 부가 기능 로직이다. JDK 동적 프록시가 제공하는 InvocationHandler, CGLIB가 제공하는 MethodInterceptor의 개념과 유사하게 둘을 개념적으로 추상화 한 것이다.프록시 팩토리를 사용하면 둘 대신 Advice를 사용하면 된다.Advice를 만드는 가장 기본적인 방법은 아래 Spring에서 제공하는 클래스를 구현하면 된다.//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package org.aopalliance.intercept;import java..
스프링 핵심 원리 - 고급편 > 프록시 팩토리 소개인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?두 기술을 함께 사용할 때 부가 기능을 제공하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler 와 CGLIB가 제공하는 MethodInterceptor 를 각각 중복으로 만들어서 관리해야 할까?특정 조건에 맞을 때 프록시 로직을 적용하는 기능도 공통으로 제공되었으면?Q. 인터페이스가 있는 경우 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?스프링은 유사한 구체적인 기술들이 있을 때 그것들을 통합해서 일관성 있게 접근할 수 있고, 더욱 편리하게 사용할 수 있는 추상화된 기..
스프링 핵심 원리 - CGLIBCGLIB: Code Generator Library바이트코드를 조작해서 동적으로 클래스를 생성하는 기술을 제공하는 라이브러리인터페이스가 없어도 구체 클래스만 가지고 동적 프록시를 만들 수 있다.외부 라이브러리이지만, 스프링 프레임워크가 스프링 내부 소스 코드에 포함하여 스프링을 사용한다면 별도로 의존성 추가 없이 사용 가능참고스프링의 ProxyFactory를 사용하면 되기 때문에 CGLIB를 직접 사용하는 일은 거의 없다.대략적인 개념만 알아보자.에제 코드JDK 동적 프록시에서 실행 로직을 위해 InvocationHandler를 제공했듯, CGLIB는 MethodInterceptor를 제공한다.package org.springframework.cglib.proxy;impo..
스프링 핵심 원리 - 고급편 > JDK 동적 프록시 적용 1이전 내용을 바탕으로 실제 적용 코드를 작성해보자.@RequiredArgsConstructorpublic class LogTraceBasicHandler implements InvocationHandler { private final Object target; // 프록시가 호출할 대상이 되는 클래스 private final LogTrace logTrace; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { TraceStatus status = null; try { // Logtrace에 사용할 메시지 ..