AOP 란
관점 지향 프로그램을 뜻하고 Java OOP 확장의 필요한 기능.
흩어진 Aspect, 공통의 관심 사항(Cross-Cutting Concern)으로 모아서 모듈화.
비즈니스 로직을 헤치지 않고 재사용하는 프로그래밍 기법
비즈니스 로직에 핵심적이지 않은 동작들을 프로그램에 추가할 수 있게 함. 이는 관점 지향 프로그램의 기반이 된다.
관심사의 분리: AOP는 시스템에서의 다양한 관심사(예: 로깅, 보안, 트랜잭션 관리)를 별도의 모듈로 분리하여 코드를 더 모듈화하고 관심사 간에 서로 간섭하지 않도록 합니다.
교차 커팅 관심사: AOP는 여러 모듈 또는 객체에 걸쳐서 발생하는 관심사를 한 곳에 집중시켜 중복 코드를 최소화하며 코드의 가독성을 향상시킵니다.
코드 중복 제거: AOP를 사용하면 공통 관심사를 한 번만 구현하고 여러 곳에서 재사용할 수 있으므로 코드 중복을 줄일 수 있습니다.
장점
모듈화 및 유지 보수 개선: AOP를 사용하면 각 관심사를 별도의 모듈로 관리할 수 있으므로 코드의 모듈화 및 유지 보수가 개선됩니다.
중복 코드 감소: 공통 관심사를 한 번만 정의하여 여러 곳에서 재사용할 수 있으므로 중복 코드를 제거할 수 있습니다.
비즈니스 로직 간 규모 확장: AOP를 사용하면 비즈니스 로직과 관심사를 별도로 유지하므로 비즈니스 로직을 더 쉽게 확장하고 변경할 수 있습니다.
단점
복잡성: AOP를 이해하고 구현하는 데 시간이 걸릴 수 있으며, 코드의 복잡성을 높일 수 있음.
오용: AOP를 오용하면 코드의 가독성을 저하시킬 수 있으며, 잘못된 사용으로 인해 유지 보수가 어려워질 수 있음.
성능 영향: AOP를 사용하면 실행 시간에 관심사를 추가하기 때문에 일부 성능 오버헤드가 발생할 수 있음.
관심사 (Concern):
AOP에서 관심사는 애플리케이션의 다양한 측면 또는 관심 분야. 예를 들어, 로깅, 보안, 트랜잭션 관리는 각각 다른 관심사이다.
타깃 (Target):
타깃 객체는 관심사가 적용될 대상 객체. 타깃 객체에는 비즈니스 로직이 포함되며, AOP의 관심사 모듈에서 타깃 객체의 메서드를 대상으로 선택적으로 기능을 삽입할 수 있다.
어드바이스 (Advice):
어드바이스는 관심사 모듈에서 조인 포인트에 삽입되는 코드 블록입니다. 어드바이스는 언제, 어떻게, 무엇을 할지를 정의함. 주요 종류로는 before, after, around 등이 있음.
조인 포인트 (Join Point):
어드바이스가 적용되는 시점. 메서드 호출, 예외 발생, 필드 접근 등과 같이 특수한 실행 지점이 조인 포인트에 해당. ( joinPoint.proceed();
)
포인트컷 (Pointcut): 포인트컷은 어떤 조인 포인트에 어떤 어드바이스를 적용할 것인지를 선택하는 패턴 또는 규칙입니다. 포인트컷은 정규 표현식 또는 특정 메서드 패턴 등을 사용하여 정의할 수 있음.
@Pointcut("execution(* method(..))") - method로 시작하는 모든 메소드에 적용
@Pointcut("@annotation(com.domain.a.test)") - 사용자 지정 어노테이션
애스펙트 (Aspect):
공통 관심사를 모듈화 한 것으로 어디바이스와 포인트컷으로 이루어짐.
위빙 (Weaving):
위빙은 애스펙트를 타깃 객체에 적용하는 프로세스. 이 과정에서 AOP 프레임워크는 포인트컷을 기반으로 어드바이스를 조인 포인트에 삽입. 바이트 코드 및 객체 조작과정
실제 사용은 Spring AOP와 Aspectj가 있음
실행 후
❓ Exception Handler도 AOP 인가?
참고
관점 지향 프로그래밍
자바 AOP의 모든 것(Spring AOP & AspectJ)
https://gr-st-dev.tistory.com/985