포워드프록시, 리버스프록시 그리고 로드밸런서

류예린·2022년 8월 29일
1

1. Proxy


Proxy 란?

[그림1] Proxy 란?

Proxy(프록시)란 서버와 서버 사이에서 목적에 따라 특정 서버들을 대신해 여러가지 작업을 수행해주는 중개인으로 묘사할 수 있다. 프록시 서버는 요청을 가로채서 응답할 수 있으며, 요청만 전달하거나 수정할 수도 있다.

프론트엔드 서버와 백엔드 서버사이에 프록시 서버 역할을 하는 새로운 서버를 추가함으로써, 프론트엔드 서버는 더이상 백엔드 서버가 아닌 프록시 서버로 요청을 보내게 되고, 프록시 서버는 해당 요청을 받아 필요한 작업을 한 뒤 백엔드 서버에 해당 요청을 넘겨주게 된다.

프록시 서버는 하는 역할에 따라 크게 Forward ProxyReverse Proxy로 나뉜다.



Forward Proxy

우리는 VPN을 이용할 때 사내 내부 서버에 접근한다면 보안상의 이유로 특정 IP로만 접속 가능하도록 할 수 있다. 한국 IP로는 접속이 불가능한 쇼핑몰을 접속하기 위해 특정 국가의 IP를 이용하기 위해서도 VPN을 사용할 수 있다. 이 외에도 많은 사용 예시들이 있겠지만, 요청 서버에 대한 실제 정보를 가리는 것이 VPN의 주된 용도라고 할 수 있다.

Forward Proxy의 다른 사용 예시로는 캐싱을 예로 들 수 있다. 클라이언트에서 같은 요청을 여러번 보낼 때 매번 서버에서 같은 요청에 대한 응답처리를 반복할 필요없이 Forward Prox 서버에서 캐싱해두고, 같은 요청에 대한 응답을 대신 즉시 보내주게 되는 것이다. 이렇게 되면 불필요한 통신이 줄어들고 그만큼 리소스 낭비를 줄일 수 있다. 게다가 전체적인 성능 개선 효과를 경험할 수 있다.

이처럼 요청을 보내는 서버 또는 사용자를 대신하여 특정 작업들을 처리해주는 프록시Forward Proxy라고 한다.

[그림2] Forward Proxy



Reverse Proxy

Reverse Proxy는 프라이빗 네트워크의 서버에 대한 접근을 제어한다. 데이터 암호화 및 암호 해독, 인증 작업, 정보 캐싱 및 Load Balancer(로드 밸런서) 역할을 수행할 수 있다.

기본적으로 Reverse Proxy는 웹 서버 또는 서버 그룹에 대한 Gateway의 역할을 한다. Reverse Proxy는 클라이언트가 접근하고자 하는 서버의 실제 위치를 masking(마스킹)한다. 즉, 실제 서버의 위치를 숨겨 클라이언트가 아닌 백엔드 서버에 대한 익명성을 제공한다.

Reverse Proxy는 수백만 명의 방문자가 있는 서비스에 로드 밸런서로 활용될 수 있다. 특정 서버가 동시에 많은 요청을 처리하게 되면 여러 문제들이 발생 할 수 있는데, 로드 밸런서가 트래픽을 준비된 서버 그룹에 골고루 분산시켜 해당 문제를 해결 할 수 있다.

Reverse Proxy는 로드 밸런서로서의 역할 뿐만 아니라 보안을 위해서도 필요하다. Reverse Proxy를 통해서만 네트워크에 액세스할 수 있게하여 악의적인 공격을 차단하는 등 웹사이트에 보안유연성을 추가할 수 있다.

[그림3] Reverse Proxy









2. Load Balancing


서버의 확장

서버에 대한 요청이 많을 때는 문제가 발생할 수 있다. 서버는 작업을 처리할 때 사용할 수 있는 자원이 정해져 있기 때문이다. 한 사람이 두 명이 되어 동시에 일을 두 배로 할 수 없듯, 서버가 일을 할 때에도 처리할 수 있는 요청에 대한 한계가 존재한다. 하지만 개발자들은 항상 더 많은 사람들이 서비스를 이용하기를 원한다.

