프록시 패턴(Proxy Pattern)

문딤·2022년 7월 29일
0

프록시란?

Proxy ❓
대리자, 대변인으로 다른 누군가를 대신해서 그 역활을 수행하는 존재.

인터페이스를 사용, 실행시킬 클래스에 대한 객체가 들어갈 자리에 대리자 객체를 대신 투입
흐름제어만 할 뿐 결과값을 조작하거나 변경시키면 안된다.

프록시 패턴의 특징

프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다.

서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다.

프록시 서버 중 일부는 프록시 서버에 요청된 내용들을 캐시를 이용하여 저장해 둔다.

프록시 패턴의 예시

Interface

public interface IService {
    String runable();
}

runable 메소드를 가진 인터페이스

Proxy


public class Proxy implements IService{

    IService service;

    @Override
    public String runable() {

        System.out.println("반환결과를 건드리지 않지");
        service = new Service();
        return service.runable();
    }
}

프록시를 선언시 새로운 서비스 객체를 생성해서 service.runable 내용 return

Service

public class Service implements IService{


    @Override
    public String runable() {
        return "서비스 좋아요!";
    }
}

Main


public class Main {
    public static void main(String[] args) {


        IService proxy = new Proxy();

        System.out.println(proxy.runable());
    }
}

그럼 실행한다면?

새로운 서비스 객체를 만들어 runable 내용까지 반환해줄것이다.

예상 출력

반환결과를 건드리지 않지
서비스 좋아요! 

결과

반환결과를 건드리지 않지
서비스 좋아요!

프록시 패턴의 장단점

⭕ 프록시패턴 장점

  • 사이즈가 큰 객체가 로딩되기 전에도 프록시를 통해 참조를 할 수 있다.
  • 실제 객체의 public, protected 메소드를 숨기고 인터페이스를 통해 노출시킬 수 있다.
  • 로컬에 있지 않고 떨어져있는 객체를 사용할 수 있다.
  • 원래 객체에 접근에 대해 사전처리를 할 수 있다.

❌ 프록시패턴 단점

  • 객체를 생성할 때 한 단계를 거치게 되므로, 빈번한 객체 생성이 필요한 경우 성능이 저하될 수 있다.
  • 프록시 내부에서 객체 생성을 위해 스레드가 생성, 동기화가 구현되어야 하는 경우 성능이 저하될 수 있다.
  • 로직이 난해해져 가독성이 떨어질 수 있다.

포워드 프록시 vs 리버스 프록시(프론트와 백엔드)

Forward Proxy

클라이언트(사용자)가 인터넷에 직접 접근하는게 아니라 포워드 프록시 서버가 요청을 받고 인터넷에 연결하여 결과를 클라이언트에 전달 (forward) 해준다.

프록시 서버는 Cache 를 사용하여 자주 사용하는 데이터라면 요청을 보내지 않고 캐시에서 가져올 수 있기 때문에 성능 향상이 가능하다.

Reverse Proxy

클라이언트가 인터넷에 데이터를 요청하면 리버스 프록시가 이 요청을 받아 내부 서버에서 데이터를 받은 후 클라이언트에 전달한다.

클라이언트는 내부 서버에 대한 정보를 알 필요 없이 리버스 프록시에만 요청하면 된다.

내부 서버 (WAS) 에 직접적으로 접근한다면 DB 에 접근이 가능하기 때문에 중간에 리버스 프록시를 두고 클라이언트와 내부 서버 사이의 통신을 담당한다.

또한 내부 서버에 대한 설정으로 로드 밸런싱(Load Balancing) 이나 서버 확장 등에 유리하다.

차이점

  1. End Point

Forward Proxy 는 클라이언트가 요청하는 End Point 가 실제 서버 도메인이고 프록시는 둘 사이의 통신을 담당해준다.

Reverse Proxy 는 클라이언트가 요청하는 End Point 가 프록시 서버의 도메인이고 실제 서버의 정보는 알 수 없다.

  1. 감춰지는 대상

Forward Proxy 는 클라이언트가 감춰진다.

요청 받는 서버는 포워드 프록시 서버를 통해서 요청을 받기 때문에 클라이언트의 정보를 알 수 없다.

Reverse Proxy 는 반대로 서버가 감춰진다.

클라이언트는 리버스 프록시 서버에게 요청하기 때문에 실제 서버의 정보를 알 수가 없다.

참고

https://limkydev.tistory.com/79
https://bcp0109.tistory.com/194
https://velog.io/@newtownboy/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-%ED%94%84%EB%A1%9D%EC%8B%9C%ED%8C%A8%ED%84%B4Proxy-Pattern

profile
풀스택개발자가 될래요

0개의 댓글