프록시란 "대리"라는 뜻으로
어떠한 것을 특정 이유로 대신 해주는 것을 말한다
프로그래밍에서는 대리 통신을 해주는 매개체라고 볼 수 있다.
특정 개체로의 접근을 프록시를 통해 이루어지게끔 하는 디자인 패턴
실제 객체와 프록시를 캡슐화한 하나의 인터페이스를 정의하고
실제 기능동작은 실제 객체에
이를 참조하는 것을 프록시 객체에 작성하는 디자인 패턴
public interface TV {
void turnOn();
void showChannel(int channel);
void turnOff();
}
public class Real_TV implements TV {
String corp;
public Real_TV(String corp) {
this.corp = corp;
}
@Override
public void turnOn() {
System.out.println(this.corp + "회사 TV를 켭니다.");
}
@Override
public void showChannel(int channel) {
System.out.println(channel + "번 채널을 틉니다");
}
@Override
public void turnOff() {
System.out.println(this.corp + "회사 TV를 끕니다.");
}
}
public calss Proxy_TV implements TV {
private Real_TV realTV;
private String corp;
public Proxy_TV() {
this(null, null);
}
public Proxy_TV(Real_TV realTV, String corp) {
this.realTV = realTV;
this.corp = corp;
}
@Override
public void turnOn() {
if (realTV.corp == this.corp) {
realTV.turnOn();
}
}
@Override
public void showChannel(int channel) {
if (realTV.corp == this.corp) {
realTV.showChannel(channe);
}
}
@Override
public void turnOff() {
if (realTV.corp == this.corp) {
realTV.turnOff();
}
}
}
TV인터페이스를 구현한 실제TV와 프록시 객체가 있을 때
실제TV에서 기능 동작이 이루어지고 하지만 이 실제TV의 동작을
실행시키기 위해서는 프록시TV 객체를 이용해야 한다.
이렇게 실제 객체의 접근을 프록시객체를 이용하여 대신 처리하는 방법이 프록시 패턴의 핵심이다.
클라이언트가 서버에 직접 요청하는 것이 아닌 프록시 서버를 통해 요청하도록 하는 방식이다.
포워드 프록시 서버를 통해 요청하게 되면 서버에게 클라이언트에 대한 정보를 숨길 수 있다.
포워드 프록시와 반대되는 개념으로 클라이언트쪽에서 서버에 직접적으로 요청이 들어오는 것이 아닌 (리버스)프록시 서버에게 요청하는 방식이다.
리버스 프록시 서버에게 요청하면 프록시 서버는 실제 서버에게 요청하고 응답을 클라이언트쪽으로 넘겨준다.
리버스 프록시 서버를 통해 클라이언트에게 실제 서버에 대한 정보를 숨길 수 있다.