[스프링] 스프링 AOP
스프링은 AOP(Aspect-Oriented Programming)를 지원하여 애플리케이션의 다양한 모듈에서 공통 기능을 분리적으로 관리할 수 있게 해준다. AOP는 핵심 로직에서 별도의 코드 변화 없이 횡단 관심사(Cross-cutting Concerns)를 구현할 수 있는 방법을 제공한다.
AOP 용어
Aspect(어스펙트)
- 횡단 관심사를 구현한 모듈
Join point(조인 포인트)
- 어스펙트가 적용될 수 있는 지점
Pointcut(포인트컷)
- 어스펙트를 적용할 조인 포인트의 집합을 지정하는 표현식
Advice(어드바이스)
- 횡단 관심사를 실제로 구현한 메서드
Weaving(위빙)
- 어드바이스를 조인 포인트에 적용하는 것
AOP 적용 방법
XML 기반 AOP 설정
<bean id="myAspect" class="com.example.MyAspect" />
<aop:config>
<aop:aspect ref="myAspect">
<aop:pointcut id="businessService" expression="execution(* com.example.BusinessService.*(..))" />
<aop:before pointcut-ref="businessService" method="beforeAdvice" />
</aop:aspect>
</aop:config>
@AspectJ 어노테이션 활용
@Aspect
@Component
public class MyAspect {
@Before("execution(* com.example.BusinessService.*(..))")
public void beforeAdvice() {
// ...
}
}
AOP 적용 예시
예를 들어, 로깅, 트랜잭션 처리, 보안 등의 횡단 관심사를 AOP로 구현할 수 있다. 이를 통해 핵심 비즈니스 로직과 횡단 관심사를 명확하게 분리함으로써 유지보수성을 향상시킬 수 있다.
결론
스프링 AOP를 활용하면 애플리케이션의 여러 모듈에서 중복되는 기능을 효율적으로 관리할 수 있으며, 코드의 가독성과 유지보수성을 향상시킬 수 있다. AOP를 이용하면 핵심 로직에 변화를 주지 않고도 공통 기능을 추가, 제거 또는 변경할 수 있는 장점을 제공한다.
참고문헌