프록시, 로드 밸런서, CDN: 핵심 개념과 활용

민준·2024년 12월 31일

프록시를 사용하는 이유

  1. 보안 강화: 클라이언트의 실제 IP를 숨겨 익명성을 보장합니다.
    방화벽 역할로 외부 공격을 차단할 수 있습니다.

  2. 속도 향상(캐싱): 요청에 대한 응답 데이터를 캐싱하여, 동일 요청 시 서버에 다시 요청하지 않고 즉시 반환합니다. (외부 트래픽 절감과 네트워크 병목 현상 방지 효과.)

  3. 접근 제어(ACL): 특정 사용자나 IP가 특정 자원에 접근하지 못하도록 제한할 수 있습니다.

  4. 로깅 및 모니터링: 네트워크 사용량이나 특정 사용자의 웹 활동을 기록하여 분석 자료로 활용.

  5. 지역 제한 우회: 특정 국가에서 차단된 웹사이트에 접속할 때, 다른 국가의 프록시를 통해 우회 가능.


프록시의 종류

프록시는 크게 두 가지로 나뉩니다:

  1. Forward Proxy(클라이언트 측 프록시):
    클라이언트 측에 위치하여 사용자의 요청을 서버로 전달합니다.
    주로 클라이언트 IP 은닉, 접근 제한 우회, 캐싱 등을 위해 사용됩니다.

  2. Reverse Proxy(서버 측 프록시):
    서버 측에 위치하여 서버를 대신해 요청을 처리합니다.
    주로 로드밸런싱, 보안 강화, 서버 보호, 캐싱에 활용됩니다.


1. Forward Proxy (클라이언트 측 프록시)

클라이언트(웹 브라우저)와 서버 간의 중계자로, 클라이언트 요청을 서버로 전달하며 요청에 대한 세부적인 작업을 수행

  1. IP 은닉(익명성 보장) : 클라이언트의 IP를 숨기고 프록시 서버의 IP로 요청. 이로써 클라이언트는 익명성을 보장 받고, 원 서버는 클라이언트의 실제 정보를 알 수 없음.

  2. 접근 제한 우회(Bypass): 지역 차단된 콘텐츠나 블록된 IP를 우회하여 접속.(지역제한 우회, IP차단 우회)

  3. 접근 제어 : 클라이언트의 요청을 제어(특정 웹 페이지 접근 차단, IP 기반 접근 제한)

  4. 캐싱: 클라이언트가 자주 요청하는 리소스를 프록시 서버에 저장하여 재사용.


2. Reverse Proxy (서버 측 프록시)

클라이언트 요청을 받아 웹 서버로 전달하고, 서버 응답을 클라이언트로 전달하는 중간 계층 역할을 수행.
주로 웹 서버의 성능을 최적화하고, 보안을 강화하며, 클라이언트와 서버 간의 네트워크 흐름을 관리하기 위해 사용.

2.1. 요청 전달 (Routing 및 로드 밸런싱)

(1). URL/I Mapping
Reverse Proxy는 URI(Uniform Resource Identifier) 기반으로 요청을 적절한 서버 또는 리소스에 Routing합니다.

예: /api 요청은 A 서버로, /static 요청은 B 서버로 전달.

(2). 로드 밸런싱 (Load Balancing)
Reverse Proxy는 다수의 서버에 요청을 분산시켜 웹 서버의 부하를 완화합니다.

  • 역할
    트래픽을 여러 서버에 분배하여 과부하 방지.

    특정 서버가 장애 발생 시 다른 서버로 트래픽을 자동 재할당.

  • 방식
    Round Robin: 순서대로 요청 분배.

    Least Connections: 가장 적은 연결 상태의 서버에 요청 전달.

    IP Hashing: 클라이언트 IP를 기반으로 요청을 특정 서버에 전달.

(3). 고가용성 (High Availability)
Reverse Proxy는 서버의 동적 확장(Scale Out)을 지원합니다.

필요 시 서버를 추가로 배치하고, 로드 밸런서를 통해 자동으로 요청을 분산.

이는 SRE(Site Reliability Engineering) 담당자의 주요 업무 중 하나로, 서비스의 안정성과 성능을 높이는 핵심 역할.


2.2. 요청 변환(Header 설정 및 변환)

Reverse Proxy는 클라이언트와 서버 간의 요청 데이터를 변환하거나 추가 정보를 부가하여 처리

