Next-Squad / Interview-Question

주니어 백엔드 개발자 면접 시에 물어볼 수 있는 질문에 대해서 같이 공부하고, 공유하고자 합니다.
162 stars 11 forks source link

[Spring] 14. Proxy에 대해서 설명해주세요. #25

Open jinan159 opened 2 years ago

jinan159 commented 2 years ago

Proxy에 대해서 설명해주세요.

CGLIB, JDK Proxy

키워드

ex) GCLIB, Proxy, Dynamic Proxy

jinan159 commented 2 years ago

1. Proxy 란?

Proxy 란 특정 대상을 wrapping 해서, 해당 클래스 대신에 작업을 수행하는 클래스 입니다. 기존 기능에 추가적인 기능을 제공하거나 흐름을 제어하는 등 다양하게 활용될 수 있습니다.

2. JDK Proxy?

Proxy 를 런타임에 동적으로 생성하는것을 Dynamic Proxy 라고 하는데요. Java 에서는 Dynamic Proxy 를 지원하기 위해 리플렉션 패키지에서 Proxy 클래스를 제공합니다. 하지만, interface 대상으로만 Proxy 를 생성할 수 있다는 단점이 있습니다.

3. CGlib

CGlib 은 JDK Proxy 의 단점을 보완하기 위해, 상속을 이용하여 Proxy 를 생성합니다. 하지만 final class 이거나, 생성자가 하나뿐인데 private 인 경우 상속이 불가하기 때문에 Proxy 를 생성할 수 없다는 단점이 있습니다.

public final class NextSquad {
}

public class NextSquad {
    private NextSquad() { }
}

3.1 Spring AOP

AOP, 관점 지향 에 대한 내용은 Proxy 이슈의 내용을 벗어나는 범위이므로 다루지 않겠습니다.

Spring AOP 에서 특정 객체를 관점 지향적 객체(Proxy)로 만드는 것을 Weaving 이라고 합니다. 그리고 Spring AOP 는 위 두가지 방법(JDK Proxy, CGlib) 을 이용하여 Runtime Weaving 을 제공합니다.

Spring 은 이 두가지 방법을 적절히 활용하여 사용합니다. interface 대상으로는 JDK Proxy 를 사용하고, interface 가 아닌 대상에 대해서는 CGlib 을 이용하여 proxy 를 생성합니다.

4. Dynamic Proxy 활용 예

참고자료