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
'IT > AWS' 카테고리의 다른 글
[AWS] ECS vs Kubernetes (0) | 2019.02.08 |
---|---|
[AWS] Lambda의 장단점 (0) | 2019.01.27 |
[Netflix] Hystrix Overview (0) | 2019.01.14 |
[AWS] ElastiCache Redis Cluster (0) | 2019.01.06 |
[Netflix] Part 6 - API 배포 (0) | 2018.12.24 |
댓글