BackEnd263 [Spring] 스프링 AOP - 포인트컷 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. @target, @within " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 정의 @target : 실행 객체의 클래스에 주어진 타입의 애노테이션이 있다면 조인 포인트로 인식 @within : 주어진 애노테이션이 있는 타입 내 조인 포인트 다음과 같이 사용한다. @target(hello.aop.member.annotation.ClassAop) @within(hello.aop.member.annotation.ClassAop) 타겟 class에 붙어있는 @ClassAop 애너테이션으로 조인 포인트를 판별한다. @ClassAop class Target{}.. BackEnd/Spring 2022. 8. 20. [Spring] 스프링 AOP - 포인트컷 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 애스펙트J는 포인트컷을 편리하게 표현하기 위한 특별한 표현식을 제공한다. @Pointcut("execution(* hello.aop.order..*(..))") 포인트컷 표현식은 AspectJ pointcut expression 즉 애스펙트J가 제공하는 포인트컷 표현식을 줄여서 말하는 것이다. ▶ 포인트컷 지시자 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. 줄여서 PCD라 한다. 1. execution - 1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 execution의 문법은 다음과 같다.. BackEnd/Spring 2022. 8. 19. [Spring] 스프링 AOP 구현 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 스프링 AOP 구현1 - 시작 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 시간에는 @Aspect 를 사용해서 가장 단순한 AOP를 구현해보자. ▶ AspectV1 @Slf4j @Aspect public class AspectV1 { @Around("execution(* hello.aop.order..*(..))") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable { log.info("[log] {}", joinPoint.getSignature()); //join poi.. BackEnd/Spring 2022. 8. 18. [Spring] 스프링 AOP 개념 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. AOP 소개 - 핵심 기능과 부가 기능 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 1) 핵심 기능 해당 객체가 제공하는 고유의 기능이다. 예를 들어서 OrderService 의 핵심 기능은 주문 로직이다. 2) 부가 기능 핵심 기능을 보조하기 위해 제공되는 기능이다. 예를 들어서 로그 추적 로직, 트랜잭션 기능이 있다. 이러한 부가 기능은 단독으로 사용되지 않고, 핵심 기능과 함께 사용된다. 주문 로직을 실행하기 직전에 로그 추적 기능을 사용해야 하면, 핵심 기능인 주문 로직과 .. BackEnd/Spring 2022. 8. 17. [Spring] @Aspect AOP 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. @Aspect 프록시 - 적용 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다. ▶ 참고 @Aspect 는 관점 지향 프로그래밍(AOP)을 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션이다. 스프링은 이것을 차용해서 프록시를 통한 AOP를 가능하게 한다. AOP와 AspectJ 관련된 자세한 내용은 다음에 설명한다. 지금은 프록시에 초점을 맞추자. 우선 이 애노테이션을 사용해서 스프링이 편리하게 프록시를 만들어준다고 .. BackEnd/Spring 2022. 8. 16. [Spring] 빈 후처리기 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 5. 스프링이 제공하는 빈 후처리기1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링이 제공하는 자동 후처리기를 사용하기 위해서는, 다음 의존성을 꼭 추가해야줘야 한다. implementation 'org.springframework.boot:spring-boot-starter-aop' 라이브러리를 추가하면 aspectjweaver 라는 aspectJ 관련 라이브러리를 등록하고, 스프링 부트가 AOP 관련 클래스를 자동으로 스프링 빈에 등록한다. ▶ (AnnotationAwareAspectJ)AutoProxyCreator 스프링 부트 자동 설정으로 .. BackEnd/Spring 2022. 8. 16. [Spring] 빈 후처리기 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 빈 후처리기 - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 @Bean 이나 컴포넌트 스캔으로 스프링 빈을 등록하면, 스프링은 대상 객체를 생성하고 스프링 컨테이너 내부의 빈 저장소에 등록한다. 그리고 이후에는 스프링 컨테이너를 통해 등록한 스프링 빈을 조회해서 사용하면 된다. ▶ 빈 후처리기 - BeanPostProcessor 스프링이 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 직전에 조작하고 싶다면 빈 후처리기를 사용하면 된다. 1) 생성: 스프링 빈 대상이 되는 객체를 생성한다. (@Bean , 컴포넌트 스캔 모두 .. BackEnd/Spring 2022. 8. 15. [Spring] 스프링이 지원하는 프록시 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 이번 글 에서는 지난번 ProxyFactory에 이어서 포인트컷, 어드바이스, 어드바이저 에 대하여 학습해보자! 4. 포인트컷, 어드바이스, 어드바이저 - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 스프링 AOP를 공부했다면 다음과 같은 단어를 들어보았을 것이다. 포인트컷( Pointcut ) 어디에 부가 기능을 적용할지, 말지를 판단하는 필터링 로직이다. 주로 클래스와 메서드 이름으로 필터링 한다. 이름 그대로 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것이다. 어드바이스( Advice ) 이전에 본 것 처.. BackEnd/Spring 2022. 8. 14. [Spring] 스프링이 지원하는 프록시 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 이번 시간에는 프록시 팩토리 에 대하여 학습해보자! 1. 프록시 팩토리 - 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 몇가지 질문을 통해 프록시 팩토리의 특징에 대하여 알아보자! 1-1) 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB을 적용하려면 어떻게 해야할까? 스프링은 동적 프록시를 통합해서 편리하게 만들어주는 프록시 팩토리( ProxyFactory )라는 기능을 제공한다. 이전에는 상황에 따라서 JDK 동적 프록시를 사용하거나, 또는 CGLIB를 사용해야 했다. 하지만 Spring의 프록시 팩토리.. BackEnd/Spring 2022. 8. 14. [Spring] 동적 프록시 기술 - JDK, CGLIB 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 리플랙션 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 지난번 글 에서 Proxy의 단점으로 대상 클래스 수 만큼 로그 추적을 위한 프록시 클래스를 만들어야 한다는 점을 언급했었다. 다행이 Java는 JDK 동적 프록시 기술이나 CGLIB 같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있다. 프록시를 적용할 코드를 하나만 만들어두고 동적 프록시 기술을 사용해서 프록시 객체를 찍어내면 된다! JDK 동적 프록시의 이해를 위해서는 우선 리플렉션에 대하여 학습해야한다. 리플렉션 기술을 사용하면 클래스나 메서드의 메타정보를 .. BackEnd/Spring 2022. 8. 13. [Spring] 인터페이스, 구체 클래스 기반 프록시 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 인터페이스 기반 프록시 - 적용 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 프록시를 사용하면 기존 코드를 전혀 수정하지 않고 로그 추적 기능을 도입할 수 있다! 로그 추적 기능을 도입해보자! 잠시 V1 버전의 클래스 의존 관계를 살펴보면 다음과 같다. Controller , Service , Repository 각각 인터페이스에 맞는 프록시 구현체를 추가하면, 의존 관계는 다음과 같다. Repository의 의존 관계 그림 부분은 생략하였다. 런타임 의존 관계는 다음과 같아진다. 그리고 애플리케이션 실행 시점에 프록시를 사용하도록 의존 관계를 설.. BackEnd/Spring 2022. 8. 10. [Spring] 데코레이터 패턴 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 데코레이터 패턴 - 예제 코드1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 간단하게 예제 코드를 만들어보자! 이전 Proxy 패턴과 거의 유사하다. 또한 코드가 매우 간단하여 설명은 생략한다. ▶ Component public interface Component { String operation(); } ▶ RealComponent @Slf4j public class RealComponent implements Component { @Override public String operation() { log.info("RealComponent 실행.. BackEnd/Spring 2022. 8. 10. 이전 1 ··· 3 4 5 6 7 8 9 ··· 22 다음