PPAK

[Network] 프록시(proxy), Forward proxy, Reverse proxy 란? 본문

네트워크

[Network] 프록시(proxy), Forward proxy, Reverse proxy 란?

PPakSang 2022. 6. 20. 10:55

프록시(proxy)

두 PC 가 통신하는 과정에서, 직접적으로 메세지를 송수신 하지 않고, '대리자' 를 두어 통신하는 방식을 프록시 라고 합니다.

 

여기서 대리자가 모든 요청을 전달받고, 실제 요청 대상과 메세지를 주고 받은 후의 응답을 돌려주는 방식의 서버를 프록시 서버 라고 합니다.

 

또한 프록시 서버는 서버가 위치한 곳에 따라서 Forward proxy 와 Reverse proxy 로 다르게 불려지는데, 이 둘의 역할은 다소 상이하다고 볼 수 있습니다.

 

프록시 서버

위의 그림을 보면 대강 어떤 느낌인지 감이 오실 것입니다.

 

Forward proxy

 

프록시 서버의 위치가 클라이언트측 내부망에 존재할 때의 경우를 Forward proxy 라고 합니다.

 

Forward proxy

 

위와 같은 구조를 형성하였을 때의 장점이 생길만한 요인에 대해서 생각해보자면

 

1. 클라이언트의 입장에서는 프록시 서버의 존재를 모릅니다.

-> 클라이언트는 마치 타겟 서버와 통신하는 것처럼 느끼기 때문에 프록시 서버는 그 사이에서 요청을 적절히 핸들링할 수 있습니다

 

2. 타겟 서버 또한 프록시 서버가 보낸 요청인지, 클라이언트가 보낸 요청인지 알 수 없습니다.

 

보안 : 모든 요청이 프록시 서버를 거쳐서 타겟 서버로 전달된다는 것은 모든 요청에 대한 검열을 수행할 수 있다는 것을 의미합니다. 따라서 사내망, 국방망과 같은 예측되지 못한 요청이 발생하면 안되는 환경에서 사용될 수 있습니다.

 

캐싱 : 동일한 정적 자원 요청에 대해서 프록시 서버는 해당 자원을 캐싱해뒀다가, 클라이언트가 요청 시 제공하는 역할을 수행할 수 있습니다. 이와 같은 동작 방식은 클라이언트의 요청이 네트워크를 통해서 웹서버로 전달될 필요가 없다는 것을 의미하고, 이는 클라이언트 측 시스템 성능 향상에 큰 도움이 됩니다.

 

IP 우회 : 타겟 서버에게 전달되는 요청지가 프록시 서버로 고정되기 때문에, 서버 입장에서는 실제 클라이언트가 누군지 모르게 할 수 있습니다. VPN 이 운영체제 수준에서 동작하는 IP 우회 방식이라고 한다면, 프록시 서버는 응용 프로그램 수준에서 우회를 한다고 이해할 수 있습니다.

 

Reverse proxy

Forward proxy 와는 반대로 서버 측 응용 프로그램 앞에 위치한 서버를 Reverse proxy 라고 한다.

 

해당 프록시 서버는 타겟 서버로 들어오는 요청을 전부 받아서 처리 하는 역할을 수행하기 때문에, 타겟 서버를 보호하는 역할을 수행한다고 할 수 있다.

 

 

Reverse proxy

위와 같은 구조를 형성하였을 때의 장점이 생길만한 요인에 대해서 생각해보자면

 

1. 클라이언트 입장에서는 프록시 서버의 존재를 모릅니다.

-> 클라이언트 입장에서는 타겟 서버와 통신하고 있다고 생각하지만, 실제로는 타겟 서버 앞의 프록시 서버와 통신하고 있는 것입니다.

 

2. 프록시 서버가 원할 때 언제든지 클라이언트의 요청을 우회할 수 있습니다.

-> 타겟 서버 측에서 프로그램 버전을 바꿔야하는 상황이나, 하나의 서버에 요청이 집중되는 상황을 해결하기 위해 사용할 수 있습니다

 

로드밸런싱 : 동일한 버전의 WAS 를 여러개 운용하면서, 사용자 요청에 대한 처리를 분산할 수 있습니다.

첫 번째 요청은 8081 포트로, 두 번째 요청은 8080 포트로... 등등 

 

무중단배포 : 프록시 서버가 없을 때 재배포 시나리오를 생각해본다면

(구)서버종료 -> 서비스 중지 -> (신)서버구동 -> 서비스 시작 의 방식으로 진행될 것인데, 서버를 중지하고 재구동 하는 과정에서 발생하는 딜레이는 서비스에 매우 치명적일 것입니다. 카카오톡의 새로운 버전을 재배포 할 때 마다 몇 분씩 서비스가 종료된다고 생각한다면,,

 

프록시 서버가 존재한다면

(신) 서버 구동 전 요청 -> 프록시 서버 -> (구) 서버

(신) 서버 구동 후 요청 -> 프록시 서버 -> (신) 서버

 

와 같이 새로운 서비스를 구동하기 까지의 시간에 독립적인 서비스 운영이 가능하기 때문에 프록시 서버가 빛을 발할 수 있습니다

 

보호 : 타겟 서버로 들어오는 요청을 검열할 수 있습니다

타겟 서버의 저장공간이 얼마 남지 않았을 때는 송신하는 데이터의 양을 제한하여 서버를 보호합니다.

 

NginX, Apache 같은 Web Server 가 이러한 Reverse proxy 역할을 수행합니다

 

1. 정적 자원에 대한 요청은 타겟 서버로 보내지 않고, 프록시 서버가 캐싱한 데이터를 전달함으로써 타겟 서버의 부하를 줄입니다

2. 실제 타겟 서버에 대한 요청은 적합한지 검사한 후에 전송합니다

 

 

잘못된 정보가 있다면 댓글로 알려주시면 감사하겠습니다!!

Comments