프록시 패턴에 대해서 알아보자.

프록시란 대리인 이라는 뜻으로써, 뭔가를 대신해서 처리하는 것을 의미한다!

 

특정 요청을 처리할 때 해당 프록시를 통해서 처리되게 되며 프록시로 부터 결과를 받는 형태다.

캐시 기능으로도 많이 사용된다.

 

쉽게 말하자면

 

코드를 예시로 보자.

먼저, 캐시 기능으로 사용된 프록시 패턴 예제를 보자.

 

브라우저 라는 인터페이스를 하나 생성한다.

이 브라우저는 Html을 보여주는 기능하나를 담당하도록 한다.

public interface IBrowser {
    Html show();
}

위의 인터페이스를 상속하는 브라우저 객체를 생성한다.

해당 브라우저는 기본생성자에서 url을 받아서 처리하도록 한다.

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);
    }
}

위의 브라우저를 메인에서 호출해보자.

Browser browser = new Browser("www.naver.com");
browser.show();
browser.show();
browser.show();
browser.show();
        
 //결과
browser loading html from :www.naver.com
browser loading html from :www.naver.com
browser loading html from :www.naver.com
browser loading html from :www.naver.com

매번 html을 로딩하게 된다. 이를 프록시 패턴을 적용해본다면?

BrowserProxy 라는 클래스를 만들고, html 값이 없을 경우에만 새로운 객체를 받도록하자.

 

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("browser proxy loading html from :" +  url);
        }
        System.out.println("browser proxy use cache html :" +  url);

        return html;
    }
}

위의 요청을 호출하면 아래처럼 1번만 해당 객체를 호출한 후 나머지는 캐시형태로 재사용하는 것을 알 수 있다.

        IBrowser browserProxy = new BrowserProxy("www.naver.com");
        browserProxy.show();
        browserProxy.show();
        browserProxy.show();
        browserProxy.show();

//결과
browser proxy loading html from :www.naver.com
browser proxy use cache html :www.naver.com
browser proxy use cache html :www.naver.com
browser proxy use cache html :www.naver.com
browser proxy use cache html :www.naver.com

실제로 프록시 패턴은 AOP에서 많이 사용된다.

특정 요청을 할 때 해당 요청이 들어온 시간, 그리고 응답시간을 전달할 수 있도록

내부적으로 프록시 처리 후 응답하는 형식으로 구성된다.

알아두도록 하자!

 

 

참고

- 패스트캠퍼스 예상국 Backend Developer님 강의(Spring초격차)

+ Recent posts