# Spring AOP 개념

→ AOP란 관점 지향 프로그래밍은 흩어진 관심사를 Aspect로 모듈화 할 수 있는 프로그래밍 기법임.

→ AOP 주요개념에는 Aspect, Target, JoinPoint, PointCut

→ Aspect, 흩어진 관심사(CrossCuttingConcern)를 묶어서 모듈화한 것.

→ Aspect에는 1) Advice(해야할 일)와 2) Point Cut(어떻게 할 것인가)이 들어감.

→ Join Point, 메서드 실행 시점임. Advice가 적용될 위치

# Spring AOP Proxy 기반 AOP

→ 가장 흔한 문제(중복코드, 프록시 클래스 작성의 번거로움, 객체 간 관계 복잡도 등)를

→ 해결하기 위한 솔루션을 제공하는 것이 목적임.

→ Proxy Pattern, Real Subject와 AppRunner를 건들이지 않고 성능 테스트 할 수 있음.

⇒ Proxy Pattern의 문제점, 1) 중복코드 발생 2) 객체들 관계의 복잡성 ...

# Spring AOP @AOP

→ @AOP는 1) Execution 2) 어노테이션 3) 빈으로 나눌 수 있음.

→ Execution, 적용하고 싶지 않은 메서드에도 적용될 수 있음.

→ 어노테이션, 개발자가 직접 만들어서 사용 가능. 원하는 메소드에 어노테이션을 해주면 됨.

→ 어떤 메소드가 실행되기 이전에 뭔가 하고 싶을 때

→ 그외 어노테이션들(@Before, @After...)로 해결해줄 수 있음.