본문 바로가기

개인적으로 공부한 것을 정리해 놓은 블로그입니다 틀린 것이 있으면 댓글 부탁 드립니다!


DesignPattern

디자인 패턴 4 - proxy pattern

반응형

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가 구현된다 

반응형