Skip to Content
Suffering builds character
아카이브21.spring AopAOP 개요4.AOP 기본 용어

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