advice

핵심 기능과 부가 기능 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능이라 함은 객체가 가지고 있는 비즈니스로직으로 볼 수 있다. 만약 계산을 해주는 Calculator 라는 객체가 있다고 가정하면, Calcualtor의 핵심 기능은 사칙연산 등을 의미한다. 부가 기능은 핵심 기능을 보조하기 위한 기능이다. 단독으로 사용되지 않으며 핵심기능과 함께 사용된다. 예를 들면 메소드 실행 속도를 나타내는 로그, 트랜잭션 기능, 보안 기능 등등이 된다. 핵심 기능에 부가 기능을 추가해보자 @Slf4j public class Calcualtor { public int add(int x, int y) { // 핵심 기능 return x + y; } public int sub(int x,..
2022.10.11 - [프로그래밍 노트/SPRING] - [Spring] 빈 후처리기 (feat. proxy, advisor) Advisor를 bean으로 등록하면, AnnotationAwaareAspectJAutoProxyCreator 빈 후처리기가 Advisor 에 지정된 pointcut 기반으로 proxy를 만들어 줬다. Advisor 를 bean 으로 등록하기 위해 어드바이저를 직접 만들었는데, 스프링은 @Aspect 애노테이션으로 매우 편리하게 어드바이저(포인트 컷 + 어드바이스)생성 기능을 지원한다. Advisor 를 직접 생성하여 bean 으로 등록 @Bean public Advisor advisor() { AspectJExpressionPointcut pointcut = new Aspec..
2022.09.30 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_2 (feat. Advisor) 2022.09.28 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_1 (feat. Advice) 프록시 팩토리는 스프링에서 제공해주는 강력한 기술이지만, 부가기능이 필요할때 마다 프록시팩토리를 사용하여 프록시 객체를 만들기에는 한계가 있다. if, 100개의 프록시 빈을 생성해야한다면? .. 설정파일에 빈들을 하나씩 추가해줘야 한다. 빈 후처리기를 활용하면 컴포넌트 스캔을 통하여 일괄로 빈을 등록할 수 있게 되는데 일단 빈 후처리기에 대해 알아보자. 빈 후처리 - BeanPostProcessor 스프링은 bean 으로 등록될 대상 객체를 찾아서(@Bean 또는 컴포..
2022.09.28 - [프로그래밍 노트/SPRING] - [Spring] 프록시팩토리_1 (feat. Advice) 2018.07.01 - [프로그래밍 노트/SPRING] - [Spring] Spring AOP(Aspect Oriented Programming)1 AOP 하면 빠질 수 없는 용어들이 있다. 블로그를 찾아보니 2018년도에 AOP 관련 용어를 정리한 글이 존재하는데… 프록시 팩토리에서 찍먹으로 사용되니 몇 개만 속성으로 알아보자 포인트 컷(Pointcut) 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것 어디에 부가기능(Advice)을 적용할지 판단하는 필터링 로직 어드바이스(Advice) 실제로 기능을 구현한 객체 프록시가 호출하는 부가 기능 어드바이..
2022.09.27 - [프로그래밍 노트/SPRING] - [Spring] 동적 프록시 기술(feat. 리플렉션) 바로 직전 포스팅에서 동적 프록시 기술에 대해 알아보았는데, 이런 의문점을 가질 수 있다. 인터페이스가 있는 클래스는 Jdk Dynmic Proxy를 사용하고, 존재하지 않는 경우에는 CGLib 를 사용해야하니 InvocationHandler 와 MethodInterceptor 를 모두 구현해놔야하는 것인가? 물론.. 그래도 되지만 스프링에서는 프록시 생성을 추상화하여 프록시 팩토리(ProxyFactory)라는 것을 제공해준다. 우리는 타겟 객체가 인터페이스를 구현했는지 안했는지 알필요가 없다. 프록시 팩토리에서 인터페이스가 있으면 자동으로 Jdk Dynamic Proxy를 사용하고, 구체 ..
애노테이션 기반의 스프링 @AOP 의존성 추가 org.springframework.boot spring-boot-starter-aop 애스팩트 정의 @Aspect 빈으로 등록해야 하니까(컴포넌트 스캔을 사용한다면) @Component도 추가. 포인트컷 정의 @Pointcut(표현식) 주요 표현식 execution @annotation bean 포인트컷 조합 &&, ||, ! @Aspect @Component public class PerfAspect { // Advice + Pointcut @Around("execution(* com.corn..*.EventService.*(..))") public Object logPerf(ProceedingJoinPoint pjp) throws Throwable { ..
깡냉쓰
'advice' 태그의 글 목록