본문 바로가기

728x90

전체 글

(130)
Spring AOP - 포인트컷(pointcut) 지시자(@target, @within) 해당 포스팅에 이어서 @target, @within 지시자도 알아보겠습니다.@target : 특정 애너테이션이 적용된 타깃 객체의 메서드에 대해 포인트컷을 설정합니다. 즉, 메서드가 호출되는 클래스의 인스턴스가 특정 애너테이션을 가지고 있을 때 해당 메서드를 가로챌 수 있습니다. 부모 클래스의 메서드까지 어드바이스를 적용할 수 있습니다.@within : 특정 애너테이션이 적용된 타입 내의 모든 조인 포인트를 지정합니다. 이는 애너테이션이 붙은 클래스의 메서드뿐만 아니라 그 하위 클래스의 메서드도 포함합니다. 부모 클래스의 메서드까지 어드바이스를 적용할 수 없습니다.즉, @target과 @within 은 타입에 있는 애노테이션으로 AOP 적용 여부를 판단합니다. @target // 애너테이션 정의@Rete..
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..
Kubernetes 란? 정의 컨테이너화된 애플리케이션 (도커 이미지가 빌드/실행된 것 )의 자동 배포, 확장 및 관리를 위한 오픈소스 플랫폼입니다. 구글이 개발하였으며, 컨테이너 오케스트레이션의 표준으로 자리 잡았습니다. 개발자와 운영팀이 컨테이너 기반의 애플리케이션을 더 쉽게 관리하고 배포할 수 있도록 돕습니다. 쿠버네티스의 아키텍처쿠버네티스는 다음과 같은 주요 구성 요소로 이루어져 있습니다:마스터 노드(Master Node):클러스터의 제어 플레인으로, 클러스터의 상태를 관리합니다. (클러스터는 여러 개의 노드(서버)로 구성된 집합)주요 컴포넌트: kube-apiserver: API 요청을 처리하고, 클러스터 상태를 관리합니다.etcd: 클러스터의 모든 데이터를 저장하는 분산 키-값 저장소입니다.kube-scheduler:..
스프링 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 = ..

728x90
반응형