본문 바로가기

728x90

Spring Boot

(45)
Spring AOP - 포인트컷(pointcut) 지시자(within, args) 해당 포스팅에 이어서 포인트컷 지시자에 대해서 작성하였습니다. within within 지시자는 특정 타입 내의 조인 포인트들로 매칭을 제한합니다. 즉, 해당 타입이 매칭되면 그 안의 메서드(조인 포인트)들이 자동으로 매칭됩니다.문법은 execution에서 타입 부분만 사용한다고 보면 됩니다. 참고로 execution 문법은 아래와 같았습니다.execution([접근제어자?] [메서드 반환타입] [선언 타입?][메서드 이름]([파라미터]) [예외?]) 즉, 여기에서 [선언 타입?] 부분을 사용합니다. 즉, within(패키지명..*)  지난 ExecutionTest 에 이어서 WithinTest 코드를 작성해 보겠습니다.public class WithinTest { AspectJExpressionP..
Spring AOP - 포인트컷(pointcut) 지시자(execution) @Aspect를 사용해서 스프링 AOP를 구현할 때, 아래와 같이 표현식을 사용합니다.@Pointcut("execution(hello.aop...*.*(..)") 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작합니다.(일명 PCD)  Spring AOP에서 포인트컷(Pointcut) 지시자는 Aspect(관점)에서 어떤 JoinPoint를 적용할지 정의하는 역할을 합니다.  이런 포인트컷 지시자의 종류에는 아래의 것들이 있습니다.execution(): 메소드 실행 시점을 포인트컷으로 지정합니다. 메서드 이름, 매개변수, 반환 타입 등을 기반으로 필터링할 수 있습니다. 가장 많이 사용합니다.@Pointcut("execution(* com.example...
스프링 AOP - 어드바이스 종류 (@Around, @Before, @AfterReturning, @AfterThrowing, @After) 스프링 AOP의 Advice에는 @Around 외에도 아래와 같은 종류가 있습니다.  Before Advice(@Before):  타깃 메서드(join point)가 실행되기 전에 실행되는 advice입니다. 주로 로그를 남기거나, 사전 검증을 수행하는 데 사용됩니다.After Advice: 타겟 메서드가 실행된 후에 실행되는 advice입니다. 성공적으로 실행된 후에 또는 예외가 발생한 후 등에 적용될 수 있습니다.@AfterReturning: 메서드가 정상적으로 종료된 후에 실행됩니다.@AfterThrowing: 메서드 실행 중 예외가 발생했을 때 실행됩니다. @After : 메서드가 정상 또는 예외에 관계없이 실행(finally)됩니다. 일반적으로 리소스를 해제하는 데 사용합니다.Around Adv..
스프링 AOP 구현하기 - 1 (@Aspect, @Around, @Pointcut) 스프링 AOP를 구현하는 기본 코드입니다. 총 2개 포스팅으로 작성하였습니다.build.gradle스프링 AOP 기능을 구현하기 위해서 아래 dependency 들로 구성하였습니다.dependencies { implementation 'org.springframework.boot:spring-boot-starter' // Spring aop 사용을 위한 dependency implementation 'org.springframework.boot:spring-boot-starter-aop' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springfra..
스프링 AOP 구현하기 - 2 (포인트컷 분리, @Order) https://silver-programmer.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-AOP-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-1 위 포스팅에 이어서 작성하는 AOP 구현하기 2편입니다. 이번 포스팅에는 아래와 같은 내용을 정리하였습니다.포인트컷을 분리하여 외부에서 어떻게 참조할 수 있는지Advice 적용 순서를 어떻게 바꿀 수 있는지스프링 AOP 구현 - 3 (Pointcut 참조)포인트컷을 공용으로 사용하기 위해 별도의 외부 클래스에 모아둘 수 있습니다. 외부에서 호출할 때는 포인트컷의 접근 제어자를 public으로 설정합니다!package hello.aop.order.aop;import org.aspectj.lang.anno..
@ComponentScan vs scanBasePackages Spring boot를 공부하다가 특정 패키지 하위의 클래스들만 bean으로 등록하고 싶은 경우가 생겼습니다. 이 경우, 크게 2가지 방법으로 해결이 가능합니다. 예를 들어, 아래 그림의 hello.aop.order 패키지 하위의 클래스들만 bean으로 등록하고 싶은 경우를 생각해 보겠습니다.1. @ComponentScan의 basePackages로 패키지 경로 지정아래 코드와 같이 @ComponentScan 의 basePackages 속성에 해당 패키지 경로를 지정한 후, 생성된 bean을 출력해 보면 hello.aop.order 패키지 내부의 @Component 들만 bean으로 등록됨을 확인할 수 있습니다.@SpringBootApplication@ComponentScan(basePackages = ..
Spring AOP 란? Spring AOP 는 이름 그대로 Spring에서 제공하는 AOP 기능을 의미합니다. 그렇다면 AOP가 무엇인지 알아보겠습니다. AOP란AOP는 Apsect-Oriented Programming의 약자로, 관점 지향 프로그래밍이라고 합니다. AOP가 등장한 이유는 부가 기능을 핵심 기능에서 분리하고 한 곳에서 관리하도록 하기 위해서였습니다. 아래 핵심 기능과 부가 기능이 무엇인지 살펴보겠습니다.핵심 기능과 부가 기능 어플리케이션은 크게 핵심 기능과 부가 기능으로 나눌 수 있습니다.핵심 기능은 각 객체가 제공하는 고유의 구별되는 기능입니다. 부가 기능은 핵심 기능을 보조하기 위해 제공되는 기능입니다. 예를 들어 `OrderService`라는 클래스는 주문 관련 로직을 핵심 기능으로 제공하고, `Order..
AOP 적용 방식 AOP를 사용하면 핵심 기능과 부가 기능이 코드상 완전히 분리되어서 관리됩니다. AOP를 사용할 때 부가 기능 로직은 크게 3가지 방법으로 실제 로직에 추가될 수 있습니다.컴파일 시점클래스 로딩 시점런타임 시점(프록시)원본 로직에 부가 기능 로직이 추가되는 것을 Weaving(위빙) 이라고 합니다. 각 방식에 대해서 이번 포스팅에서 정리해 보았습니다. 컴파일 시점 (컴파일 타임 - 위빙)컴파일을 하면 .java 소스 코드가 컴파일러를 통해 .class 로 변환됩니다. 이렇게 .class 를 만드는 시점에 부가 기능 로직을 추가할 수 있습니다. 이 때는 AspectJ가 제공하는 특별한 컴파일러를 사용해야 합니다. AspectJ 컴파일러는 Aspect를 확인해서 해당 클래스가 적용 대상인지 확인 후, 적용 ..

728x90
반응형