
보안 강화: 클라이언트의 실제 IP를 숨겨 익명성을 보장합니다.
방화벽 역할로 외부 공격을 차단할 수 있습니다.
속도 향상(캐싱): 요청에 대한 응답 데이터를 캐싱하여, 동일 요청 시 서버에 다시 요청하지 않고 즉시 반환합니다. (외부 트래픽 절감과 네트워크 병목 현상 방지 효과.)
접근 제어(ACL): 특정 사용자나 IP가 특정 자원에 접근하지 못하도록 제한할 수 있습니다.
로깅 및 모니터링: 네트워크 사용량이나 특정 사용자의 웹 활동을 기록하여 분석 자료로 활용.
지역 제한 우회: 특정 국가에서 차단된 웹사이트에 접속할 때, 다른 국가의 프록시를 통해 우회 가능.
프록시는 크게 두 가지로 나뉩니다:
Forward Proxy(클라이언트 측 프록시):
클라이언트 측에 위치하여 사용자의 요청을 서버로 전달합니다.
주로 클라이언트 IP 은닉, 접근 제한 우회, 캐싱 등을 위해 사용됩니다.
Reverse Proxy(서버 측 프록시):
서버 측에 위치하여 서버를 대신해 요청을 처리합니다.
주로 로드밸런싱, 보안 강화, 서버 보호, 캐싱에 활용됩니다.
클라이언트(웹 브라우저)와 서버 간의 중계자로, 클라이언트 요청을 서버로 전달하며 요청에 대한 세부적인 작업을 수행
IP 은닉(익명성 보장) : 클라이언트의 IP를 숨기고 프록시 서버의 IP로 요청. 이로써 클라이언트는 익명성을 보장 받고, 원 서버는 클라이언트의 실제 정보를 알 수 없음.
접근 제한 우회(Bypass): 지역 차단된 콘텐츠나 블록된 IP를 우회하여 접속.(지역제한 우회, IP차단 우회)
접근 제어 : 클라이언트의 요청을 제어(특정 웹 페이지 접근 차단, IP 기반 접근 제한)
캐싱: 클라이언트가 자주 요청하는 리소스를 프록시 서버에 저장하여 재사용.
클라이언트 요청을 받아 웹 서버로 전달하고, 서버 응답을 클라이언트로 전달하는 중간 계층 역할을 수행.
주로 웹 서버의 성능을 최적화하고, 보안을 강화하며, 클라이언트와 서버 간의 네트워크 흐름을 관리하기 위해 사용.
(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) 담당자의 주요 업무 중 하나로, 서비스의 안정성과 성능을 높이는 핵심 역할.
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
이점:
원 클라이언트 추적이 가능하며, 네트워크 흐름 분석에 유용.
Reverse Proxy는 웹 서버의 실제 IP 주소를 숨기고, 클라이언트는 Reverse Proxy의 IP 주소만 알 수 있도록 설정
직접 공격 방지:
클라이언트는 원 서버에 직접 접근할 수 없으므로, DDoS 공격 또는 취약점 스캔 등으로부터 서버를 보호.
네트워크 구조 보호:
서버의 네트워크 설정 및 내부 정보가 외부에 노출되지 않음.
Reverse Proxy는 서버로 전달되는 요청을 필터링하여 보안을 강화
(1). DDoS 방지
Rate Limiting:
구현 방법: Nginx 또는 HAProxy 등에서 설정 가능.
WAF(Web Application Firewall)
(2). Response Max Size : 응답 크기 제한
응답 데이터 크기가 설정된 최대 크기를 초과할 경우 요청을 차단.
(예: Nginx에서 client_max_body_size로 설정 가능)
(3). 타임아웃 설정
클라이언트의 요청이 특정 시간(예: 10초) 내에 완료되지 않으면 연결을 끊어 리소스 낭비 방지.
(Nginx에서 proxy_read_timeout 등으로 설정 가능)
Reverse Proxy는 클라이언트와 서버 간의 보안을 강화하는 데 중요한 역할을 합니다.
(1). HTTPS 통신
HTTPS(SSL/TLS) 인증서를 Reverse Proxy에 설정하여 클라이언트와 서버 간 통신을 암호화합니다.
(2). 데이터 캐싱
클라이언트가 자주 요청하는 데이터를 Reverse Proxy에 캐싱하여 빠르게 제공.
(3). 네트워크 암호화
클라이언트-프록시, 프록시-서버 간 암호화 통신을 설정하여 데이터 유출 방지.

로드 밸런서(Load Balancer)는 대량의 트래픽에 의한 서버 과부하를 방지하고, 트래픽을 여러 서버로 분산하여 서버의 가용성을 높이는 역할을 합니다.
기본적으로 한 개의 웹 서버만 운영할 경우 다음과 같은 문제가 발생
대량 트래픽 문제
문제: 단일 웹 서버에 모든 트래픽이 집중될 경우, 해당 서버의 처리 용량을 초과하여 서버가 다운됩니다.
해결 방법: 수직적 확장(Vertical Scaling), 수평적 확장(Horizontal Scaling), 로드 밸런서
배포 이슈
문제: 새로운 웹 애플리케이션 버전 배포 시, 기존 서버를 정지해야 하거나 새로운 서버의 IP 주소를 설정해야 함.
이로 인해 서비스 중단 또는 혼란이 발생.
해결 방법: 로드 밸런서 사용
클라이언트는 로드 밸런서의 고정된 IP 주소만 호출.
로드 밸런서는 새 서버를 추가하거나 기존 서버를 제거해도 클라이언트 요청에 영향 없이 동작.