IT/AWS

[Network] Proxy와Reverse Proxy

물통꿀꿀이 2019. 1. 19. 14:13

Proxy와 Reverse Proxy에 대해 알아보려고 한다.

이 2가지 개념은 생각해보면 '그냥 반대의 개념이네' 라고 할 수 있다. 이름부터도 Prefix로 Reverse가 붙으니 당연히 그렇게 생각하는게 맞다.

그런데 이번 포스팅에서는 개략적으로 알기보다는 조금이라도 더 개념에 접근해보려고 한다.


그림 1. Proxy Vs Reverse Proxy



그림 1에서 확인 할 수 있듯이, 인프라 상에서 Server의 위치가 어디인지에 따라 Proxy인지 Reverse Proxy인지 판단 할 수 있다.  

(Front-end에 밀접하면 Proxy, Back-end에 밀접하면 Reverse Proxy)

그렇다면 각 개념에 대해 조금 더 알아보도록 하자.


Proxy Server

요즘 Proxy 서버 로써 Reverse Proxy 서버가 많이 언급되긴 하지만, 전통적으로 Proxy 서버는 Front-end와 가깝게 구성되었다. 그래서 일반적으로 Proxy Server라 하면 Forwarding Proxy 즉, Client와 가까운 서버를 일컫는다.

Proxy Server를 따지고 들면 종류가 여러가지이지만 뭉뚱그려서 설명하자면 웹 서버와 사용자를 분리하는 중간 서버이다. 그래서 사용자가 외부로 보낸 요청은 Proxy 서버를 통해 다시 들어온다. 반대로 외부로 보낸 요청 또한 Proxy 서버를 통한다.

(다시 그림 1을 보면 확인 할 수 있는 것 처럼 Proxy 서버는 외부로 나가기전 Gateway 역할을 한다.)


그림 2. Reasons for using Proxy Server


그림 2를 보면 '왜 꼭 Proxy 서버를 사용하는지' 에 대한 이유를 확인 할 수 있다. (해당 이유가 Proxy 서버의 장점에 해당하기 때문에)

이 밖에도 더 많은 이유가 있을 수 있겠지만 추려서 크게 보면 Proxy 서버의 장점은 2 가지 정도로 추려 볼 수 있다.

- Security

Security는 사용자의 데이터를 안전하게 외부로 보낸다. 인프라를 구성할 때 Firewall을 따로 구성하기도 하지만 Proxy 서버에서 Firewall 역할도 하여 암호화 및 외부 악성 공격으로부터 사용자를 보호한다. 

- Network Performance

그리고 Network Performance는 Proxy 서버에서 자원을 공유하면서 Network의 속도를 향상시킨다. 이는 서버 내부적으로 caching, shared connection 등 다양한 정책을 사용하여 Performance를 높인다.



그림 3. Forwarding Proxy Server


지금까지 언급한 것을 바탕으로 그림 3를 보면 Proxy 서버의 위치를 좀 더 명확히 알 수 있다. (물론 Proxy 서버의 위치는 비즈니스에 따라 다를 수 있다.)


이를 바탕으로 Proxy 서버의 종류는 알아보면 대략 2가지로 나뉜다.

- Transparent Proxy

기본적인 Proxy 서버로 Proxy 서버 IP를 사용해서 사용자의 데이터를 외부 서버로 전달해주는 역할을 한다. 

이 외에도 공공 시설이나 학교에서 외부로 데이터가 나가기전에 filtering을 한다.

- Anonymous Proxy

Proxy를 익명으로 사용한다. 즉, 외부에 사용자를 공개하지 않고 외부 서비스를 이용할 수 있게 한다. (IP 변환도 사용 할 수 있음)

예를 들어보면, 외부 서비스가 사용자의 위치를 기반으로 정보를 제공한다면 Anonymous Proxy를 사용하여 사용자의 위치를 숨기고 서비스를 이용 할 수 있다.


Reverse Proxy

요즘 많이 언급되는 Proxy 서버이다. 따지고 보면 Proxy의 종류에 포함되지만 위에서도 언급했듯이 기존에는 Proxy는 Forwarding Proxy를 많이 언급했기 때문에 Forwarding과 Reverse로 구분된다.


그림 4. Reverse Proxy


그림 4에서 볼 수 있듯이 Reverse Proxy는 일반적으로 사설 네트워크 상에서 Firewall 뒤에 존재한다. (내부 Backend의 추상화된 단계)

좀 더 이해 할 수 있게 Reverse Proxy의 역할을 아래에서 확인해 보자.

- Load balancing 

웹 서버의 앞 단에 위치하고 있기 때문에 Network Traffic을 제어한다. 때문에 사용자의 요청 및 웹 서버에 상태에 맞게 Network Traffic을 분산한다. 

(즉, Load balancer의 역할*을 수행한다.)

* 어느 정도 비슷한 역할을 수행하지만 면밀히 따져보면 Reverse Proxy와 Load Balancer의 주 역할은 다르다. (다른 포스팅에서 언급하겠다.)

- Web acceleration

내부적으로 cache를 사용하거나 데이터를 압축하여 network의 속도를 향상시킨다.

- Security and anonymity

웹 서버로부터의 데이터를 수정하여 웹 서버를 숨기거나 악성 사용자로부터의 공격을 막는다.


Proxy와 Reverse Proxy에 대해 살펴보았지만 중요한 것은 Proxy 라는 기본 개념을 크게 다르지 않다.

다만 Front-end 또는 Backend 중 어느 곳에 중점을 두는지에 따라 Proxy의 역할이 조금씩 상이하다는 것을 염두해두면 된다.


참조

https://www.varonis.com/blog/what-is-a-proxy-server/

https://www.thesecuritybuddy.com/network-security/what-is-a-proxy-server-and-how-does-it-work/

https://dev.to/remyg/nginx-reverse-proxy-54d7

https://en.wikipedia.org/wiki/Proxy_server#Forward_proxies