| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 개발자
- java
- 일감관리
- It
- spring
- 스프링
- 레드마인
- AOP
- frontend
- 프로젝트관리
- 자바
- PreparedStatement
- Database
- elasticsearch
- backend
- kibana
- redmine
- 데이터베이스
- 엘라스틱서치
- PM
- 백엔드
- 검색
- 이슈관리
- db
- spring aop
- 비전공개발자
- 인덱스
- Si
- 오라클
- 웹프론트
- Today
- Total
리타의 저장소
Spring AOP | JDK Dynamic Proxy & CGLIB Proxy 본문

JDK Dynamic Proxy & CGLIB Proxy
Spring AOP는, 대상 객체가 ‘인터페이스’를 구현했는지 여부에 따라, JDK Dynamic Proxy / CGLIB Proxy 중 하나를 자동 선택하여 AOP를 적용하게 된다.
프록시 방식설명동작 조건사용 기술
| JDK Dynamic Proxy | 인터페이스 기반 | 대상 클래스가 인터페이스를 구현하고 있을 때 | java.lang.reflect.Proxy |
| CGLIB Proxy | 클래스 기반 | 인터페이스가 없을 때 또는 강제로 사용 시 | net.sf.cglib (Spring 내부에 내장) |
자동 선택한다는 것에 대한 내용을 조금 더 보완하자면,
Spring AOP 자체적으로 프록시 생성과 방식 선택의 로직을 내장하고 있다. 즉, 개발자가 모든 걸 일일히 설정하지 않아도, Spring이 상황에 따라 자동으로 프록시를 만들고, 방식 (JDK Dynamic Proxy | CGLIB Proxy) 을 선택한다.
- 어떤 빈에 AOP를 적용할지 판단 (Advisor, Prointcut 등 확인)
- 해당 빈을 프록시 객체로 감쌀지 결정
- 감싼다면, JDK Proxy 인지 CGLIB 로 할지 결정
- 결정된 방식으로 프록시 객체 생성
- ApplicationContext에 등록할 때는 프록시 객체로 등록
여기서 , Spring AOP의 프록시 선택 기준이 바로 “인터페이스”유무에 따라 결정된다고 보면된다.
개발자가 설정이 불가능하냐 ? 그건 또 아니다. 개발자가 충분히 명시적으로 어떤 Proxy를 선택할지 제어할 수도 있다.
→ @EnableAspectJAutoProxy(proxyTargetClass = true) => 무조건 CGLIB Proxy 채택 설정을 통해 관여 가능
Dynamic Proxy (동적 프록시)
프록시 디자인 패턴은 대상 원본 클래스 수만큼 일일히 프록시 클래스를 만들어줘야 한다는 단점이 존재한다. 즉, 프록시 적용 대상 객체가 100개면 프록시 객체도 100개를 만들어줘야 한다는 뜻이다. 이로 인해 코드량이 많아지게 되고 중복이 발생해서 코드의 복잡도가 증가한다는 한계점이 존재한다.
이러한, 프록시 클래스 수동 생성의 한계를 극복하고자 나온 개념이 바로 “동적 프록시 (Dynamic Proxy)” 이다.
Dynamic Proxy의 경우 런타임에 “프록시 클래스”를 자동으로 생성해서, 공통 기능을 동적으로 주입하는 기술이다. JDK Dynamic Proxy, CGLIB Proxy 모두 바로 이 “Dynamic Proxy (동적 프록시)” 기술에 해당된다.

'Dev > Backend' 카테고리의 다른 글
| Spring AOP | CGLIB Proxy (0) | 2025.10.11 |
|---|---|
| Spring AOP | JDK Dynamic Proxy (0) | 2025.10.11 |
| Spring AOP | Spring AOP 주요 개념 요약 (0) | 2025.10.11 |
| Spring AOP | 서비스 호출 전에 로깅, 꼭 AOP에서 해야만 하나? (0) | 2025.10.11 |
| JAVA | JVM이란 무엇인가? (0) | 2025.10.11 |