[디자인 패턴] 프록시 패턴(Proxy Pattern)

 

📌프록시(Proxy)란?


프록시(Proxy)란 우리말로 대리자, 대변인 이라는 뜻이다. 뜻에서도 유추할 수 있듯이 무언가를 대신해주는 구조의 패턴이다. 즉, 어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조하는 것이 아니라, 해당 객체를 대행(proxy)하는 객체를 통해 대상 객체에 접근하는 방식이다. 이 방법을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있기 때문에 실제 객체가 필요한 시점까지 객체의 생성을 미룰 수 있다.

 

 

아래 링크를 참고하면 프록시(Proxy)를 이해하는데 더 도움될 것이다.

https://yeo-computerclass.tistory.com/213

 

HTTP 프록시란?

📌프록시 서버(Proxy Server)란? 프록시 서버란 클라이언트와 서버 사이에서 통신을 중계해 주는 컴퓨터나 프로그램을 말한다. 프록시 서버의 주된 용도 중 하나는 빠른 전송을 위하여 서버의 응

yeo-computerclass.tistory.com

 

 

 

 

Proxy 패턴 클래스 다이어 그램

출처-https://limkydev.tistory.com/79

 

 

 

프록시 패턴(Proxy Pattern)은 실제 서비스 메소드의 반환값에 영향을 주지 않는다.

오직 제어의 흐름을 변경하거나 별도의 로직 처리하기 위해 사용한다.제어 흐름을 조정하기 위한 목적으로 중간에 대리자(Proxy)를 두는 패턴이다.

 

 

 

 

 

 

 

 

AOP 프록시

 

AOP는 모든 객체에 공통으로 적용되는 기능들을 구현하는 개발 방법을 말한다. 

여러 메소드들의 실행이 걸리는 시간이나 트랜잭션 적용 등 공통으로 적용하고 싶을 때  사용된다.

 

 

위 코드에서는 실제 타겟인 realSubject의 action() 메소드가 실행되기 전 후에 preProcess() 메소드와 postProcess() 메소드가 실행됨을 알 수 있다.

  멀티쓰레드 안정성 제공 action() 메서드 걸린 시간
preProcess() mutex.lock() startTime = System.currentTimeMillis()
action() action() action()
postProcess() mutex.unlock() endTime = System.currentTimeMillis()

 

이렇게 실제 객체는 그대로 두고 모든 객체들이 공통으로 수행해야 할 일들을 프록시 객체를 통해서 구현할 수 있다.

(프록시로 AOP를 구현할 수 있다는 것을 보여준 것이다.  Spring 프레임워크에서는 reflection을 이용하여 AOP를 구현한다.)