[스프링] 스프링 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를 이용하면 핵심 로직에 변화를 주지 않고도 공통 기능을 추가, 제거 또는 변경할 수 있는 장점을 제공한다.


참고문헌