전체 글
[스프링 핵심 원리 고급편] 스프링 AOP - 실전 예제
retry 애노테이션 적용을 통해 외부 서버 연동 작업 등 간헐적 에러가 나는 부분을 재시도함 // 우리 굿스플로 연동부분.. 에러 잘 나는데 이거 한 번 적용해보기..? 그런데 안그래도 서버 구려서 에러 잘 나는데 한 번 더 재시도 하는게 옳은 방법일까?
[스프링 핵심 원리 고급편] 스프링 AOP - 포인트컷
PCD (Pointcut Designator) 종류 execution : 메소드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하고, 기능도 복잡하다. within : 특정 타입 내의 조인 포인트를 매칭한다. args : 인자가 주어진 타입의 인스턴스인 조인 포인트 this : 스프링 빈 객체(스프링 AOP 프록시)를 대상으로 하는 조인 포인트 target : Target 객체(스프링 AOP 프록시가 가르키는 실제 대상)를 대상으로 하는 조인 포인트 @target : 실행 객체의 클래스에 주어진 타입의 애노테이션이 있는 조인 포인트 @within : 주어진 애노테이션이 있는 타입 내 조인 포인트 @annotation : 메서드가 주어진 애노테이션을 가지고 있는 조인 포인트를 매칭 @arg..
[스프링 핵심원리 고급편] 스프링 AOP 구현
AOP를 사용할 때 아래 디펜던시 추가 필요 (spring JPA, spring data jpa등에는 이미 포함되어있음) implementation 'org.springframework.boot:spring-boot-starter-aop' 스프링의 AOP 스프링은 AspectJ의 껍데기(인터페이스)를 차용해서 사용함 실제로 AspectJ 프레임웍을 사용하는 것은 아님 포인트컷 분리 @Slf4j @Aspect public class AspectV2 { //hello.aop.order 패키지와 하위 패키지 @Pointcut("execution(* hello.aop.order..*(..))") //pointcut expression private void allOrder(){} //pointcut signat..
[스프링 핵심원리 고급편] 스프링 AOP 개념
애플리케이션 로직 핵심기능: 객체 고유 기능 부가 기능: 보조하기 위한 기능 AOP 부가 기능 도입시 문제점 1. 아주 많은 반복 필요 2. 중복 코드 만들어냄 3. 기능 변경시 많은 수정 필요 4. 적용 대상 변경시 많은 수정 필요 Aspect(관점) 부가 기능을 한 곳에서 관리하도록 변경 어디에 적용할지 선택하는 기능 추가 AOP (Aspect-Oriented-Programming) Aspect를 사용한 프로그래밍 방식 AspectJ J는 Java의 J AOP의 대표적인 구현 프레임워크 스프링도 AOP를 제공하지만 대부분 AspectJ의 문법 차용(직접사용 X), 기능 일부만 제공 제공 기능 - 자바 프로그래밍 언어에 대한 완벽한 관점 지향 확장 - 횡단 관심사의 모듈화 - 오류 검사 및 처리 - 동..
[스프링 핵심 원리 고급편] 스프링이 지원하는 프록시
스프링은 유사한 기술들이 있을 때 일관성있게 접근할 수 있는 추상화된 기술 제공 인터페이스 있을 때 JDK동적 프록시 없을 때 CGLIB ==> ProxyFactory 프록시 로직을 InvocationHandler, MethodInterceptor 두 곳에 작성하지 않아도 됨 ==> Advice 부가기능 ==> PointCut Advice - 프록시 로직 - spring AOP의 MethodInterceptor을 구현 CGLIB 강제 옵션 - setProxyTargetClass(true) - 실무에서 종종 사용됨 - 스프링 2.0부터 구체클래스 기반으로 기본 생성 PointCut - 어디에 부가 기능을 적용할지 판단하는 필터링 로직 - ClassFilter(클래스가 해당하는지) + MethodFilter..
[스프링 핵심 원리 고급편] 동적 프록시 기술
리플랙션: 런타임 시점에 동적으로 클래스 정보를 추출해낼 수 있는 프로그래밍 기법 클래스 타입을 몰라도 메서드와 변수에 접근할수 있게 해주는 자바 API 클래스 로더를 통해 읽어온 정보를 사용 파라미터를 통해 클래스와 메서드 메타정보 획득 가능 메타정보로 호출가능 장점: 동적으로 호출가능, 추상화를 통해 공통화 가능 단점: 런타임에 동작하여 컴파일시점에 오류 잡기 불가, 가급적 쓰지말기 JDK 동적 프록시 프록시 객체를 런타임에 개발자 대신 생성해줌, 동적 프록시에 원하는 로직 저장 가능 * 인터페이스를 기반으로 작동함, 인터페이스는 필수 1. 프록시에 적용할 로직은 InvocationHandler 인터페이스를 구현해서 작성하기 2. 프록시 만들기 (타겟클래스의 클래스로더, 타겟클래스, 프록시 적용할 로..