TIL

스프링 AOP

핵심 기능과 부과 기능

애플리케이션의 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다.

횡단 관심사

img.png

소프트웨어 개발에서 변경 지점은 하나가 될 수 있도록 잘 모듈화 되어야 한다. 그런데 부가 기능처럼 특정 로직을 애플리케이션 전반에 적용하는 문제는 일반적인 OOP로는 해결이 어렵다.

AOP - 애스펙트

핵심 기능과 부가 기능을 분리

AspectJ 프레임워크

AOP의 대표적인 구현으로 AspectJ 프레임워크가 있다. 물론 스프링도 AOP를 지원하지만 대부분 AspectJ 문법을 차용하고, AspectJ가 제공하는 기능의 일부만 제공한다.

AOP 적용 방식

컴파일 시점

클래스 로딩 시점

런타임 시점(프록시)

AOP 적용 위치

스프링 AOP 보다 더 기능이 많은 AspectJ를 직접 사용하는 것이 좋지 않을까? AspectJ는 공부할 내용도 많고 자바 관련 설정도 복잡하지만 스프링 AOP는 별도의 추가 자바 설정 없이 스프링만 있으면 AOP를 적용할 수 있다. 스프링이 제공하는 AOP 기능만 사용해도 대부분의 문제를 해결할 수 있다.

AOP 용어 정리