스프링 AOP는 프록시 기반의 AOP 구현체로 스프링 Bean 에만 AOP적용이 가능하다.
Aop란?
Aspect Oriented Programming > 관점 지향 프로그래밍
관점 지향 프로그래밍 :
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 각각 모듈화 하겠다
프록시 패턴이란?
프록시 객체는 객체를 감싸고 있는 객체로 감싼 객채와 타입이 동일하다
프록시 객체가 객체를 감싸서 client의 요청을 처리하게 하는 패턴이다.
접근 제어, 부가 기능 추가 등의 이유로 사용한다.
원래 객체와 같은 interface를 구현해줘야 하고 객체를 주입받아 interface의 메소드들을 위임받아 사용하고 코드를 추가 해 준다.
이렇게 해주면 원래 코드에 손을 쓰지 않고도 기능을 추가 할 수는 있지만 , 프록시 객체에 중복코드가 발생할 수 있고 다른 클래스에서도 동일한 기능을 사용하기 위해 매번 코딩을 해줘야하는 부분에서 효율적이지 못하다.
이를 해결해주는게 스프링 AOP로 런타임 시 동적으로 프록시 객체를 만들어 준다.
Spring AOP
AOP의 개념은 핵심기능에 부가기능을 넣는 것인데
스프링 실제 동작에서 AOP 수행은 프록시의 개념이 들어감
AOP적용 전에는 DispatcherServlet 에서 Controller로 요청이 넘어갔지만
AOP적용 후에는 요청을 중간에 낚아 챈다
AOP는 DispatcherServlet와 Controller 사이에서 실행 됨
Spring은 프록시 타깃 객체에 인터페이스가 있다면 그 인터페이스를 구현한 JDK 다이내믹 프록시 방식으로 객체를 생성하고, 인터페이스가 없다면 GGLIB을 이용한 클래스 프록시를 만든다
1. 인터페이스를 구현하는지 확인
2. 인터페이스를 구현하고 있으면 JDK 다이내믹 프록시 방식으로 객체 생성
3. 인터페이스를 구현하지 않으면 GGLib 방식으로 객체를 생성
GGLIB - 코드 생성 라이브러리
https://linuxism.ustd.ip.or.kr/1012
java - CGLIB(Code Generator Library) 코드 생성 라이브러리
CGLIB를 이용한 프록시 객체 만들기Java 2006/02/03 04:57CGLIB를 이용하여 고성능의 프록시 객체를 만드는 방법에 대해서 살펴본다.CGLIB 소개 및 설치CGLIB는 코드 생성 라이브러리로서(Code Generator Library)
linuxism.ustd.ip.or.kr
하지만 JDK 동적 프록시 방식은 다음과 같은 두 가지 한계점을 가진다
- 프록시를 적용하기 위해서는 반드시 인터페이스를 생성해야 됨
- 구체 클래스로는 빈을 주입받을 수 없고, 반드시 인터페이스로만 주입 받아야함
참고 자료
'Spring' 카테고리의 다른 글
Spring) DI(의존성 주입)의 3가지 방식 (0) | 2023.02.22 |
---|---|
Spring) Swagger? 너 뭔데? 어떻게 쓰는데? (0) | 2022.12.28 |
Spring) 프록시 , 즉시로딩 지연로딩 (0) | 2022.12.09 |
Spring) 연관관계 매핑 (1) | 2022.12.08 |
Spring) 인증, 인가 / 스프링 시큐리티 (1) | 2022.12.08 |