Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Java] 다른 객체의 인터페이스를 제공하는 프록시(Proxy) 객체 본문
𐁍 프록시(Proxy)
다른 객체에 대한 인터페이스를 제공하는 객체
해당 객체의 대리자 역할을 수행
🍩 보안제어
: 프록시는 실제 객체에 대한 접근을 제어할 수 있다. 클라이언트는 프록시를 통해 접근하며, 프록시는 요청을 허용/거부한다.
🍩 로깅 및 감시
: 프록시를 사용하여 메서드 호출을 로깅하거나 감시
🍩 지연로딩(Lazy Loading)
: 필요할 때만 데이터를 로드하는 작업 수행, 성능최적화
🍩 캐싱
: 프록시를 사용하여 이전에 수행한 작업의 결과를 캐시하고, 동일한 요청에 대해 캐시된 결과를 반환
🍩 원격프록시(Remote Proxy)
: 원격 서버나 다른 머신에 있는 객체에 대한 접근을 지원하는 프록시 생성
🍩 Dynamic Proxy / Static Proxy
: 런타임에 프록시 객체를 동적으로 생성 / 컴파일에 프록시 객체를 생성
🧩 복잡성 감소, 🧩 결합도 감소
: 클라이언트와 서비스 사이의 인터페이스를 간단하게 만들어
클라이언트는 실제 구현 세부사항을 알 필요없이 프록시를 통해 서비스에 접근할 수 있어
클라이언트와 서비스 사이의 결합도를 낮춘다.
해당 객체의 대리자 역할을 수행
🍩 보안제어
: 프록시는 실제 객체에 대한 접근을 제어할 수 있다. 클라이언트는 프록시를 통해 접근하며, 프록시는 요청을 허용/거부한다.
🍩 로깅 및 감시
: 프록시를 사용하여 메서드 호출을 로깅하거나 감시
🍩 지연로딩(Lazy Loading)
: 필요할 때만 데이터를 로드하는 작업 수행, 성능최적화
🍩 캐싱
: 프록시를 사용하여 이전에 수행한 작업의 결과를 캐시하고, 동일한 요청에 대해 캐시된 결과를 반환
🍩 원격프록시(Remote Proxy)
: 원격 서버나 다른 머신에 있는 객체에 대한 접근을 지원하는 프록시 생성
🍩 Dynamic Proxy / Static Proxy
: 런타임에 프록시 객체를 동적으로 생성 / 컴파일에 프록시 객체를 생성
🧩 복잡성 감소, 🧩 결합도 감소
: 클라이언트와 서비스 사이의 인터페이스를 간단하게 만들어
클라이언트는 실제 구현 세부사항을 알 필요없이 프록시를 통해 서비스에 접근할 수 있어
클라이언트와 서비스 사이의 결합도를 낮춘다.
𖠃 CGLIB (Code Generation Library)
Dynamic Proxy를 생성하기 위한 라이브러리 중 하나다.
자바클래스의 서브클래스를 생성하고, 서브클래스를 통해 기존 클래스의 메서드를 확장한다.
🎯 클래스 확장
🎯 Dynamic Proxy 생성
: 객체의 메서드 호출을 가로채서, 보조 동작을 수행할 수 있다.
🎯 AOP(코드를 모듈화하는 기술) 구현
: AOP 프록시를 생성하여 관심사를 독립적으로 처리할 수 있다.
자바클래스의 서브클래스를 생성하고, 서브클래스를 통해 기존 클래스의 메서드를 확장한다.
🎯 클래스 확장
🎯 Dynamic Proxy 생성
: 객체의 메서드 호출을 가로채서, 보조 동작을 수행할 수 있다.
🎯 AOP(코드를 모듈화하는 기술) 구현
: AOP 프록시를 생성하여 관심사를 독립적으로 처리할 수 있다.
📜 Foo.java
public class Foo {
public void say() {
System.out.println("Foo.say");
}
}
📜 FooMethodInterceptor.java
class FooMethodInterceptor implements MethodInterceptor {
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("Bar.say");
return proxy.invokeSuper(obj, args); //원래 say() 메서드 호출
}
}
🦉 intercept 메서드는 실제 메서드 호출 전과 후에 수행할 작업을 정의
📜 Bar.java
public class Bar {
public static void main(String[] args) throws Exception {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Foo.class); //Foo클래스의 프록시 객체 생성
enhancer.setCallback(new FooMethodInterceptor()); //해당 클래스를 프록시 콜백으로 설정, 콜백을 통해, 메서드 호출을 가로챈다
Foo foo = (Foo)enhancer.create();
foo.say(); //FooMethodIntercepter클래스가 메서드 호출을 가로채서 intercept 메서드로 전달
}
}
🦉 Enhancer 클래스를 통한 프록시 객체 생성
: cglib 라이브러리의 일부로, Java 클래스의 프록시 객체를 동적으로 생성할 수 있다.
🎯 프록시 객체 생성
: 기존클래스의 서브클래스를 생성하여 프록시 객체를 만든다. 프록시 객체는 원본객체를 대신하여 메서드 호출을 가로채고
추가 동작을 수행할 수 있다.
🎯 콜백 설정
: 생성된 프록시 객체는 메서드 호출에 대한 콜백을 설정할 수 있다.
콜백은 메서드 호출을 가로채고, 추가 동작을 수행하는 역할을 한다.
: cglib 라이브러리의 일부로, Java 클래스의 프록시 객체를 동적으로 생성할 수 있다.
🎯 프록시 객체 생성
: 기존클래스의 서브클래스를 생성하여 프록시 객체를 만든다. 프록시 객체는 원본객체를 대신하여 메서드 호출을 가로채고
추가 동작을 수행할 수 있다.
🎯 콜백 설정
: 생성된 프록시 객체는 메서드 호출에 대한 콜백을 설정할 수 있다.
콜백은 메서드 호출을 가로채고, 추가 동작을 수행하는 역할을 한다.
'Backend > 자바' 카테고리의 다른 글
[JAVA8] 함수라는 새로운 값의 형식과 값으로 귀결되는 메서드 참조, 그로 인한 간결성 (+ 람다) (0) | 2023.09.20 |
---|---|
[Java] 값의 존재여부를 나타내는 컨테이너 클래스, Optional (0) | 2023.09.11 |
[Java] 스레드 개수를 제한하는 스레드풀(ThreadPool)의 생성과 작업처리 요청 (0) | 2023.08.14 |
[Java] 보조 역할을 수행하는 데몬(Daemon) 스레드 (0) | 2023.08.13 |
[Java] 스레드 정상 실행 종료, interrupt( ): 리소스 정리 후 실행 종료 (0) | 2023.08.13 |
Comments