Proxy Server란?
Proxy Server는 자신을 통해 네트워크에 간접적으로 접속할 수 있도록 하는 서버를 가리킨다. 어플리케이션 서버가 직접 클라이언트의 요청을 처리하는 대신, 프록시 서버가 먼저 그 요청을 선제적으로 주거나 받고 이를 처리한다. 쉽게 말해, 클라이언트가 직접 어플리케이션 서버로 요청을 보내던 것을 중간에 어떤 서버나 프로그램이 생겨서 요청을 대신 받고, 대신 전해준다고 생각하면 편하다. (네트워크가 한 레이어 정도 추상화되었다고 해야하나...랄까)
프록시 서버를 활용하는 것은 여러 장점을 갖는데, 클라이언트가 동일한 요청을 보낸다면 이를 캐싱하여 전반적인 서비스 속도의 향상을 기대할 수 있고, 서비스에 접근하는 정책을 결정하거나 요청의 처리에 대해 로그를 남기기에 수월하며, 원래 요청을 보낸 클라이언트의 IP를 공개하지 않고 요청을 처리할 수 있어 보안을 강화하거나 역으로 보안을 회피할 목적으로도 쓰이기도 한다.
실제로 현재 IP 추적이나 보안 감시를 회피할 목적으로 쓰이는 VPN의 기본적인 원리는 프록시 서버에다가 클라이언트의 실제 IP를 가상의 IP로 맵핑하거나 서버를 거치는 인터넷 트래픽을 재할당하는 요소를 더하여진 것이라고 한다.
Reverse Proxy vs Front Proxy
프록시 서버는 프록시 서버의 위치와 요청 처리의 방식, 정책으로 여러가지 종류가 나뉘지만, 가장 흔하게 쓰는 두 가지 유형이 바로 Front Proxy와 Reverse Proxy이다.
Front Proxy와 Reverse Proxy는 클라이언트가 어디로 요청을 보내고, 이 요청을 프록시 서버가 어떻게 처리하느냐가 다르다. 우선 먼저 Front Proxy의 경우, 클라이언트는 애플리케이션 서버에 '직접' 요청을 보낸다. 즉, 요청을 보낼 서비스의 주소가 www.abc.com이라면, 클라이언트는 www.abc.com에 직접 요청을 하는 방식이다. 대신 프록시 서버는 이 사이에서 클라이언트의 요청을 받아 애플리케이션 서버와 연결하고, 클라이언트에게 처리된 요청을 전달하는 식이다.
Reverse Proxy는 이와 반대로 클라이언트가 프록시 서버의 주소로 직접 요청을 보낸다. 프록시 서버는 클라이언트의 요청을 받고 내부적으로 맵핑된 애플리케이션 서버의 주소를 이용해 요청을 중계한다.
Reverse Proxy에서 기대할 수 있는 장점
•
우선 프록시 서버가 기본적으로 제공하던 캐싱이나 로깅 등 기존의 프록시 서버가 제공해주던 이점을 활용할 수 있다.
•
여러 대의 서버를 프록시 서버와 번들시킬 수 있어 도커 컴포즈, 쿠버네티스와 같은 MSA 환경에서 서비스를 배포하는 데에 있어 보다 유리하다.
•
요청의 과정에서 클라이언트는 프록시 서버를 통해 평소와 같이 서비스에 접근할 수 있지만, 애플리케이션 서버의 주소는 공개되지 않는다. 즉, DMZ(외부 네트워크와 내부 네트워크가 함께 접근할 수 있는 공간)에 실제 애플리케이션 서버가 위치하는 일이 없어진다. 실제 애플리케이션 서버는 DB와 같은 중요한 정보를 다루기에, 별도의 보안 설정없이 공개된 주소로 접근가능하게 둔다면 보안에 취약하다. Reverse Proxy는 애플리케이션 서버의 주소를 공개하지 않으면서도 이를 방지해준다.
•
Reverse Proxy는 정책 관리에 있어서도 편리하다. 애플리케이션 서버의 방화벽 정책과 같은 중요한 문제를 하나하나 관리하기보다는 프록시 서버에서 이를 일괄 관리하는 것이 가능하다.