Reverse Proxy
2024. 12. 15. 12:23ㆍSpring Microservice
리버스 프록시(Reverse Proxy)란?
리버스 프록시는 클라이언트와 서버 사이에 위치하여 클라이언트의 요청을 대신 처리하고, 요청에 따라 적절한 서버로 전달하는 중간 서버를 말합니다. 클라이언트는 리버스 프록시가 실제 서버라고 생각하지만, 실제로는 리버스 프록시가 요청을 백엔드 서버로 전달한 뒤, 응답을 받아 클라이언트에 전달합니다.
리버스 프록시의 주요 역할
로드 밸런싱 (Load Balancing)
- 여러 서버로 클라이언트 요청을 분산시켜 서버의 부하를 줄이고, 고가용성을 제공합니다.
- 트래픽이 많은 웹사이트에서 특히 유용합니다.
보안 강화
- 클라이언트가 백엔드 서버의 IP 주소와 세부 정보를 알 수 없도록 숨깁니다.
- SSL/TLS 암호화 작업을 리버스 프록시에서 처리하여 서버의 부담을 줄입니다.
캐싱 (Caching)
- 정적 파일(이미지, CSS, JS 등)을 캐싱하여 서버의 응답 속도를 개선합니다.
- 동일한 요청에 대해 백엔드 서버가 반복적으로 응답하는 부담을 줄입니다.
SSL/TLS 종료 (SSL/TLS Termination)
- 리버스 프록시가 SSL 인증서를 관리하고 암호화된 트래픽을 해제하여 백엔드 서버로 전달합니다.
- 백엔드 서버는 복호화된 트래픽만 처리하게 되어 성능이 향상됩니다.
트래픽 관리 및 필터링
- 특정 IP 또는 요청을 차단하거나 허용할 수 있습니다.
- 사용자 인증, 요청 필터링, WAF(Web Application Firewall) 역할을 추가로 수행할 수 있습니다.
API Gateway 역할
- API 요청을 백엔드 마이크로서비스에 전달하는 중계 서버로 활용될 수 있습니다.
- URL 라우팅, 요청 변환, 인증 등의 기능을 제공합니다.
리버스 프록시 vs 포워드 프록시
특징 | 리버스 프록시 (Reverse Proxy) | 포워드 프록시 (Forward Proxy) |
---|---|---|
동작 방향 | 클라이언트 → 리버스 프록시 → 서버 | 클라이언트 → 포워드 프록시 → 인터넷/외부 서버 |
클라이언트 역할 | 클라이언트는 리버스 프록시가 최종 서버라고 인식 | 포워드 프록시는 클라이언트가 외부로 나가는 통로를 제공 |
사용 목적 | 보안 강화, 로드 밸런싱, 캐싱, SSL 종료 등 | 인터넷 접근 제어, 익명화, 지역 제한 우회 등 |
숨기는 대상 | 백엔드 서버의 정보를 숨김 | 클라이언트의 정보를 숨김 |
리버스 프록시 사용 사례
로드 밸런서
- 리버스 프록시를 통해 다수의 백엔드 서버로 트래픽을 분산하여 부하를 분산하고 가용성을 높입니다.
- 예: AWS ELB, Nginx, HAProxy
캐싱 서버
- 리버스 프록시가 정적 파일을 캐싱하여 반복 요청을 처리합니다.
- 예: CDN(Content Delivery Network) 서비스에서 자주 사용됨 (Cloudflare, Akamai).
API Gateway
- API 요청을 백엔드 마이크로서비스로 라우팅하고, 인증 및 요청 유효성을 검증합니다.
- 예: Kong, Spring Cloud Gateway, AWS API Gateway.
SSL 종료
- 클라이언트와의 통신은 SSL로 암호화하고, 백엔드 서버로 전달할 때는 평문(HTTP)으로 전송합니다.
- 백엔드 서버의 SSL 작업 부담을 줄이고 성능을 최적화합니다.
리버스 프록시를 구성하는 대표적인 소프트웨어
Nginx
- 고성능 웹 서버 및 리버스 프록시 서버로 널리 사용됩니다.
- 설정이 간단하고, 정적 리소스 캐싱, SSL 종료, 로드 밸런싱 등을 지원합니다.
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
Apache HTTP Server
- HTTP 서버로 많이 사용되며, 리버스 프록시 역할을 수행할 수 있습니다.
- 모듈(
mod_proxy
)을 통해 리버스 프록시 기능을 제공합니다.
ProxyRequests Off <Proxy *> Require all granted </Proxy> ProxyPass / http://backend_server/ ProxyPassReverse / http://backend_server/
HAProxy
- 고성능 로드 밸런서 및 리버스 프록시로, 대규모 트래픽 처리에 적합합니다.
- HTTP뿐만 아니라 TCP 및 UDP 프로토콜도 지원합니다.
frontend http-in bind *:80 default_backend servers backend servers server server1 192.168.1.101:80 check server server2 192.168.1.102:80 check
Cloudflare
- 클라우드 기반의 리버스 프록시로, 보안 및 캐싱을 제공하는 서비스.
- DDoS 방어, WAF(Web Application Firewall)와 같은 기능 제공.
리버스 프록시의 장점
보안 강화
- 클라이언트가 백엔드 서버의 세부 정보를 알 수 없도록 보호합니다.
- SSL/TLS 인증서를 관리하여 안전한 통신을 제공합니다.
성능 최적화
- 캐싱 및 압축을 통해 응답 속도를 향상시킵니다.
- 트래픽 분산으로 서버의 부하를 줄입니다.
확장성
- 로드 밸런싱으로 서버를 추가하거나 제거할 수 있어 확장성이 높습니다.
유연성
- API 요청 라우팅, 요청 변환, 트래픽 제어 등 다양한 요구사항에 맞게 설정할 수 있습니다.
리버스 프록시의 단점
복잡성 증가
- 네트워크 구조가 복잡해질 수 있으며, 추가적인 설정 및 유지 관리가 필요합니다.
단일 장애 지점(Single Point of Failure)
- 리버스 프록시 서버가 장애를 겪으면 전체 서비스가 중단될 수 있습니다. 이를 방지하려면 이중화(HA, High Availability) 구성이 필요합니다.
리버스 프록시는 클라이언트와 백엔드 서버 사이에서 요청을 중계하며, 보안, 성능, 로드 밸런싱 등 다양한 이점을 제공합니다. Nginx, Apache, HAProxy 같은 소프트웨어 또는 Cloudflare 같은 클라우드 서비스를 통해 구현할 수 있습니다. 현대 웹 아키텍처에서 리버스 프록시는 필수적인 요소로 자리 잡고 있으며, 특히 대규모 시스템에서 효율적인 트래픽 관리와 보안 강화에 크게 기여합니다.
'Spring Microservice' 카테고리의 다른 글
Promethous/Grafana (0) | 2024.12.22 |
---|---|
Spring Cloud Gateway에서 CORS(Cross-Origin Resource Sharing) 지원 (0) | 2024.12.15 |
spring cloud gateway의 route predicate factories (0) | 2024.12.15 |
@CircuitBreaker의 name 속성 (0) | 2024.12.12 |
ring buffer bit (0) | 2024.12.12 |