AOP 6

[Spring] 스프링 AOP(5) - JoinPoint

JoinPoint 사용 Around Advice를 제외한 나머지 Advice 타입을 구현한 메서드는 JoinPoint 객체를 선택적으로 사용할 수 있다. 주의할 점은 JoinPoint를 파라미터로 사용할 때에는 반드시 첫 번째 파라미터로 지정해야 한다는 것이다. 그렇지 않으면 스프링은 익셉션을 발생시킨다. JoinPoint 인터페이스는 호출되는 대상 객체, 메서드, 전달되는 파라미터 목록에 접근할 수 있는 메서드를 제공하고 있다. org.aspectj.lang.Signature getSignature() : 호출되는 메서드에 대한 정보 Object getTarget() : 대상 객체 Object[] getArgs() : 파라미터 목록 Signature 인터페이스는 호출되는 메서드와 관련된 정보를 제공하기..

Spring 2022.02.19

[Spring] 스프링 AOP(3) - @Aspect 기반

@Aspect 어노테이션을 이용한 AOP @Aspect 어노테이션을 이용한 AOP 구현은 XML 방식과 별로 다르지 않다. Aspect 클래스에 @Aspect 어노테이션만 적용하면 된다. 그리고 Pointcut도 Aspect 클래스에서 정의한다. @Aspect public class Profile { @Pointcut("execution(public * com.mypackage..*(..))") private void profileTarget() { } @Around("profileTarget()") public Object trace(ProceedingJoinPoint joinPoint) throws Throwable { String signatureString = joinPoint.getSignatu..

Spring 2022.02.19

[Spring] 스프링 AOP(2) - XML 기반

XML 기반의 POJO 클래스를 이용한 AOP 구현 aop 네임스페이스를 사용하려면 루트 태그에 aop 네임스페이스에 대한 스키마를 지정해야 한다. ... 먼저 공통 기능을 제공할 Advice 구현 클래스는 다음과 같다. import org.aspectj.lang.ProceedingJoinPoint; public class Profiler { public Object trace(ProceedingJoinPoint joinPoint) throws Throwable { String signatureString = joinPoint.getSignature().toShortString(); System.out.println(signatureString + " 시작"); long start = System.cur..

Spring 2022.02.19

[Spring] 스프링 AOP(1) - 개요

프록시를 이용한 AOP 구현 스프링은 세 가지 방식으로 AOP를 구현할 수 있도록 하고 있다. 어떤 방식을 사용하더라도 내부적으로는 프록시를 이용하여 AOP가 구현되므로 메서드 호출에 대해서만 AOP를 적용할 수 있다. XML 스키마 기반의 POJO 클래스를 이용한 AOP 구현 AspectJ에서 정의한 @Aspect 어노테이션 기반의 AOP 구현 스프링 API를 이용한 AOP 구현 스프링은 Aspect의 적용 대상(target)이 되는 객체에 대한 프록시를 만들어 제공하며, 대상 객체에 직접 접근하지 않고 프록시를 통해 간접적으로 접근하게 된다. 스프링 컨테이너를 초기화하는 과정에서 설정 정보에 지정한 빈 객체에 대한 프록시 객체를 생성하고, 원본 빈 객체 대신에 프록시 객체를 사용하도록 한다. 대상 객..

Spring 2022.02.17

[Spring] AOP의 Weaving 방식

Advice를 Weaving 하는 방식 컴파일 시에 Weaving 클래스 로딩 시에 Weaving 런타임 시에 Weaving 컴파일 시에 Weaving 컴파일 시에 코드를 삽입하는 방법은 AspectJ에서 사용하는 방식이다. 핵심 로직을 구현한 코드를 컴파일할 때, 알맞은 위치에 공통 코드를 삽입하면, 컴파일 결과 AOP가 적용된 클래스 파일이 생성된다. 이 방식에서는 AOP를 도와주는 컴파일러나 IDE를 함께 제공한다. 클래스 로딩 시에 Weaving AOP 라이브러리는 JVM이 클래스를 로딩할 때 클래스 정보를 변경할 수 있는 에이전트를 제공한다. 이 에이전트는 로딩한 클래스의 바이너리 정보를 변경하여 알맞은 위치에 공통 코드를 삽입한 새로운 클래스 바이너리 코드를 사용하도록 한다. 즉 원본 클래스 ..

Spring 2022.02.16

[Spring] AOP의 개념

AOP란? Aspect Oriented Programming(관점 지향 프로그래밍)의 줄임말로서, AOP는 문제를 바라보는 관점을 기준으로 프로그래밍하는 기법을 말한다. AOP는 문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍 함으로써 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 도와준다. 기본적인 개념은 공통 관심 사항을 구현한 코드를 핵심 로직을 구현한 코드 안에 삽입하는 것이다. 그런데 공통 기능을 직접적으로 호출하는 것이 아니라, 핵심 로직을 구현한 코드를 컴파일하거나 컴파일된 클래스를 로딩하거나 로딩한 클래스의 객체를 생성할 때 AOP가 적용되어 핵심 로직 구현 코드 안에 공통 기능이 삽입된다. AOP 라이브러리가 알맞게 삽입해주기 때문에 트랜잭션..

Spring 2022.02.16