프록시(Proxy) 패턴

차동준·2022년 7월 29일
0

CS-디자인패턴

목록 보기
15/16
post-thumbnail

👨‍💻 프록시(Proxy)란?


프록시란 "대리"라는 뜻으로
어떠한 것을 특정 이유로 대신 해주는 것을 말한다
프로그래밍에서는 대리 통신을 해주는 매개체라고 볼 수 있다.


👨‍💻 프록시 패턴이란?


특정 개체로의 접근을 프록시를 통해 이루어지게끔 하는 디자인 패턴
실제 객체와 프록시를 캡슐화한 하나의 인터페이스를 정의하고
실제 기능동작은 실제 객체에
이를 참조하는 것을 프록시 객체에 작성하는 디자인 패턴

예시) TV 인터페이스

public interface TV {
	void turnOn();
	void showChannel(int channel);
    void turnOff();
}

예시) Real_TV 클래스

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를 끕니다.");
    }
}

예시) Proxy_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 객체를 이용해야 한다.

이렇게 실제 객체의 접근을 프록시객체를 이용하여 대신 처리하는 방법이 프록시 패턴의 핵심이다.


🔎 프록시 패턴의 장단점


장점

  1. 프록시를 이용하여 사이즈가 큰 객체가 로딩되기 전 프록시를 이용해 참조할 수 있다.
  2. 객체에 접근하기 전 해당 접근의 전후처리가 가능하다.
  3. 보안에 유리하다.(실제 객체가 무엇인지 가릴 수 있다.)

단점

  1. 객체 생성이 빈번하게 일어나는 경우 프록시를 거치는 것이 비효율적일 수 있다.
  2. 성능 저하의 원인이 될 수 있다.
  3. 프록시를 거쳐 실제 객체로 까지 이동하는 단계가 있기 때문에 코드의 가독성을 해칠 수 있다.




🔎 포워드 프록시(Forward Proxy)

출처

클라이언트가 서버에 직접 요청하는 것이 아닌 프록시 서버를 통해 요청하도록 하는 방식이다.


포워드 프록시 서버를 통해 요청하게 되면 서버에게 클라이언트에 대한 정보를 숨길 수 있다.



🔎 리버스 프록시(Rverse Proxy)

출처

포워드 프록시와 반대되는 개념으로 클라이언트쪽에서 서버에 직접적으로 요청이 들어오는 것이 아닌 (리버스)프록시 서버에게 요청하는 방식이다.
리버스 프록시 서버에게 요청하면 프록시 서버는 실제 서버에게 요청하고 응답을 클라이언트쪽으로 넘겨준다.


리버스 프록시 서버를 통해 클라이언트에게 실제 서버에 대한 정보를 숨길 수 있다.


🔎 프록시 서버를 사용하는 이유

  1. 서버로부터 클라이언트, 클라이언트로부터 서버에 대한 정보를 숨길 수 있어 보안에 유리하다.
  2. 프록시 서버를 사용한 캐싱 기능으로 자원을 효율적으로 사용할 수 있다.
  3. 이러한 프록시 서버를 여러개 갖게 되면 트래픽을 분산할 수 있어 안정성에도 유리하다.
profile
백엔드를 사랑하는 초보 개발자

0개의 댓글