Networking, Security, Protocols

Reverse Proxy(역방향 프록시)란?

Somaz 2024. 11. 13. 11:11
728x90
반응형

Overview

오늘날의 웹 아키텍처는 단일 서버를 넘어서 다수의 백엔드 서비스와 로드 밸런싱, 보안 처리, 캐싱 등의 기능을 요구한다. 이러한 요구사항을 충족시키기 위해 사용되는 핵심 구성 요소 중 하나가 바로 Reverse Proxy(역방향 프록시)이다.


Reverse Proxy는 클라이언트와 백엔드 서버 사이에 위치하여 요청을 중계하고, 로드 밸런싱, SSL 종료, 캐싱, 보안 강화 등의 다양한 기능을 수행함으로써 시스템 전체의 성능과 안정성을 높여준다.

 

본 글에서는 Reverse Proxy의 개념과 Forward Proxy와의 차이, 주요 기능, 그리고 대표적인 도구인 Nginx와 HAProxy의 구성 예제를 통해 실전에서 어떻게 활용되는지를 살펴본다.

 

 

 

 

 


 

 

 

Reverse Proxy란?

역방향 프록시(Reverse Proxy) 는 웹 서버 앞에서 클라이언트(예: 웹 브라우저) 요청을 웹 서버에 전달하는 서버의 한 유형이다. 역방향 프록시와 순방향 프록시의 주요 차이점은 서비스의 방향에 있다. 순방향 프록시(Forward Proxy)는 사용자와 인터넷의 방대한 자원 사이의 게이트웨이 역할을 하는 반면, 역방향 프록시는 인터넷과 더 작은 서버 그룹 사이의 게이트웨이 역할을 한다.

 

 

Reverse Proxy의 기능

  • 로드 밸런싱(Load Balancing): 클라이언트 요청을 여러 서버에 분산하여 로드 균형을 조정하여 리소스의 속도와 안정성을 향상시킨다.
  • 글로벌 서버 로드 밸런싱(Global Server Load Balancing): 여기에는 클라이언트의 지리적 위치를 기반으로 가장 가까운 서버로 클라이언트 요청을 라우팅하여 사용자 응답 시간을 향상시키는 작업이 포함된다.
  • SSL 암호화(SSL Encryption): SSL 인증서 관리를 개별 서버에서 관리하는 대신 한 곳에서 중앙 집중화한다.
  • 콘텐츠 캐싱(Caching Content): 웹 서버에서 캐시된 정적 및 동적 콘텐츠를 제공하여 서버 로드를 줄인다.
  • 압축(Compression): 파일을 클라이언트에 보내기 전에 압축하여 응답 대역폭을 줄인다.
  • 보안 및 익명성(Security and Anonymity): 백엔드 서버의 특성과 출처를 숨겨 보안을 제공한다.

 

 

 

Reverse Proxy vs Forward Proxy

Feature Reverse Proxy Forward Proxy
Definition 서버를 대신하여 클라이언트 요청을 처리하고 이를 적절한 백엔드 서버에 배포한다. 클라이언트를 대신하여 외부 서버에 요청을 보낸다.
Typical Usage 서버 인프라를 위한 로드 밸런싱, 보안, 캐싱. 클라이언트 액세스를 위한 네트워크 보안, 개인 정보 보호 및 콘텐츠 필터링.
Client’s View 클라이언트는 일반적으로 역방향 프록시의 존재를 인식하지 못한다. 메인 서버로 나타난다. 클라이언트는 외부 리소스에 액세스하기 위해 명시적으로 정방향 프록시를 사용하도록 구성된다.
Direction of Traffic 클라이언트로부터 들어오는 요청을 수신하여 백엔드 서버로 전달한다. 내부 클라이언트로부터 요청을 받아 외부 서버로 전달합니다.
Location in Network 백엔드 서버 근처, 주로 데이터 센터 내에 배치된다. 클라이언트 장치 근처 또는 네트워크 가장자리(예: 회사 방화벽)에 배치된다.
Primary Purpose 백엔드 서비스의 확장성, 성능, 보안 및 안정성을 향상한다. 클라이언트에게 익명성을 제공하고 콘텐츠를 필터링하며 인터넷 액세스를 제어한다.
Load Balancing 여러 백엔드 서버에서 로드 밸런싱을 수행하는 경우가 많다. 일반적으로 로드 밸런싱을 수행하지 않는다. 주요 목적은 클라이언트 요청을 중계하는 것이다.
Caching 반복되는 클라이언트 요청을 최적화하기 위해 백엔드 서버의 응답을 캐시한다. 자주 액세스하는 인터넷 리소스를 캐시하여 클라이언트의 액세스 속도를 향상시킬 수 있다.
Access Control 백엔드 서버에 대한 액세스를 제어하고 내부 구조를 숨긴다. 종종 정책을 기반으로 외부 리소스에 대한 클라이언트의 액세스를 제어한다.
Common Use Cases 웹 애플리케이션, CDN 및 서비스에서 클라이언트 트래픽을 처리하고 보안을 강화하며 로드 균형을 조정하는 데 사용된다. 클라이언트 인터넷 액세스를 모니터링, 제한 또는 익명화하려는 조직, 학교 또는 네트워크에서 사용된다.

 

  • Reverse Proxy Network
    • 클라이언트는 역방향 프록시에 요청을 보내고, 이 요청은 적절한 백엔드 서버로 전달된다. 역방향 프록시는 클라이언트의 백엔드 인프라를 마스크하고 로드 밸런싱, 캐싱 및 보안을 제공하는 경우가 많다.

 

  • Forward Proxy Network
    • 내부 클라이언트는 정방향 프록시로 요청을 보내고, 이 프록시는 클라이언트를 대신하여 해당 요청을 외부 서버로 전달한다. 정방향 프록시는 보안, 개인정보 보호, 때로는 콘텐츠 필터링을 제공하여 외부 서버로부터 클라이언트를 보호한다.

 

 

 

 

 

 

 

