SpringBoot 입문(6) - AOP (Aspect Oriented Programming)
AOP
- Aspect Oriented Programming의 약자 (관점 지향 프로그래밍)
- 관심 사항 분리
1) 공통 관심 사항(cross-cutting concern) : 공통으로 필요한 사항
2) 핵심 관심 사항(core concern) : 실제 중요 비즈니스 로직
[ 사용 상황 ]
- 만약 내가 만든 모든 메소드의 실행시간을 알아야 한다면?
1) 모든 메소드에 각각 시간 측정 로직 추가 --> 비효율적!!
2) AOP를 활용한 공통 적용 --> 매우 효율적!
[ 사용 예시 ]
- 모든 메소드에 적용하는 것 처럼 Target 지정 가능!
@Around("execution(* hello.hellospring..*(..))")
return joinPoint.proceed();
: 마치 미들웨어에서 next()하듯 넘겨준다.
- 실제로 사용하게 되면 지정된 target은
가상으로 하나 만들어진 후 가상의 file을 거치게 됨
- 실행 결과
[ 원리 ]
- Proxy(프록시)를 통해서 공통 관심 사항을 수행한 후 핵심 관심 사항을 수행하게 하는 원리
- 가상의 파일을 하나 만들어 공통 사항을 수행하게 하는 것!
- 만약 바로 DI(의존성 주입)가 없었다면 해당 기능은 구현이 불가능했을 것임!!