JAVA/Spring Framework

스프링 프레임워크 AOP

Tech Signal 2020. 10. 12. 19:22

OP: Oriented Programming

프로그래밍 방법론은 중복을 해결하기 위해 점점 발전해왔다. 

 

AOP(Aspect Oriented Programming) : 관심사의 분리!

개발자가 각자 관심사에만 따라서 개발. 핵심관심사(Core Concern)는 타겟으로, 부가 관심사(Cross-cutting Concern)는 advice로 만든뒤 타겟, 어드바이스를 pointcut을 기준으로 걸러낸다음 joinpoint에서 weave하는 것

부가 관심사: 여러 모듈이 공통적으로 거쳐야하는 작업 (예: 로그, 인증, 보안, 트랜잭션 관리)

장점: OOP에서도 해결되지 않은 중복을 해결 가능


업무 로직이 실행될 때 (-> core concern, target)

언제, 어떤 파라미터로, 얼마만큼의 소요시간이 걸려서 

실행되었는지 로깅해보자. (-> cross-cutting concern, advice)


이 조건에 맞는 객체는 모두 proxy 가 만들어지고, 그안에서 weaving됨.

 

sample-context.xml

이거 true하면 service의 인터페이스 대신 구현체 타입의 서비스도 사용가능.

원리: 중간에 CGLib(Code Generator Library) 동작함. => 인터페이스없이도 프록시 만들 수 있다 . but 부하 많이 걸림

 

around() advice는 이 안에서 타겟을 파라미터로 받아 사용해야한다.  ProceedingJoinPoint 를 파라미터로 받는다.

 

AOP 방법론을 사용하면 advice, target 둘다 서로의 정보를 가지지 않고 결합력도 발생하지 않음.