Reverse Prxoy 도구의 예: Nginx

Nginx는 웹 서버, 로드 밸런서, HTTP 캐시 및 메일 프록시로 사용되는 것 외에도 세계에서 가장 인기 있는 역방향 프록시 서버 중 하나이다. 고성능, 안정성, 풍부한 기능 세트, 간단한 구성 및 낮은 리소스 소비로 잘 알려져 있다.

http {
    upstream backend {
        server backend1.example.com weight=5;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass <http://backend>;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}
  • `upstream backend` 는 서로 다른 가중치를 갖는 서버 백엔드 그룹을 정의한다(지정되지 않은 경우 각각의 가중치는 동일함). 이를 통해 Nginx는 트래픽을 다른 서버로 전달할 뿐만 아니라 가중치가 더 높은 서버에 더 많은 트래픽을 할당함으로써 로드를 분산할 수 있다.
  • `proxy_pass` 지시어는 요청을 업스트림 서버 그룹에 전달한다.
  • `proxy_set_header` 지시문은 백엔드 서버에 전달되는 요청 헤더를 수정합니다. 여기에는 실제 클라이언트 IP 주소 및 기타 세부 정보를 백엔드로 전달하는 것이 포함될 수 있다.

 

 

 

 

Reverse Prxoy 도구의 예: Haproxy

global
    log /dev/log local0
    log /dev/log local1 notice
    maxconn 2000
    user haproxy
    group haproxy

defaults
    log global
    mode tcp
    retries 3
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend kubernetes-frontend
    bind 10.0.71.50:6443 
    default_backend kubernetes-backend

backend kubernetes-backend
    balance roundrobin
    option tcp-check
    server dh-master-1 10.0.71.51:6443 check fall 3 rise 2
    server dh-master-2 10.0.71.52:6443 check fall 3 rise 2
    server dh-master-3 10.0.71.53:6443 check fall 3 rise 2
  • globaldefaults 섹션:
    • log: 로그 설정을 통해 HAProxy의 로그 정보를 /dev/log에 저장한다.
    • maxconn 2000: 최대 2000개의 연결을 허용한다.
    • mode tcp: TCP 모드로 설정하여 HTTP가 아닌 일반 TCP 연결을 처리하도록 한다.
    • timeout 설정: 클라이언트, 서버, 그리고 연결 시간에 대한 타임아웃을 설정한다.

 

  • frontend kubernetes-frontend:
    • bind 10.0.71.50:6443: HAProxy가 이 IP와 포트(10.0.71.50:6443)에서 클라이언트 요청을 수신한다.
    • default_backend kubernetes-backend: 모든 수신된 요청을 kubernetes-backend로 전달한다.

 

  • backend kubernetes-backend:
    • balance roundrobin: 라운드 로빈 방식으로 요청을 각 백엔드 서버에 순차적으로 분배한다.
    • option tcp-check: 백엔드 서버의 TCP 상태를 주기적으로 확인하여 정상 작동 여부를 모니터링한다.
    • server 설정: dh-master-1, dh-master-2, dh-master-3 세 개의 백엔드 서버에 대해 IP와 포트(10.0.71.51:6443, 10.0.71.52:6443, 10.0.71.53:6443)로 연결을 설정한다. check 옵션은 서버의 상태를 확인하며, fall 3 및 rise 2는 서버 상태 변화를 감지하는 임계치를 설정한다.

 

 

 

 


 

 

 

마무리

Reverse Proxy는 단순한 트래픽 전달자를 넘어, 현대 웹 서비스 운영에 필수적인 보안성, 확장성, 가용성을 제공하는 핵심 인프라 구성 요소이다.


Nginx와 HAProxy는 각각 HTTP 및 TCP 기반의 다양한 사용 사례에 적합한 역방향 프록시 도구로서, 실제 운영 환경에서도 널리 채택되고 있다. 로드 밸런싱, 캐싱, SSL 종단 처리 등 다양한 기능을 프록시 레벨에서 수행함으로써 백엔드 서비스는 더 간단한 구조로 유지될 수 있으며, 장애나 부하 상황에서도 유연하게 대응할 수 있다.

 

 

서비스 트래픽이 증가하거나 보안 요구사항이 복잡해질수록, Reverse Proxy의 도입과 활용은 단순한 선택이 아닌 필수가 되어가고 있다.
자신의 서비스 환경에 적합한 프록시 아키텍처를 설계하고 적용해보는 것이 안정적인 인프라 운영의 첫걸음이 될 것이다.

 

 

 

 

 

 


Reference

 

 

 

 

728x90
반응형

'Networking, Security, Protocols' 카테고리의 다른 글

haproxy 개념 및 구성 가이드  (0) 2024.04.09
Cilium이란?  (2) 2024.02.06
Vault 설치와 사용법  (2) 2024.01.24
Curl(Client URL)이란?  (0) 2023.05.26
SSID(Service Set Identifier)란?  (0) 2023.04.05