“프록시”는 특정 제품이 아니라 위치를 가리키는 말입니다. 연결의 중간에 자리 잡고 트래픽을 전달하는 무언가를 뜻합니다. 기본 개념은 프록시 서버란 무엇인가에 관한 용어집 항목에서 다룹니다. 이 글에서는 한 단계 더 들어가, 가장 자주 접하는 두 가지 형태인 포워드 프록시와 리버스 프록시를 살펴봅니다. 두 프록시는 같은 원리로 작동하지만, 연결의 서로 반대편을 위해 일합니다.
둘을 혼동하는 것도 무리는 아닙니다. 둘 다 요청을 받아 전달하고, 둘 다 무언가를 숨깁니다. 차이는 누구의 편에 서 있느냐입니다. 포워드 프록시는 클라이언트를 대신하며, 레지덴셜 프록시가 바로 이 방식으로 작동합니다. 리버스 프록시는 서버를 대신하며, 웹사이트 앞단에서 Nginx나 CDN이 하는 일이 여기에 해당합니다. 프록시가 어느 쪽을 위해 일하는지 알면 나머지는 자연스럽게 이해됩니다.
한 문장으로 보는 차이
- 포워드 프록시는 클라이언트 앞에 위치합니다. 클라이언트가 스스로 트래픽을 프록시로 보내기로 선택하며, 웹사이트는 클라이언트의 IP 주소 대신 프록시의 IP 주소를 보게 됩니다.
- 리버스 프록시는 서버 앞에 위치합니다. 클라이언트는 이것이 웹사이트라고 생각하고 접속하며, 어느 백엔드 서버가 응답할지는 리버스 프록시가 결정합니다.
즉, 포워드 프록시는 서버로부터 클라이언트를 숨기고, 리버스 프록시는 클라이언트로부터 서버를 숨깁니다.
포워드 프록시의 작동 방식
포워드 프록시는 클라이언트 측에서 설정합니다. 브라우저, 운영체제 설정, 스크립트 또는 스크레이핑 도구에 프록시 주소를 입력하면, 그때부터 요청은 먼저 프록시로 전달됩니다.
- 클라이언트가 프록시에 접속하고, 대부분의 상용 서비스에서는 사용자 이름과 비밀번호로 인증합니다.
- HTTPS 사이트의 경우 클라이언트는 프록시에 목적지까지의 터널을 열어 달라고 요청합니다. 프록시는 목적지에 연결한 뒤 암호화된 데이터를 읽지 않고 그대로 중계합니다.
- 목적지는 연결이 프록시의 IP 주소에서 들어오는 것으로 보기 때문에, 위치 판단, 평판, 요청 제한을 사용자의 주소가 아니라 그 주소에 적용합니다.
기업들은 수십 년 전부터 직원들이 웹에서 접속하는 대상을 필터링하고 기록하기 위해 포워드 프록시를 운영해 왔습니다. 상용 프록시 시장 역시 포워드 프록시로 이루어져 있습니다. 레지덴셜 프록시나 ISP 프록시 서비스는 필요한 지역의 출구 IP 주소를 제공하고, 사용자가 방문하는 웹사이트는 그 주소를 보게 됩니다. 많은 제공업체가 대규모 풀 앞에 단일 게이트웨이를 두고 요청마다 출구를 대신 선택해 주는데, 이것이 백커넥트 모델입니다. 이를 “리버스 로테이팅 프록시”라는 이름으로 검색하는 경우도 있지만, 여전히 포워드 프록시입니다. 클라이언트인 사용자를 대신해 일하기 때문입니다.
리버스 프록시의 작동 방식
리버스 프록시는 서버 측에서 설정하며, 클라이언트는 대개 그 존재를 알지 못합니다. 웹사이트의 DNS 레코드가 리버스 프록시를 가리키므로 모든 방문자는 리버스 프록시에 접속합니다.
- 방문자의 브라우저가 웹사이트라고 생각하는 곳에 접속합니다.
- 리버스 프록시는 보통 TLS를 종료하고 요청을 읽은 뒤, 어느 백엔드 서버나 어느 서비스로 보낼지, 혹은 캐시에서 바로 응답할지를 결정합니다.
- 선택한 백엔드로 요청을 전달하며, 이때 애플리케이션이 방문자의 실제 IP 주소를 알 수 있도록
X-Forwarded-For같은 헤더를 추가하는 경우가 많습니다. - 백엔드의 응답을 마치 자신이 만든 것처럼 방문자에게 돌려줍니다.
Nginx, HAProxy, Envoy, Traefik이 대표적인 리버스 프록시이며, CDN과 DDoS 방어 서비스도 전 세계 규모에서 같은 방식으로 작동합니다. 리버스 프록시를 운영하는 이유로는 여러 서버 간 부하 분산, TLS 인증서를 한곳에서 관리할 수 있다는 점, 캐싱, 압축, 그리고 공격을 흡수하고 악성 트래픽이 애플리케이션에 닿기 전에 차단하는 보호 계층 역할을 들 수 있습니다.
나란히 비교하기
| 포워드 프록시 | 리버스 프록시 | |
|---|---|---|
| 누구를 대신하는가 | 클라이언트 | 서버 |
| 누가 설정하는가 | 사용자 또는 사용자의 회사 | 웹사이트 운영자 |
| 누가 존재를 아는가 | 클라이언트 | 운영자. 방문자는 대개 모름 |
| 상대편이 보는 것 | 클라이언트 대신 프록시의 IP | 실제 서버 대신 프록시 |
| 대표적인 소프트웨어 또는 서비스 | Squid, 기업용 게이트웨이, 레지덴셜 프록시 및 ISP 프록시 서비스 | Nginx, HAProxy, Envoy, CDN, 웹 애플리케이션 방화벽 |
| 대표적인 용도 | 위치별 테스트, 데이터 수집, 접근 통제, 목적지에 대한 프라이버시 보호 | 부하 분산, TLS, 캐싱, 공격 방어 |
세 번째 유형인 투명 프록시는 클라이언트가 아무것도 설정하지 않아도 트래픽을 가로챕니다. 호텔이나 학교 네트워크가 그 예입니다. 투명 프록시는 사용자가 아니라 네트워크 운영자를 대신해 일하며, 위에서 설명한 포워드와 리버스의 구분을 바꾸지는 않습니다.
포워드 프록시가 필요한 경우
자신이 보내는 트래픽이 다른 웹사이트에 어떻게 보이는지가 문제라면 포워드 프록시가 필요합니다.
- 다른 국가나 도시에서 보이는 사이트 모습을 확인해야 하는 경우. 가격, 검색 결과, 광고, 콘텐츠는 위치에 따라 달라지며, 해당 지역의 IP 주소가 있어야만 현지 버전을 볼 수 있습니다.
- 공개 웹 데이터를 대량으로 수집하는 경우. 요청을 여러 레지덴셜 IP 주소에 분산하면, 사이트가 IP별로 적용하는 요청 제한을 어느 한 주소도 넘지 않게 할 수 있습니다.
- 한 위치를 유지해야 하는 계정을 관리하는 경우. 이때는 ISP 프록시 모델이 적합합니다. 각 프록시는 결제 기간 내내 선택한 도시와 ISP에 머무르며, 사용자 이름도 그대로 유지됩니다.
- 회사가 외부로 나가는 접속을 통제하는 경우. 기업용 포워드 프록시는 정책을 적용하고 네트워크 밖으로 나가는 트래픽을 기록합니다.
프로토콜 선택은 프록시 유형 선택과는 별개의 문제입니다. 이에 대해서는 HTTP 프록시와 SOCKS5 프록시 비교 가이드에서 다룹니다.
리버스 프록시가 필요한 경우
들어오는 트래픽이 자신의 서버에 어떻게 도달하는지가 문제라면 리버스 프록시가 필요합니다.
- 백엔드 서버를 두 대 이상 운영하면서 부하를 분산하고, 한 대가 다운되어도 서비스를 유지해야 하는 경우.
- TLS, 리디렉션, 압축, 캐싱을 한곳에서 처리하고 싶은 경우.
- 요청이 애플리케이션에 닿기 전에 트래픽 폭주와 악성 봇으로부터 보호받고 싶은 경우.
- 여러 내부 서비스를 하나의 도메인 아래에 노출하고 싶은 경우. 예를 들어
/api와/app이 있습니다.
웹사이트만 운영한다면 필요한 것은 포워드 프록시가 아니라 리버스 프록시이며, 호스팅 제공업체나 CDN이 대신 운영해 주는 경우가 많습니다.
둘 다 필요한 경우
트래픽의 방향에 따라 둘 다 운영하는 회사도 많습니다. 예를 들어 가격 인텔리전스 팀은 모니터링하는 시장의 포워드 프록시를 통해 외부 수집 트래픽을 보내고, 고객이 사용하는 대시보드와 API 앞에는 리버스 프록시를 둡니다.
포워드 프록시로 보내는 모든 요청에서도 두 프록시는 만나게 됩니다. 대부분의 대형 웹사이트는 애플리케이션보다 먼저 방문자를 검사하는 리버스 프록시나 CDN 뒤에 있습니다. 바로 이 엣지 계층이 사용자의 포워드 프록시를 평가합니다. IP 주소의 평판과 유형, 그 주소에서 들어오는 요청의 수, 그리고 연결이 실제 브라우저처럼 보이는지를 확인합니다. 그래서 프록시 소프트웨어보다 출구 IP가 더 중요하며, 데이터센터 대역에서 온 요청이 가정용 회선에서 온 요청보다 훨씬 자주 검증을 요구받습니다.
자주 묻는 질문
VPN은 포워드 프록시인가요?
클라이언트를 대신하고 웹사이트로부터 클라이언트의 IP 주소를 숨긴다는 점에서 비슷한 역할을 합니다. 다만 VPN은 보통 네트워크 수준에서 기기의 모든 트래픽을 전달하는 반면, 포워드 프록시는 애플리케이션별 또는 요청별로 설정합니다.
로드 밸런서는 리버스 프록시인가요?
HTTP 수준에서 작동하는 로드 밸런서는 대부분 리버스 프록시입니다. 클라이언트의 연결을 받아들이고 이를 전달할 백엔드를 선택하기 때문입니다. 일부 로드 밸런서는 더 낮은 수준에서 패킷만 라우팅하므로 다른 종류의 도구로 봐야 합니다.
하나의 서버가 포워드 프록시와 리버스 프록시 역할을 모두 할 수 있나요?
네. Nginx나 Squid 같은 소프트웨어는 어느 쪽으로든 설정할 수 있으며, 둘 다 수행하는 구성도 있습니다. 역할은 소프트웨어가 아니라 설정과, 프록시가 누구의 트래픽을 처리하는지에 따라 정해집니다.
레지덴셜 프록시는 포워드 프록시인가요, 리버스 프록시인가요?
포워드 프록시입니다. 클라이언트에서 설정하고, 사용자를 대신해 작동하며, 방문하는 웹사이트는 사용자의 IP 주소 대신 레지덴셜 출구 IP 주소를 보게 됩니다.
결론
프록시가 누구의 편에 서 있는지 물어보십시오. 방문하는 웹사이트에 대해 사용자를 대변한다면 포워드 프록시이며, 중요한 것은 그 프록시가 제공하는 IP 주소입니다. 방문자에 대해 웹사이트를 대변한다면 리버스 프록시이며, 부하, 보안, 속도를 위한 것입니다. 웹에서 데이터를 수집하는 팀 대부분에게는 전자가 필요하고, 웹사이트를 운영하는 팀 대부분은 이미 후자를 갖추고 있습니다. Shifter의 포워드 프록시는 shifter.io/order에서 무료 체험을 제공하므로, 요금제를 선택하기 전에 관심 있는 사이트에서 직접 테스트해 볼 수 있습니다.