AOP(Aspect Oriented Programming)

2022. 3. 2. 21:33Spring 기초

AOP?

→  공통 관심사항을 분리하는 방식

 

공통 관심사항을 추출할 수 있는 이유에는 proxy(대리자)가 있다. 프록시는 런타임 위빙(Runtime Weaving)을 수행한다.

런타임 위빙이란, Runtime때 실제 객체를 가상의 객체로 적용시키는 과정이다.

 

Spring에서는 이 런타임 위빙을 1) JDK Dynamic Proxy 2) CGlib Proxy 두가지 방법으로 구현한다.
두번째 방법인 CGlib(Code Generator Library), 이미 스프링이나 하이버네이트에 내장되어있다.

DI로 주입받은 객체를 출력해보면 CGLIB이 생성한 가짜 객체가 등장함을 알 수 있다.

즉, memberService가 아닌 다른 객체가 Injection 되어있다.

 

 

타겟을 감싸는 프록시가 런타임에 생성되면, 프록시가 타겟 객체에 대한 호출을 가로챈다(Intercept).

호출을 가로챈 다음, 타겟의 핵심 기능이나 메서드를 호출하기 전 or 후로 공통 관심사항을 적용한다

동작 방식이 Filter, Interceptor와 유사한 부분이 있어 추후에 따로 포스팅 해야겠다.

 

CGlib의 제약사항으로는 final 객체와 접근제어자가 private인 메서드는 적용할 수 없다는 점이 있다. CGlib Target을 상속받아 프록시를 구현하기 때문이다.

 

'Spring 기초' 카테고리의 다른 글

REST API와 Ajax(1)  (0) 2022.03.27
RedirectAttributes  (0) 2022.03.26
Spring JDBC Template  (0) 2022.02.25
Spring 통합 테스트  (0) 2022.02.25
스프링 웹 개발 방식 - 정적컨텐츠, MVC 패턴, API  (0) 2022.02.16