겸손하기 꾸준하기 건강하기

Forward Proxy, Reverse Proxy, Load Balencer 본문

study

Forward Proxy, Reverse Proxy, Load Balencer

seminss 2024. 4. 18. 21:03

Proxy

Proxy란 무엇일까요?

사전 상에서는 다음과 같이 정의하고 있네요.

 

저희도 "대리"라는 단어로 정의하고 넘어가겠습니다.

대리란, 남을 대신하여 일을 처리한다는 뜻을 가지고 있습니다.

 

 

Proxy는 사실 굉장히 범용적인 단어입니다.

Spring Proxy, Proxy 패턴, Network Proxy.. 와 같은 용어들을 많이 들어보셨을 거예요.

 

제가 오늘 소개해드리려고 하는 부분은 Network Proxy (=Proxy Server)입니다.

 

그러면, Proxy 서버란 무엇일까요?

저희가 정의한 Proxy의 정의에 의하면, "대신 처리하는 서버"라고 할 수 있겠죠?

 

여기 있는 Proxy 서버

여기 있는 Proxy 서버 모두, Proxy 서라고 칭합니다.

 

 

이 두 그림을 합치면, 아래와 같은 그림이 되겠네요!

 

 

Proxy 서버란, 클라이언트와 서버 간의 중계 서버로, 통신을 대리 수행하는 서버입니다.

프록시는, 보안상의 이유로 직접 통신할 수 없는 두 점 사이에서 대리로 통신을 수행하여 보안상, 성능, 안정성을 향상하기 위해 등장했습니다.

 

보통 웹은 클라이언트에서 서버로, 서버에서 클라이언트로 통신하며 데이터를 전달합니다. 

이때 필연적으로 중복되는 데이터를 반복하여 전달하는 상황이 발생하는데, 이렇게 동일한 요청을 매번 처리하는 것은 곧 리소스 낭비와 서버의 부하로 이어지게 됩니다.

 

따라서 본 서버에 도달하기 전에 새로운 서버(Proxy Server)를 미리 배치하여 중복 요청에 대해 (연산 없이) 동일한 응답을 할 수 있다면, 클라이언트에겐 빠른 속도의 서비스를, 서버에게는 불필요한 부하를 줄이는 효과를 낼 수 있습니다.

 

Proxy의 종류로는 Forward ProxyReverse Proxy가 있고, 위 특징은 forward Proxy의 큰 특징입니다. 

일반적인 Proxy는 Forward Proxy를 뜻해요.

 

예를 들면...

프록시 설정을 한다.
인터넷 속도를 향상하기 위해 Proxy 설정을 한다.
유튜브를 우회해 사용하기 위해 프록시 설정을 했다.
프록시 서버를 띄워 패킷을 깠다. 등등..

 


📌Forward Proxy

Forward Proxy는 사용자와 인터넷 사이에 위치합니다. 클라이언트가 서버에게 접근하고자 할 때, 클라이언트는 타겟 서버의 주소를 Forward Prodxy에 전달하여, Forward Proxy가 인터넷으로 요청된 내용을 가져오는 방식입니다.

 

특징(선택적)을 살펴보도록 하겠습니다. 

 

캐싱

우선, 클라이언트가 요청한 내용을 캐싱함으로써, 여러 가지 부가적인 효과를 나타낼 수 있습니다.

 

클라이언트 한 명이 오늘 날씨 어때?라고 물어봤습니다.

서버는 오늘 날씨는 비가 와!라고 말을 해줍니다.

이때, Proxy Server가 오늘 날씨는 비가 온다는 사실을 저장해 두는 것입니다.

그리고 다음 클라이언트가 왔을 때 서버에게 재요청을 보내지 않고, 오늘은 비가 온다는 사실을 전달할 수 있는 거죠.

 

1) 전송 시간을 절약할 수 있다.

2) 불필요한 외부 전송이 없다.

3) 외부 요청이 감소한다.(= 네트워크 병목 현상 방지)

 

