Spring/Advanced13 스프링 AOP 개념 핵심 기능과 부가 기능 부가 기능 적용 문제 부가 기능을 적용할 때 아주 많은 반복이 필요하다. 부가 기능이 여러 곳에 퍼져서 중복 코드를 만들어낸다. 부가 기능을 변경할 때 중복 때문에 많은 수정이 필요하다. 부가 기능의 적용 대상을 변경할 때 많은 수정이 필요하다. Aspect - 핵심 기능과 부가 기능을 분리 ☆ Aspect를 사용한 프로그래밍 방식을 관점 지향 프로그래밍 AOP(Aspect-Oriented Programming) 이라 한다. ☆ AOP는 OOP를 대체용이 아닌 횡단 관심사를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하는 목적으로 개발되었다. AOP 적용 방식 적용 방법 1. 컴파일 시점 2. 클래스 로딩 시점 3. 런타임 시점(프록시) 단점 : 컴파일 시점에 부가 기능을.. 2023. 8. 21. @Aspect AOP @Aspect 프록시 - 적용 프록시 적용하려면 (Advisor)를 만들어서 스프링 빈으로 등록하면 된다. → @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원 LogTraceAspect @Slf4j @Aspect public class LogTraceAspect { private final LogTrace logTrace; public LogTraceAspect(LogTrace logTrace) { this.logTrace = logTrace; } @Around("execution(* hello.proxy.app..*(..))") public Object execute(ProceedingJoinPoint joinPoint) throws Thro.. 2023. 8. 21. 빈 후처리기 빈 후처리기 - 소개 @Bean 이나 컴포넌트 스캔으로 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 된다. BeanPostProcessor : 생성한 객체를 빈 저장소에 등록하기 직전에 조작 객체를 조작할 수 있다. 완전히 다른 객체로 바꾸는 것도 가능하다. 생성: 스프링 빈 대상이 되는 객체를 생성한다. ( @Bean , 컴포넌트 스캔 모두 포함) 전달: 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달한다. 후 처리 작업: 빈 후처리기는 전달된 스프링 빈 객체를 조작하거나 다른 객체로 바뀌치기 할 수 있다. 등록: 빈 후처리기가 빈을 반환한다. 빈을 그대로 반환하면 해당 .. 2023. 8. 17. 스프링이 지원하는 프록시 프록시 팩토리 문제점 : 인터페이스가 있는 경우에는 JDK 동적 프록시가 제공하는 (InvocationHandler), 인터페이스가 없는 경우에는 CGLIB가 제공하는 (MethodInterceptor)를 각각 만들어서 관리해야할까? 해결 방안 : 동적 프록시를 통합해서 만들어주는 ( ProxyFactory ) 스프링은 부가 기능을 적용할 때 Advice 라는 새로운 개념을 도입했다. 결과적으로 InvocationHandler 나 MethodInterceptor 는 Advice 를 호출하게 된다. 프록시 팩토리는 Advice 를 호출하는 전용 InvocationHandler , MethodInterceptor 를 내부에서 사용한다. 특정 로직을 체크해서 프록시를 적용할지 말지 결정하는 Pointcut 개.. 2023. 8. 17. 이전 1 2 3 4 다음