(1). X-FORWARDED-FOR 헤더

  • 동작 원리:
    Reverse Proxy는 원 클라이언트의 IP를 X-FORWARDED-FOR 헤더를 통해 웹 서버에 전달합니다.

    X-FORWARDED-FOR: 192.168.1.1, 203.0.113.1, 203.0.113.2
    • 가장 오른쪽 값(203.0.113.2)은 실제 클라이언트 IP.
    • 나머지는 프록시 서버(중계자)의 IP.
  • 이점:
    원 클라이언트 추적이 가능하며, 네트워크 흐름 분석에 유용.


2.3. 서버은닉

Reverse Proxy는 웹 서버의 실제 IP 주소를 숨기고, 클라이언트는 Reverse Proxy의 IP 주소만 알 수 있도록 설정

  • 보안적 이점
  1. 직접 공격 방지:
    클라이언트는 원 서버에 직접 접근할 수 없으므로, DDoS 공격 또는 취약점 스캔 등으로부터 서버를 보호.

  2. 네트워크 구조 보호:
    서버의 네트워크 설정 및 내부 정보가 외부에 노출되지 않음.


2.4. 서버 접근 제어 (요청 필터링)

Reverse Proxy는 서버로 전달되는 요청을 필터링하여 보안을 강화

(1). DDoS 방지

  • Rate Limiting:

    • 짧은 시간 내 과도한 요청(예: 초당 1000건 이상)을 차단하여 서버의 리소스 고갈 방지.
  • 구현 방법: Nginx 또는 HAProxy 등에서 설정 가능.

  • WAF(Web Application Firewall)

    • 악성 요청(IP, 크롤러 등)을 식별하고 차단.
    • Honeypot 데이터베이스에 저장된 악성 IP 리스트 활용 가능.
    • Custom 설정: 특정 악성 봇이나 크롤링 시도를 차단.

(2). Response Max Size : 응답 크기 제한
응답 데이터 크기가 설정된 최대 크기를 초과할 경우 요청을 차단.
(예: Nginx에서 client_max_body_size로 설정 가능)

(3). 타임아웃 설정
클라이언트의 요청이 특정 시간(예: 10초) 내에 완료되지 않으면 연결을 끊어 리소스 낭비 방지.
(Nginx에서 proxy_read_timeout 등으로 설정 가능)


2.5. 보안:HTTPS

Reverse Proxy는 클라이언트와 서버 간의 보안을 강화하는 데 중요한 역할을 합니다.

(1). HTTPS 통신
HTTPS(SSL/TLS) 인증서를 Reverse Proxy에 설정하여 클라이언트와 서버 간 통신을 암호화합니다.

  • 중앙 집중 관리:
    모든 서버가 개별적으로 인증서를 관리할 필요 없이, Reverse Proxy 하나에 인증서를 설정하여 관리 간소화.

(2). 데이터 캐싱
클라이언트가 자주 요청하는 데이터를 Reverse Proxy에 캐싱하여 빠르게 제공.

  • 이점: 서버 부하 감소, 네트워크 속도 향상.

(3). 네트워크 암호화
클라이언트-프록시, 프록시-서버 간 암호화 통신을 설정하여 데이터 유출 방지.

  • Proxy 서버에 인증서를 설정한 모습

L2 Reverse Proxy: Load Balancer

로드 밸런서(Load Balancer)는 대량의 트래픽에 의한 서버 과부하를 방지하고, 트래픽을 여러 서버로 분산하여 서버의 가용성을 높이는 역할을 합니다.

기본적으로 한 개의 웹 서버만 운영할 경우 다음과 같은 문제가 발생

  1. 대량 트래픽 문제

    문제: 단일 웹 서버에 모든 트래픽이 집중될 경우, 해당 서버의 처리 용량을 초과하여 서버가 다운됩니다.

    해결 방법: 수직적 확장(Vertical Scaling), 수평적 확장(Horizontal Scaling), 로드 밸런서

  2. 배포 이슈
    문제: 새로운 웹 애플리케이션 버전 배포 시, 기존 서버를 정지해야 하거나 새로운 서버의 IP 주소를 설정해야 함.
    이로 인해 서비스 중단 또는 혼란이 발생.

    해결 방법: 로드 밸런서 사용
    클라이언트는 로드 밸런서의 고정된 IP 주소만 호출.
    로드 밸런서는 새 서버를 추가하거나 기존 서버를 제거해도 클라이언트 요청에 영향 없이 동작.


L1 Reverse Proxy: CDN

정방향 프록시 (Forward Proxy)

0개의 댓글