> For the complete documentation index, see [llms.txt](https://wannaqueen.gitbook.io/spring5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wannaqueen.gitbook.io/spring5/spring-5.0/5-spring-aspect/5.3-aop.md).

# 5.3 AOP 프록시  by ys

Spring AOP는 기본적으로 AOP 프록시 용 표준 JDK 동적 프록시를 사용합니다. 이렇게하면 모든 인터페이스 (또는 인터페이스 세트)가 프록시 될 수 있습니다.

{% hint style="info" %}
프록시란

\[대신] 이라는 의미를 가지고 있습니다. 프로토콜에 있어서 **대리 응답** 등에서 사용하는 개념이라고 할 수 있겠습니다. 보안상의 문제로 직접 통신을 주고 받을 수 없는 사이에서 프록시를 이용해서 중계하는 개념이라고 볼 수 있겠습니다. 이렇게 중계를 기능하는 것을 우리는 \[프록시 서버]라고 부릅니다.

프록시 참조 : <https://brownbears.tistory.com/191>
{% endhint %}

![](/files/-LbEcodeKOZaO-lULH0-)

Spring AOP는 또한 CGLIB 프록시를 사용할 수있다. 이것은 인터페이스가 아닌 클래스를 프록시하는 데 필요합니다. 기본적으로 Business Object가 인터페이스를 구현하지 않으면 CGLIB가 사용됩니다. 클래스가 아닌 인터페이스로 프로그래밍하는 것이 좋으므로 비즈니스 클래스는 일반적으로 하나 이상의 비즈니스 인터페이스를 구현합니다. 인터페이스 상에 선언되지 않은 메소드 나 프록시 된 객체를 메소드에 구체적인 타입으로 전달할 필요가있는 메소드에 조언 할 필요가있는 (희망적으로 드문 경우) [CGLIB](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-proxying) 를 [강제로 사용할](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-proxying) 수 있습니다.

{% hint style="info" %}
**CGLIB는 코드 생성 라이브러리로서(Code Generator Library) 런타임에 동적으로 자바 클래스의 프록시를 생성해주는 기능을 제공**한다. CGLIB를 사용하면 매우 쉽게 프록시 객체를 생성할 수 있으며, 성능 또한 우수하다. 더불어, 인터페이스가 아닌 클래스에 대해서 동적 프록시를 생성할 수 있기 때문에 다양한 프로젝트에서 널리 사용되고 있다. 예를 들어, Hibernate는 자바빈 객체에 대한 프록시를 생성할 때 CGLIB를 사용하며, Spring은 프록시 기반의 AOP를 구현할 때 CGLIB를 사용하고 있다.

: <https://javacan.tistory.com/entry/114>
{% endhint %}

**Spring AOP가 프록시 기반**이라는 사실을 이해하는 것이 중요하다. 이 구현 세부 사항이 실제로 무엇을 의미하는지에 대한 철저한 조사는 [AOP 프록시 이해를](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#aop-understanding-aop-proxies) 참조하십시오 .

#### &#x20; <a href="#aop-ataspectj" id="aop-ataspectj"></a>
