💡 관점 지향 프로그래밍(Aspect Oriented Programming) 중복되는 공통 코드를 분리하고 코드 실행 전이나 후의 시점에 해당 코드를 삽입함으로써 소스 코드의 중복을 줄이고, 필요할 때마다 가져다 쓸 수 있게 객체화하는 기술 객체지향 프로그래밍(OOP, Object Oriented Programming)을 보완하기 위해 사용
📌 JoinPoint 들 중에서 Point Cut 을 선정해서 Advice를 적용!
횡단 관점 : 핵심 비즈니스 로직(핵심 관점)이 있고, 애플리케이션 전체를 관통하는 부가 기능 로직이 있다.
cf. 횡단 관점 애플리케이션 로직은 핵심기능과 부가기능으로 나뉜다. - 핵심 기능 : 해당 객체가 제공하는 고유의 기능 - 부가 기능 : 핵심 기능을 보조하기 위해 제공되는 기능(ex. 로그 추적 기능, 트랜잭션 기능)
일반적으로 기존 프로젝트에 부가 기능을 추가하게 되면 하나의 클래스가 아닌 여러 클래스에 부가 기능을 추가하게 된다. 예를 들면, 프로젝트의 모든 클래스에 로그 기능을 추가 한다면 하나의 부가 기능(로그 추적)을 여러 곳에 동일하게 사용 → 이러한 부가 기능을 횡단 관점이라 한다.
2. AOP 핵심 용어
Aspect
공통 기능
핵심 비즈니스 로직과는 별도로 수행되는 횡단 관심사
어느 지점(join point, point cut), 어떤 기능(advice)
Advice
Aspect의 기능 자체
Join point
Advice가 적용될 수 있는 위치(어느 지점들)
Pointcut
Join point 중에서 Advice가 적용될 가능성이 있는 부분을 선별한 것
Weaving
Advice 를 핵심 비즈니스 로직에 적용하는 것
3. Advice의 종류
종류
설명
Before
대상 메소드가 실행되기 이전에 실행되는 어드바이스
After-returning
대상 메소드가 정상적으로 실행된 이후에 실행되는 어드바이스
After-throwing
예외가 발생했을 때 실행되는 어드바이스
After
대상 메소드가 실행된 이후에(정상, 예외 관계없이) 실행되는 어드바이스
Around
대상 메소드 실행 전/후에 적용되는 어드바이스
4. Spring AOP
프록시 기반의 AOP 구현체 : 대상 객체(Target Object)에 대한 프록시를 만들어 제공 / 타겟을 감싸는 프록시는 서버 Runtime 시에 생성된다.
모든 Proxy 기술의 핵심은 Target Object를 건드리지 않고 추가적으로 기능을 붙이는 것이다.
메서드 조인 포인트만 제공 : 핵심기능(대상 객체)의 메소드가 호출되는 런타임 시점에만 부가기능(어드바이스)을 적용할 수 있다.