Skip to content

프록시 서버(Proxy Server)

클라이언트와 서버 사이에서 중간 역할을 하는 서버.
클라이언트의 요청을 대신 전달하거나, 서버의 응답을 대신 받아주는 구조.
즉, 클라이언트 ↔ 프록시 서버 ↔ 실제 서버 형태로 통신이 이루어진다.
주 용도: 보안, 캐싱, 로드밸런싱, 필터링 등

동작방식

  1. 클라이언트가 요청을 프록시 서버로 보냄
  2. 프록시 서버가 요청을 검사, 캐싱, 필터링 등의 처리를 수행
  3. 프록시 서버가 실제 서버로 요청을 전달하거나, 캐시된 데이터를 대신 응답
  4. 서버의 응답을 받아 클라이언트에게 전달

종류

  1. Forward Proxy (순방향 프록시) 클라이언트가 직접 서버에 접근하지 않고, 프록시를 통해 외부로 요청을 보냄
  • 주 용도: 내부망 보안, IP 차단 우회, 캐싱
  • 특징
    • 클라이언트는 프록시 서버를 인식하고 설정해야 함 (브라우저 프록시 설정 등)
    • 서버는 실제 클라이언트 IP를 모름
  • 흐름: Client → Proxy Server → Web Server
  • 예시: 회사 내부망에서 외부 인터넷에 접근할 때 보안 검증용으로 사용하는 프록시
  1. 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:3000https://api.example.com 요청 시 CORS 에러 발생

해결 방법

  1. 프록시 서버를 중간에 둬서 같은 Origin으로 요청
    • 브라우저 → 프록시 서버 → 외부 API
    • 브라우저 입장에서는 같은 출처로 인식되어 CORS 에러 발생하지 않음
  2. 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 GatewayAPI 요청을 받아 백엔드 서비스로 전달 (리버스 프록시 역할)
Application Load Balancer (ALB)여러 EC2 또는 ECS 인스턴스로 트래픽 분산 (역방향 프록시)
CloudFrontCDN이지만, 전 세계 엣지 로케이션에서 콘텐츠 캐싱 및 요청 전달 (프록시 + 캐시 서버 역할)
Elastic Load Balancer (ELB)네트워크/애플리케이션 계층에서 요청을 라우팅하는 프록시
VPC NAT Gateway내부망 인스턴스가 외부 인터넷으로 요청을 보낼 수 있게 중계 (순방향 프록시 역할)