프록시 서버(Proxy Server)
클라이언트와 서버 사이에서 중간 역할을 하는 서버.
클라이언트의 요청을 대신 전달하거나, 서버의 응답을 대신 받아주는 구조.
즉, 클라이언트 ↔ 프록시 서버 ↔ 실제 서버 형태로 통신이 이루어진다.
주 용도: 보안, 캐싱, 로드밸런싱, 필터링 등
동작방식
- 클라이언트가 요청을 프록시 서버로 보냄
- 프록시 서버가 요청을 검사, 캐싱, 필터링 등의 처리를 수행
- 프록시 서버가 실제 서버로 요청을 전달하거나, 캐시된 데이터를 대신 응답
- 서버의 응답을 받아 클라이언트에게 전달
종류
- Forward Proxy (순방향 프록시) 클라이언트가 직접 서버에 접근하지 않고, 프록시를 통해 외부로 요청을 보냄
- 주 용도: 내부망 보안, IP 차단 우회, 캐싱
- 특징
- 클라이언트는 프록시 서버를 인식하고 설정해야 함 (브라우저 프록시 설정 등)
- 서버는 실제 클라이언트 IP를 모름
- 흐름:
Client → Proxy Server → Web Server - 예시: 회사 내부망에서 외부 인터넷에 접근할 때 보안 검증용으로 사용하는 프록시
- Reverse Proxy (역방향 프록시) 클라이언트는 프록시를 ‘진짜 서버’로 인식하고 요청을 보냄.
실제 서버는 프록시 뒤에 숨겨져 있음.
- 주 용도: 로드밸런싱, SSL 처리, 캐싱, 보안
- 특징
- 클라이언트는 프록시의 존재를 모름
- 서버 인프라 보호 및 트래픽 분산 가능
- 흐름:
Client → Nginx (Reverse Proxy) → App Server - 예시: Nginx, Apache, AWS ALB(Application Load Balancer)
주요 기능
- 캐싱: 자주 요청되는 리소스를 저장해 서버 부하 감소, 응답 속도 향상
- 보안: 내부 서버 IP 숨김, 접근 제어, SSL 처리
- 로깅: 요청/응답 기록으로 트래픽 분석 가능
- 로드 밸런싱: 여러 서버로 요청 분산
- 필터링: 특정 사이트 차단, 악성 요청 차단 등
캐시 불일치
프록시 서버는 성능 향상을 위해 응답을 캐싱하지만, 원본 서버의 데이터가 변경되었을 때 프록시 캐시가 즉시 갱신되지 않으면 불일치 문제가 발생한다.
- 예시
- 서버에서 게시글을 수정했는데,프록시 캐시가 오래된 데이터를 반환.
→ 클라이언트는 수정 전 내용을 보게 됨
- 서버에서 게시글을 수정했는데,프록시 캐시가 오래된 데이터를 반환.
해결 방법
캐시 무효화: 원본 데이터가 변경되는 시점에 맞춰 캐시에 있는 해당 데이터를 강제로 삭제하거나 갱신캐시 만료: 데이터를 캐시에 저장할 때 유효 기간(TTL, Time-To-Live)을 설정해 일정 시간 이후 자동 만료태그 기반 무효화: 데이터 캐싱 시 태그를 함께 저장해두고, 특정 태그에 해당하는 모든 캐시를 한 번에 무효화
CORS 문제와 프록시 서버
CORS(Cross-Origin Resource Sharing)는 브라우저가 다른 출처(origin)로 요청을 보낼 때 발생하는 보안 제약이다.
프록시 서버를 이용하면 브라우저의 동일 출처 정책을 우회할 수 있다.
예: 브라우저에서 http://localhost:3000 → https://api.example.com 요청 시 CORS 에러 발생
해결 방법
- 프록시 서버를 중간에 둬서 같은 Origin으로 요청
- 브라우저 → 프록시 서버 → 외부 API
- 브라우저 입장에서는 같은 출처로 인식되어 CORS 에러 발생하지 않음
- Reverse Proxy 설정 예시
nginx
location /api/ {
proxy_pass https://external-api.com/;
proxy_set_header Host external-api.com;
}이렇게 하면 브라우저는 /api/... 로 요청하지만, 실제로는 external-api.com 으로 전달된다.
원리
프록시 서버는 브라우저의 동일 출처 정책이 적용되지 않는 서버 간 통신(Server-to-Server) 특성을 활용해 클라이언트 대신 요청을 보내고 응답을 받아오는 대리인 역할을 수행한다.
이 방식은 백엔드 API 서버에서 일일이 Access-Control-Allow-Origin 같은 CORS 관련 헤더를 설정하지 않아도 되는 장점이 있다.
AWS에서의 프록시 서버 역할
AWS에는 직접적인 프록시 서버는 아니지만, 프록시 역할을 수행하는 여러 서비스가 존재한다.
| 서비스 | 역할 |
|---|---|
| API Gateway | API 요청을 받아 백엔드 서비스로 전달 (리버스 프록시 역할) |
| Application Load Balancer (ALB) | 여러 EC2 또는 ECS 인스턴스로 트래픽 분산 (역방향 프록시) |
| CloudFront | CDN이지만, 전 세계 엣지 로케이션에서 콘텐츠 캐싱 및 요청 전달 (프록시 + 캐시 서버 역할) |
| Elastic Load Balancer (ELB) | 네트워크/애플리케이션 계층에서 요청을 라우팅하는 프록시 |
| VPC NAT Gateway | 내부망 인스턴스가 외부 인터넷으로 요청을 보낼 수 있게 중계 (순방향 프록시 역할) |