4.AOP 기본 용어
AOP에서 사용되는 기본 용어에 대한 간단한 정리
1. Aspect, 관점
AOP에서 Aspect, 관점이란 보다 구체적으로 아래와 같은 의미로 해석될 수 있음
“어떤 특정 관심사를 바라보는 관점”
이전 시나리오 맥락에서는 로깅 처리가 하나의 관심사이자 관점이라고 볼 수 있음
→ 왜냐하면 로깅 처리 로직이 모든 서비스 메서드에 분산되어 작성되어 있고, 이는 본질적으로 중복이 발생되어 있다고 볼 수 있기 때문
따라서 로깅 처리 로직은 이러한 문제를 발생시키는 하나의 원인이 될 수 있고,
이는 어떤 문제를 바라보는 개발자만의 하나의 관점, Aspect라고 볼 수도 있음
이러한 Aspect를 작성하기 위해서는 의존성 주입(Dependency Injection)에서 빈 설정 정보를 위해 작성했던 것처럼, .xml 파일의 형태로 구성할 수도 있고, 별도의 Java 클래스의 형태로 작성할 수도 있음
xml 파일 기반 작성 방식
bean-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="firstAspect" class="dev.syntax.aop.FirstAspect" />
<bean id="userController" class="dev.syntax.aop.UserController" />
<aop:aspectj-autoproxy />
</beans>java 파일 기반 작성 방식
LoggingAspect.java
@Aspect
@Component
@Slf4j
public class LoggingAspect {
@Before(value = "execution(* dev.syntax.aop.service.*ServiceImpl.*(..))")
public void logBefore(JoinPoint joinPoint) {
log.debug(joinpoint.getTarget()...);
}
@After(value = "execution(* dev.syntax.aop.service.*ServiceImpl.*(..))")
public void logAfter(JoinPoint joinPoint) {
log.debug(joinpoint.getTarget()...);
}
}이러한 Aspect는 Advice와 PointCut, JoinPoint 등으로 구성됨
Last updated on