병목(Bottle neck) 현상이란 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말합니다. 병목 현상은 주로, 적절한 네트워크의 토폴로지를 지정하여 대처합니다.

 

 

암호화

간단하게는,  클라이언트가 보낸 요청을 감춘다는 뜻입니다.

 

프록시 서버가 없다면, 클라이언트가 요청을 할 때는, 특정 인물이 요청을 한다는 사실이 서버에게 그대로 전달됩니다. IP, 장비 등의 모든 정보들이 송신되는 것이죠.

 

그런데 Forward Proxy가 존재한다면 어떻게 될까요?

 

어떤 누구가 요청을 보내든, 마치 Forward Proxy가 요청한 것처럼, 서버에게는 Forward Proxy의 정보가 전달됩니다.

이때, 클라이언트의 요청은 Forward  Proxy  서버를 통과하면서 암호화가 됩니다. 암호화된 요청은 다른 서버를 통과할 때 필요한 최소한의 정보만 갖게 되는데, 이는 클라이언트의 ip를 (보안을 위해) 감춰주는 보안 효과를 내줍니다.

 

따라서, 서버는 응답받은 요청을 누가 보냈는지 알지 못하게  됩니다. 즉, 익명성이 보장되는 것이죠.

IP를 추적해도 보이는 것은 Proxy 서버의 IP 뿐입니다.

 

 


 📌Reverse Proxy

Reverse Proxy도 Forward Proxy와 굉장히 유사한데요, 특징이 있다면 Reverse Proxy는 Forward Proxy와 다르게, 인터넷과 서버들 사이에 위치하고 있다는 사실입니다. 웹서버/WAS 앞에 놓여있습니다.

클라이언트는 웹 서비스에 접금할 때 웹서버에 요청하는 것이 아닌, 프락시로 요청하게 되고, 프록시가 배후의 서버로부터 데이터를 가져오는 방식입니다.

 

특징(선택적)을 살펴보도록 하겠습니다. 

 

 

캐싱

Forward Proxy와 동일합니다.

 

암호화

들어오는 요청을 모두 복호화, 나가는 응답을 암호화 함으로써 클라이언트와 안전한 통신을 할 수 있게 해 줍니다. 본래, 서버는 클라이언트와 통신을 할 때 SSL(or TSL)로 암호화, 복호화를 진행하지만, Proxy를 이용해 서버의 부담을 줄일 수 있습니다.

SSL(SECURE SOCKETS LAYER)은 웹사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술입니다. 응용 계층과 전송 계층 사이에 속합니다.

TLS는 전송 계층 보안(Transport Layer Security)으로, SSL의 향상된, 더욱 안전한 버전입니다

번외로, HTTPS는 SSL 또는 TLS 위에 HTTP 프로토콜을 엊어 보안된 HTTP 통신을 하는 프로토콜입니다.

 

서버 보안

Reverse Proxy를 통해, 서버의 정보를 클라이언트에게 숨길 수 있습니다.

 

클라이언트는 요청을 할 때 실제 서버의 정보를 알지 못한 채, Reverse Proxy가 클라이언트 입장에서의 서버가 됩니다. 그러면, Reverse Proxy가 본인이 알고 있는 서버들에게 요청을 전달하게 되는 것입니다. 클라이언트는 Reverse Proxy를 실제 서버라고 생각하여 요청하기 때문에, 실제 서버의 IP가 노출되지 않는다는 보안적 이점을 얻을 수 있습니다.  DDos 공격과 같은 공격을 막는데 유용해요.

 

보통 기업의 네트워크 환경에서는 DMZ라고 부르는 내부 네트워크/ 외부 네트워크 사이에 위치하는 공간이 존재합니다. (내/외부 둘 다 접근할 수 있는 공간)

이 구간에는 보통 메일 서버, 웹 서버, FTP 서버 등 외부 서비스를 제공하는 서버가 위치하게 됩니다.

 

