[스프링 AOP 동작 원리] 동적 프록시
본 객체의 수 만큼 프록시 객체를 정의해야하는 문제를 해결해보자.
* 동적 프록시를 이해하기 위해서는 먼저 자바의 리플렉션 기술
을 이해해야 한다
리플렉션 기술을 사용하면 클래스나 메서드의 메타정보를 동적으로 획득하고, 코드도 동적으로 호출할 수 있다.
자바가 기본으로 제공하는 JDK 동적 프록시 기술
이나 CGLIB
같은 프록시 생성 오픈소스 기술을 활용하면 프록시 객체를 동적으로 만들어낼 수 있다.
실무에서 프록시를 적용할때는 인터페이스가 있는 경우가 있고 클래스만 있는 경우가 있다.
JDK 동적 프록시 기술
이나 CGLIB
는 위 경우에 따라 동적 프록시를 생성하는 오픈소스 기술이다.
JDK 동적 프록시
동적 프록시 기술을 사용하면 개발자가 직접 프록시 클래스를 만들지 않아도 된다.
이름 그대로 프록시 객체를 동적으로 런타임에 개발자 대신 만들어준다. 그리고 동적 프록시에 원하는 실행 로직을 지정할 수 있다.
JDK 동적 프록시는 인터페이스를 기반으로 프록시를 동적으로 만들어준다. 따라서 인터페이스가 필수이다.
CGLIB
CGLIB는 바이트코드를 조작해서 동적으로 클래스를 생성하는 기술을 제공하는 라이브러리이다.
CGLIB를 사용하면 인터페이스가 없어도 구체 클래스만 가지고 동적 프록시를 만들어낼 수 있다.
한계
대상 클래스가 100개라면 프록시 클래스도 100개를 만들어야했던 문제를
동적으로 프록시 기술을 사용
함으로써, 프록시 클래스 1개만 정의하고 동적으로 대상을 적용해서 그때그때 프록시를 만들어 사용할수있게되었다.
JDK 동적 프록시는 인터페이스가 있는경우 사용하는 기술이고 CGLIB는 구체 클래스만 있는경우 사용
하는 기술이다.
개발자가 일일이 경우에 맞게 JDK 동적 프록시나 CGLIB를 구분해서 사용해야할까?
스프링이 제공하는 프록시 팩토리
를 사용하면 스프링이 알아서 JDK 동적 프록시나 CGLIB를 사용해 프록시를 만들어 준다.
'개발자 준비 > Spring AOP' 카테고리의 다른 글
[Spring AOP 이론] 스프링 AOP! (0) | 2022.02.10 |
---|---|
[스프링 AOP 동작 원리] 빈 후처리기(feat.스프링이 제공하는 빈 후처리기) (0) | 2022.02.10 |
[스프링 AOP 동작 원리] 프록시 팩토리 (0) | 2022.02.10 |
[스프링 AOP 동작 원리] 프록시 (feat.완전한 서브로직 분리) (0) | 2022.02.10 |