AOP(Aspect Oriented Programming)
2022. 3. 2. 21:33ㆍSpring 기초
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 |