WAS를 DMZ에 놓게 되면, WAS가 해킹당할 경우, DB 서버까지 해킹당할 수 있습니다. 따라서 Reverse Proxy 서버를 DMZ에 두고, 실제 서비스 서버는 내부망에 위치시킨 후 서비스 하는 것이 일반적입니다.

 

일반적인 WEB(Apache, nginx) - WAS(Tomcat)  분리 형태를 Reverse 프록시라고 생각하면 됩니다.

Apache HTTP Server (= Apache) : 웹 서버 | HTTP 요청을 받아 정적 콘텐츠(HTML 파일, 이미지 등)를 제공
Apache Tomcat (=Tomcat) : WAS | Java 서블릿 컨테이너 및 웹 서버

 

로드밸런싱

Load Balancing은 부하 분산입니다. 해야 할 작업을 나누어, 서버의 부하를 분산시키는 것입니다.

 

로드 밸런서가 트래픽을 나눠주는 알고리즘은 다양하게 존재하지만, 저희는 부하를 분산시킨다, 정도로 로드 밸런서의 역할을 정의하고 넘어가겠습니다. 

 

그럼 로드 밸런서는 왜 사용하는 것일까요?

 

서비스를 이용하는 사용자가 많아졌을 때, 해당 트래픽을 처리하기 위해선, 서버의 높은 성능이 요구됩니다.

이때, Scale up 만으로는 물리적 한계가 있습니다.

 

이때, 서버를 여러 대 증설하는 작업, 즉 Scale out을 통해 해결할 수 있습니다. 그리고 이 Scale out을 해주는 서비스가, 로드 밸런서라고 할 수 있는 것입니다.

 

즉, Load Balancer는 여러 대의 서버가 분산(나누어) 처리할 수 있도록 요청을 나누어 주는 서비스입니다.

 

로드 밸런서의 종류로는 OSI 7 계층 기준으로 L2, L3, L4, L7 스위치가 있습니다.

L2는 Mac 주소를 기반으로 로드 밸런싱, L3는 IP 주소를 바탕으로 로드 밸런싱을 합니다.

 

백엔드 개발자 같은 경우에는 L4, L7 로드 밸런서를 알면 되는데요,

L4 스위치는  Transport Layer(IP&Port) Level에서 Load Balancing을 합니다. L4 로드밸런서가 동작하면, 각기 다른 서버 A, 서버 B로 트래픽이 분산됩니다. (TCP/UDP) 

L7 스위치는 Application Layer(User Request) Level에서 Load Balancing을 하는 것입니다. URL, Payload, Http Header, Cookie 등을 내용을 기준으로 로드밸런싱 됩니다.  (HTTPS/ HTTP/ FTP) 따라서 콘텐츠 기반 스위칭이라고도 합니다.

L4 스위치는 단지 부하를 분산시키기 위한 것이고, 

L7 스위치는 가볍고 작은 단위의 여러 개의 서비스를 운영함으로서,  요청을 각각의 서버에 분산시키기 위한 것입니다. 요청의 세부 사항을 두고,  결제만 담당하는 서버, 회원 가입만 담당하는 서버 등으로 분리하는 것이죠!

 

 


 

  포워드 프록시 리버스 프록시
서버 위치 클라이언트 앞 웹서버/ WAS 앞
서버 통신 대상 클라이언트와 Proxy 서버가 통신 Proxy 서버와 내부망 서버가 통신
감춰지는 대상 본 서버의 IP 정보를 숨김 서버에게 클라이언트가 누군지 숨김

 

 

 

 

참고: https://www.youtube.com/watch?v=YxwYhenZ3BE&t=301s

https://inpa.tistory.com/entry/NETWORK-%F0%9F%93%A1-Reverse-Proxy-Forward-Proxy-%EC%A0%95%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EC%A0%95%EB%A6%AC

https://www.youtube.com/watch?v=6FAwAXXj5N0

https://blog.naver.com/skinfosec2000/222135874222

https://dodghek.tistory.com/33