[디자인패턴] 프록시 패턴 (Proxy Pattern)
19 Oct 2021 -
1 minute read
-
Proxy는 대리인이라는 뜻으로, 뭔가를 대신해서 처리하는 것
-
Proxy Class를 통해 대신 전달하는 형태로 설계
-
실제 Client는 Proxy로 부터 결과를 받음
-
스프링 AOP > 내가 원하는 메소드나 기능들, 흩어져있는 기능들을 동일하게 제공하는 역할을 프록시 패턴으로 사용 (AOP는 프록시 패턴을 활용 해 특정한 메소드 등에 앞뒤로 내가 원하는 기능을 넣을 수 있고, 흩어져있는 여러가지 공통된 기능을 하나로 묶어줄 수 있음)
-
ex)
-
(interface) IBrowser.java
public interface IBrowser { Html show(); }
-
Html.java
public class Html { private String url; public Html(String url){ this.url = url; } }
-
(implements IBrowser) Browser.java
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); } }
-
(Main Class) Main.java
public class Main { public static void main(String[] args){ Browser browser = new Browser("https://github.com"); browser.show(); browser.show(); browser.show(); } }
-
출력결과
browser loading html from https://github.com browser loading html from https://github.com browser loading html from https://github.com
위 예제와 같이 cache를 구현하지 않고 같은 url에 여러 번 요청을 할 경우 요청할 때마다 같은 html을 로딩해야 한다.
(cache : 데이터를 디스크가 아닌 메모리에 보관 > 반복될 경우 메모리에서 불러와 사용하기 때문에 캐시 적용 시 성능 및 처리속도가 월등히 빠름) -
(Proxy)(implements IBrowser) BrowserProxy.java
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 loading html from : " + url); } System.out.println("browser use cache html : " + url); return html; } }
-
(Main Class) Main.java
public class Main { public static void main(String[] args){ // 구현체 자체는 건들지 않고 캐싱하는 기능을 넣음 IBrowser iBrowser = new BrowserProxy("https://github.com"); iBrowser.show(); iBrowser.show(); iBrowser.show(); } }
-
출력결과
browser loading html from https://github.com browser use cache html https://github.com browser use cache html https://github.com browser use cache html https://github.com
프록시 패턴 적용 시 로딩은 1번만 되고 그 이후에는 cache에 저장된 html을 사용하게 된다.
-