본문 바로가기
프로그래밍/Computer Science(CS)

프록시 패턴(proxy pattern)

by devpcmini 2024. 3. 6.

프록시 패턴이란?

다양한 상황에서 객체 간 상호작용을 제어하고 향상시키는 데 활용되는 유용한 디자인 패턴

 

 

다섯 가지 주요 프록시 유형

 

  • 원격 프록시(Remote Proxy)
    • 원격에 위치한 객체에 안전하게 접근하기 위한 원격 프록시는 네트워크를 통한 객체 호출을 효율적으로 관리한다.
    • 객체 간의 거리를 극복하여 분산 시스템에서의 효과적인 상호작용을 지원한다.
  • 가상 프록시(Virtual Proxy)
    • 비용이 많이 드는 객체의 생성과 초기화를 최적화하여 성능 향상과 자원 효율성을 촉진시킨다.
    • 필요한 경우에만 객체를 생성하므로 불필요한 작업을 최소화한다.
  • 보호 프록시(Protection Proxy)
    • 객체에 대한 접근을 제어하여 특정 권한이 있는 사용자만이 해당 객체에 접근할 수 있다.
    • 응답 속도를 개선하고 불필요한 작업을 방지하여 효율성을 높인다.
  • 캐싱 프록시(Caching Proxy)
    • 동일한 요청이 반복될 때 객체를 호출하는 대신 결과를 캐싱하여 성능을 향상시킨다.
    • 응답 속도를 개선하고 불필요한 작업을 방지하여 효율성을 높인다.
  • 스마트 프록시(Smart Proxy)
    • 부가적인 기능을 제공하거나 객체 사용을 지능적으로 제어하여 코드의 가독성을 향상시키고 유지보수를 용이하게 만든다.
    • 객체의 행동을 동적으로 조작하여 다양한 요구에 대응한다.

프록시 서버란?

서버와 클라이언트 사이에서 클라이언트가 자신을 통하여 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램

 

Nginx를 활용한 프록시 서버 구성

# 로드 밸런싱 설정
upstream backend_servers {
    server 111.111.111.222:80;
    server 222.222.222.222:80;
    server 333.333.333.333:80;
}

# 캐시 디렉토리 및 설정을 정의
proxy_cache_path /my/proxy/cache levels=1:2 keys_zone=devpcmini:10m;

# 리버스 프록시 설정
server {
    listen 80; # 서버가 수신 대기하는 포트 지정
    server_name devpcmini.tistory.com; # 서버에 대한 도메인 지정

    location / { # 모든 요청을 프록시
        proxy_pass http://devpcmini.tistory.com;  # 백엔드 서버의 주소 지정
        # 프록시 서버에서 백엔드 서버로 전달되는 헤더를 설정
        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;
        # 캐싱 구성
        proxy_cache devpcmini;
        proxy_cache_valid 200 302 5m;
        proxy_cache_valid 404 1m;
    }
}

# HTTPS 사용을 위한 SSL 설정
server {
    listen 443 ssl; # SSL을 사용하는 포트 설정
    server_name devpcmini.tistory.com; # 서버에 대한 도메인 지정

	# SSL 인증서와 개인 키의 경로를 지정
    ssl_certificate /my/ssl/path/certificate.crt;
    ssl_certificate_key /my/ssl/path/private.key;

    location / { # 모든 요청을 프록시
        proxy_pass http://devpcmini.tistory.com;  # 백엔드 서버의 주소 지정
        # 프록시 서버에서 백엔드 서버로 전달되는 헤더를 설정
        proxy_set_header Host $real_ip;  
        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 $real_scheme;
        proxy_set_header X-Forwarded-Port $server_port;

        proxy_cache my_cache; //프록시 캐시를 사용하도록 설정
        # 캐시의 유효 기간 설정
        proxy_cache_valid 200 302 5m;  
        proxy_cache_valid 404 1m;
    }
}

 

Nginx를 통한 웹 보안 및 성능 최적화

  • DDoS 공격 방어
    • Nginx는 높은 연결 처리 능력과 리버스 프록시 기능을 통해 DDoS 공격에 강한 성능 제공
    • Rate limiting, Connection limiting, IP blocking 등의 설정을 통해 공격 트래픽을 제어
  • HTTPS 구축
    • SSL/TLS 종단 간 암호화를 지원하여 안전한 통신을 제공
    • SSL 인증서를 설정하고 HTTPS 연결을 통해 데이터의 기밀성과 무결성을 보호
  • CORS 방어
    • Nginx를 사용하여 CORS 헤더를 설정하면 웹 어플리케이션에서 다른 도메인으로의 요청에 대한 접근 통제 가능
    • 필요한 경우 특정 도메인으로부터의 요청만을 허용하도록 CORS 정책을 설정 가능
  • 로드 밸런싱
    • 여러 백엔드 서버로 트래픽을 분산시켜 가용성을 향상시키고, 서버 부하를 고르게 분배함으로써 안정적인 서비스를 제공