-
01. AOPSpring Web Project/7. AOP와 트랜잭션 (Transaction) 2021. 1. 28. 12:34반응형
1. AOP(Aspect Oriented Programming) 개념
> '비즈니스 로직은 아니지만, 반드시 해야 하는 작업'
> 횡단 관심사(cross-concern) : 공통으로 사용되지만, 그 자체가 목적은 아니다.
> 대표적인 예 : 보안 처리, 로그 기록, 문제 발생 시를 대비한 이중 백업 등
2. AOP 관련 용어
용어 설명 Aspect 공통 관심사에 대한 추상적인 명칭. 예를 들어 로깅이나 보안, 트랜잭션과 같은 기능 자체에 대한 용어 Advice 실제로 기능을 구현한 객체 Join points 공통 관심사를 적용할 수 있는 대상(작성된 Advice가 활약할 수 있는 위치 의미). Spring AOP에서는 각 객체의 메소드가 이에 해당 Pointcuts 여러 메소드 중 실제 Advice가 적용될 대상 메소드 target 실제 비즈니스 로직을 수행하는 객체 의미. 대상 메소드를 가지는 객체 Proxy Advice가 적용되었을 때 만들어지는 객체 Introduction target에는 없는 새로운 메소드나 인스턴스 변수를 추가하는 기능 Weaving Advice와 target이 결합되어서 프록시 객체를 만드는 과정 > Proxy는 일반적인 의미에서는 직접 호출하는 방식이 아니라 간접적인 호출을 하는 것을 의미. 즉 원래 객체인 target을 호출할 때 외부에서 직접 target을 호출하는 것이 아니라, Advice가 적용된 Proxy 객체를 통해서 호출한다는 것을 의미.
3. Advice 종류
타입 기능 Before Advice target의 메소드 호출 전 적용 After returning target의 메소드 호출 이후 적용 After throwing target의 예외 발생 후 적용 After target의 메소드 호출 후 예외의 발생에 관계없이 적용 Around target의 메소드 호출 이전과 이후 모두 적용 4. 라이브러리 추가
pom.xml 5. root-context.xml 설정
root-context.xml > aop, tx 네임스페이스 추가 root-context.xml > 1) com.app.aop package 인식하도록 설정, 2) <aop:config> 추가 (향후 XML방식으로 AOP 기능 설정 시 사용, 3) <aop:aspectj-autoproxy>는 자동으로 AspectJ 라이브러리를 이용해서 Proxy 객체를 생성해 내는 용도로 사용 6. CommonAdvice
com.app.aop package > CommonAdvice.java > INFO로 시작하는 로그가 기록되지 않았다면 /src/main/resources 내 log4j.xml 설정 확인
log4j.xml > @Aspect : AOP 기능을 하는 클래스 선언에 추가
> @Component : 스프링의 빈으로 인식하기 위한 설정
> 'execution'으로 시작하는 구문 : Pointcut을 지정하는 문법 (AspectJ 언어의 문법)
> 실행 시 전달되는 파라미터를 파악하기 위해 ProceedingJoinPoint 사용 (JoinPoint 하위 인터페이스)
Note) org.aspectj.lang.JoinPoint
주요 메소드 설명 Object[] getArgs() 전달되는 모든 파라미터들을 Object의 배열로 가져온다. String getKind() 해당 Advice의 타입을 알아낸다. Signature getSignature() 실행하는 대상 객체의 메소드에 대한 정보를 알아낼 때 사용 Object getTarget() target 객체를 알아낼 때 사용 Object getThis() Advice를 행하는 객체를 알아낼 때 사용 > ProceedingJoinPoint는 JoinPoint의 모든 메소드를 가지면서도, 직접 target 객체의 메소드를 실행할 수 있는 proceed() 기능이 추가된 형태
반응형'Spring Web Project > 7. AOP와 트랜잭션 (Transaction)' 카테고리의 다른 글
02. Transaction (0) 2021.01.31