하루 평균 약 백 여 명이 이용할 수 있도록 설계된 인프라가 마케팅 전략을 통해 갑자기 하루에 1만 명의 유저를 감당해야 한다고 가정할 때, 사용하던 인프라를 그대로 유지하면서 원활한 서비스를 제공하는 것은 매우 어렵다. 이런 상황에서 Scale-up방식으로의 확장 또는 Scale-out방식의 확장을 선택할 수 있다.

Scale-up 방식은 서버의 성능을 높이는 방식이다. 쉽게 말해 기존 컴퓨터보다 사양이 훨씬 좋은 컴퓨터로 바꾸는 것이다. 기존보다 컴퓨터의 사양이 더 좋아졌기 때문에 서버는 더 많은 일을 할 수 있게 된다.

Scale-out 방식은 동일하거나 비슷한 성능의 서버를 추가하여 여러 대의 서버를 운용하는 방식이다. 즉, 요청을 처리할 수 있는 컴퓨터를 여러 대를 두어서 일을 분산 시키는 것이다. 보통 서버를 확장할 때는 Scale-out 방식을 선호하는데, 그 이유로는 하드웨어 성능을 높이는 비용보다 값싼 서버를 한대 더 추가하는 방법이 보통 더 적은 비용이 들고, 여러 대의 서버를 운용하면서 서비스를 중단없이 운영할 수 있다는 장점이 있기 때문이다.

[그림4] Server의 Scale Out



Load Balancer

Load Balancer(로드 밸런서)Reverse Proxy의 일종으로 여러 대의 서버에게 요청을 균등하게 분산시켜주는 역할을 한다.

서비스 이용자가 증가하여 scale out 방식으로 서버를 확장 했는데, 하나의 서버에만 요청이 집중 된다면 서버를 확장하기 전과 다를게 없는 시스템이다. 그렇기 때문에 로드 밸런서를 활용하여 우리가 운용중인 서버들에게 요청을 분산 시켜주는 작업이 필요하다.

로드 밸런서는 유저의 접속과 사용을 통해 발생하는 트래픽(http request)들을 모두 1차적으로 처리한다. 1차적으로 요청들을 처리하고 난 뒤, 로드 밸런서는 서비스를 운영하고 있는 서버들로 요청을 분배한다.

[그림5] Load Balancer을 이용한 안정적인 Server 운용

로드 밸런서를 사용하면 요청이 고르게 분배되 많은 요청을 동시에 처리할 수 있게 해주는 장점 외에도 Fault Tolerant System(결함 감내 시스템)을 구축 할 수 있다.

예를 들어, 운영되고 있는 서버 3개 중 하나가 어떠한 결함이나 에러로 운영 중단됐다고 가정해보자. 이때 로드 밸런서는 자동으로 정상 작동하는 나머지 두 개의 서버에만 요청을 분배한다. 이러면 실제 요청을 보내는 사용자는 서버들 중 하나가 운영 중단이 되었어도 정상적으로 서비스를 이용할 수 있다. 그 사이에 개발자들은 운영 중단 되었던 서버를 고쳐 정상적으로 작동 시키고, 로드 밸런서는 다시 해당 서버를 포함하여 모든 서버들에 요청을 분배하는 구조다.

이런 로드 밸런서의 장점을 통해 시스템을 이용할 수 없는 시간을 의미하는 Down Time없이 서비스 운영 및 배포하는 것이 가능해진다.






3. Summary


  • Proxy는 서버와 서버 사이에서 목적에 따라 특정 서버들을 대신해 여러가지 작업을 수행해주는 중개 서버이며, 역할에 따라 Forward ProxyReverse Proxy가 있다.
  • Forward Proxy는 서버 또는 사용자를 대신하여 특정 작업들을 처리해주는 작업을 수행한다.
  • Reverse Proxy는 서버에 대한 접근을 제어하여 데이터 암호화 및 암호 해독, 인증 작업, 정보 캐싱 및 Load Balancer(로드 밸런서) 등의 역할을 수행한다.
  • Scale Out 방식의 확장은 요청을 처리할 수 있는 서버를 늘려 일은 분산 시키는 방식이며, Load Balancer를 통해 구현 할 수 있다.
  • Load BalancerReverse Proxy의 일종이며, 운영 중인 여러 대의 서버에게 요청을 균등하게 분산시켜주는 역할을 한다.
  • Load Balancer를 이용하면 Down Time 없이 서비스를 운영하고 배포할 수 있다.
profile
helloworld

0개의 댓글