Proxy는 대리인 이라는 뜻으로 , 뭔가를 대신해서 처리하는 것을 말한다. proxy Class를 통해 대신 전달하는 형태로 설계되며, 실제 client는 proxy로 부터 결과를 받는다. Cache의 기능 구현에 활용이 가능 하며 ,Spring에서는 AOP가 proxy pattern 으로 구현되어 있다 .
SOLID 중 개방폐쇄 원칙(OCP)과 의존 역전 원칙(DIP)를 따른다.
간단하게 proxy pattern으로 Cache를 구현해 보면 아래와 같다.
1. cache
- cache는 데이터를 디스크가 아닌 메모리에 보관하여 반복될 경우 메모리에서 불러와 사용하기 때문에 캐시가 적용되면 성능 및 처리속도가 월등히 빠르다 정도로만 일단 알아두자 .
브라우저가 있고 브라우저는 IBrower 인터페이스를 구현하며 url을 통해 html을 반환 show라는 메서드를 overriding
한다 . 코드는 아래와 같다.
package com.company.proxy.cache;
import com.company.proxy.IBrowser;
public class Browser implements IBrowser {
private String url;
public Browser(String url) {
this.url = url;
}
@Override
public Html show() {
System.out.println("browser loading html from : " + url);
return new Html(url);
}
}
만약 아래와 같이 같은 url에 요청을 여러번 할 경우 cache 를 구현하지 않는다면 요청할 때마다 매번 같은 html을 로딩해야한다.
Browser browser = new Browser("www.naver.com");
//똑같은 url을 통해 똑같은 html을 반복해서 보여주고 있다.
// browser.show();
// browser.show();
// browser.show();
// browser.show();
// browser.show();
결과
BrowserProxy loading html from : www.naver.com
BrowserProxy loading html from : www.naver.com
BrowserProxy loading html from : www.naver.com
BrowserProxy loading html from : www.naver.com
BrowserProxy loading html from : www.naver.com
아래 코드는 proxy 패턴으로 cache가 구현된 Browser이다.
BrowserProxy는 url과 html을 멤버로 갖으며 show메서드 호출시 멤버변수인 html이 존재하는지를 확인하여 없으면 html을 생성하여 보여주고 있으면 필드에 캐싱된 html을 보여준다.
package com.company.proxy.cache;
import com.company.proxy.IBrowser;
public class BrowserProxy implements IBrowser {
private String url;
private Html html;
public BrowserProxy(String url) {
this.url = url;
}
@Override
public Html show() {
if(html == null){
this.html = new Html(url);
System.out.println("BrowserProxy loading html from : "+ url);
}
System.out.println("BrowserProxy use cache html: "+url);
return html;
}
}
프록시가 적용된 브라우저인 BrowserProxy를 생성하여 show를 해보면
IBrowser browser = new BrowserProxy("www.naver.com");
//한번만 로딩되고 다음부터는 캐싱된 html을 보여준다.
browser.show();
browser.show();
browser.show();
browser.show();
browser.show();
결과는 아래와 같다
BrowserProxy loading html from : www.naver.com
BrowserProxy use cache html:www.naver.com
BrowserProxy use cache html:www.naver.com
BrowserProxy use cache html:www.naver.com
BrowserProxy use cache html:www.naver.com
로딩은 1번만되고 다음부터는 cache에 저장된 html을 사용하기 때문에 위의 cache가 적용되지 않은 브라우저보다 성능이 월등히 빠르다
만약 실제 네트워크를 통해 데이터가 오고 가는 상황이라면 차이가 엄청날 것 같다.
간단한 예제이지만 위와 같이 proxy 패턴을 통해 cache가 구현된다
'DesignPattern' 카테고리의 다른 글
디자인 패턴 6 - Observer pattern (0) | 2021.05.06 |
---|---|
디자인 패턴 5 - decorator pattern (0) | 2021.05.05 |
디자인 패턴 3 - Adapter pattern (0) | 2021.05.05 |
디자인 패턴 2 - Singleton pattern (0) | 2021.05.05 |
디자인 패턴 1 - 디자인 패턴이란? (0) | 2021.05.05 |