Forward Proxy와 Reverse Proxy에 대한 설명들을 찾아보면 너무 Devops 측면에서의 설명들이 많다 우리는 개발자 답게 코드로 이해해 보고자 한다.

 

Forward Proxy

말그대로 요청을 Forward해주는 형태의 Proxy이다. 인프라 구조는 아래와 같다고 하자.

 

[Client, IP: 10.1.1.1 ] <-> [Porxy, IP: 10.2.1.1 ] <-> [Server, IP: 10.3.1.1 ]

 

Client가 Proxy를 통하여 Server로 부터 image.png를 받아오기 위한 HTTP 요청은 아래와 같다.

GET http://10.3.1.1/resource/image.png
Host: 10.2.1.1
... 생략

실제로는 10.3.1.1에 대해 요청이지만 Host: 10.2.1.1을 통해서 가져오라는 의미로 작동한다.

Proxy Server는 요청을 수신하고 10.3.1.1로 접속하여 image.png을 받아와서 10.1.1.1로 응답한다.

 

이때 Server가 받는 요청은 아래와 같다.

GET http://10.3.1.1/resource/image.png
Host: 10.3.1.1
... 생략

위의 요청 예제를 보면 자연스럽게 forward proxy의 특성이 나오게 된다.

  • Proxy는 자신의 IP로 해당서버에 요청을 보내므로 Server는 Client의 정체를 알수없게 된다.
  • Proxy는 요청 Server와 대상 Resource를 명확히 알수있으므로 캐싱과 접근제한같은 방화벽 형태를 구성할수있다. 
  • Client 중심적이다 - 원천적으로는 Proxy는 Client의 요청을 중계하는 역할만한다.

Reverse Proxy

일반적으로 중요한 데이터를 가지는 DB, WAS Server등을 추상화하고 감추기 위한 Proxy서버를 지칭한다.

 

여기서도 인프라 구조는 같으나 Proxy만 Reverse로 바꿔보자

 

[Client, IP: 10.1.1.1 ] <-> [Porxy, IP: 10.2.1.1 ] <-> [Server, IP: 10.3.1.1 ]

 

Client가 Proxy를 통하여 Server로 부터 image.png를 받아오기 위한 HTTP 요청은 아래와 같다.

GET http://10.2.1.1/resource/image.png
Host: 10.2.1.1
... 생략

Client입장에서는 단순히 Proxy Server로 요청을 한다.

 

이때 서버가 받는 요청은 Forward Proxy와 같다.

GET http://10.3.1.1/resource/image.png
Host: 10.3.1.1
... 생략

위의 요청을 보면 자연스럽게 Reverse Proxy의 특성이 슬슬기어나온다.

  • Client는 실제 Server의 IP(정보)를 알수없다.
  • Proxy가 대상 Server를 결정하므로 LoadBalancing에 유리하다.
  • 요청 자체를 control하므로 요청을 변경하거나 TLS Termination같은 암호화처리에 컨트롤하기 쉽다.

+ Recent posts