본문 바로가기
이론/디자인패턴

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

by 6161990 2021. 6. 4.

📌 Proxy Pattern

Proxy는 대리인이라는 뜻으로써, 뭔가를 대신해서 처리하는 의미이다. 


Proxy Pattern 에서는 Proxy class를 통해서 대신 전달하는 형태 로 설계되며, 

실제 Client는 Proxy로 부터 결과를 받는다.

 

 

Proxy Pattern을 Cache 기능으로 활용한 예를 살펴보자.

IBrowser 인터페이스

 

 IBrowser 인터페이스를 구현한 Browser 클래스와 Html 클래스

 

Browser로만 run 해본 Main 클래스 결과

 

Proxy Pattern 을 거치치 않으면

브라우저에서 요청을 할 때마다 새롭게 로딩을 해야한다. 

이때 로딩해온 값을 저장 해 놓으면 좋은데, 그 역할을 Proxy 로 해줄 수 있다. 

 

 

Proxy 역할을 하는 BrowserProxy 클래스

 

Main 클래스에서 BrowserProxy 클래스로 불러온 browser

 

 

한번 로딩해온 html을 저장해두고 사용한다.

 

BrowserProxy loading html from : www.naver.com
BrowserProxy use cache : www.naver.com

 

 



스프링에서는 AOP가 이 패턴을 따르고 있다.

IBrowser인터페이스를 구현한 AopBrowser

 

AOP는 특정한 메소드가 있으면 이 메소드에 실행시간이라던지, 

특정한 패키지의 특정한 메소드의 실행시간 전후로 기능을 넣을 수 있어서 메소드를 측정할 때 쓰인다.

 


show라는 메소드가 걸린 시간이 처음엔 1.5(1513)초
다음에는 cache가 걸려있기 때문에  0 초가 걸리는 것을 알 수가 있다.
 이를 통해 cache가 잘 돌아가는 것을 확인할 수 있다.

 

 


📢 AOP패턴은 프록시 패턴을 이용하고있고 특정한 메소드, 특정한 기능의 앞 뒤로 내가 원하는 기능, 

앞뒤로 넘어가는 아규먼트에 대해 조작도 할 수 있으며, 흩어져있는 공통된 기능을 한꺼번에 묶어 줄 수도 있다. 


📢 HTTP클라이언트와 통신을 한다고하면, HTTP클라이언트의 코드가 흩어져있거나, 

REST클라이언트 서비스라던지가 뭉쳐있다고하면 거기에 있는 메소드의 시간 측정한다던지 , 

데이터베이스에 INSERT한다던지, 꺼내와서 작업하는 TRANSACTION 쪽에다가도 시간관련 AOP를 넣어서

현재 시스템이 오래걸리는 위치가 어디인지,

어떤 메소드가 오래걸려서 해당 서비스에 로딩이 걸리는지 파악할 수 있다.