Proxy(프락시)

클라이언트와 서버 사이에 위치하여 중개자 역할을 수행하는 서버 애플리케이션이다.

  • 클라이언트의 요청을 받아 서버에 전달하고, 서버의 응답을 받아 다시 클라이언트에게 전달

  • 보안, 캐싱, 로드 밸런싱 등 다양한 목적으로 필수적으로 사용

웹 중개자

웹 중재자로서의 프락시는 클라이언트에게는 서버처럼 동작하고, 서버에게는 클라이언트처럼 동작한다.

  • Server 입장: 클라이언트의 요청을 대신 전달해 주는 클라이언트

  • Client 입장: 요청을 받아 처리해 주는 서버

공유 프락시 / 개인 프락시

프락시는 하나의 클라이언트가 독점적으로 사용하는 개인 프락시와 여러 클라이언트가 공유하는 공유 프락시로 나뉜다.

  • 공유 프락시(Shared Proxy): 여러 사용자가 함께 사용하는 프락시(대부분의 프락시에 해당)

    • 캐시 프락시와 같은 경우 이용자 수가 많을 수록 효율 상승

  • 개인 프락시(Private Proxy): 특정 개인이나 조직만 사용하는 프락시

    • 보안이나 익명성을 위해 사용

프락시 vs 게이트웨이 vs 터널

프락시와 게이트웨이는 모두 중개자 역할을 하지만, 그 기능과 목적에 차이가 있다.

  • 프락시: 같은 프로토콜(주로 HTTP)을 사용하는 두 애플리케이션 사이를 중개

  • 게이트웨이: 서로 다른 프로토콜(예: HTTP <-> FTP)을 사용하는 애플리케이션 사이를 중개하며 프로토콜 변환기 역할 수행

  • 터널: 두 커넥션 사이에서 날(raw) 데이터를 열어보지 않고 그대로 전달

주요 기능과 활용 사례

프락시는 단순한 전달자를 넘어 다양한 부가 기능을 제공한다.

  1. 보안 및 필터링: 방화벽 기능을 수행하여 악성 트래픽 차단 및 사이트 접근 제한

  2. 성능 향상(캐싱): 자주 요청되는 리소스를 캐시하여 원 서버 부하 감소 및 응답 속도 향상

  3. 익명화(Anonymizer): 클라이언트의 IP 주소 등 식별 정보를 제거하여 익명성 보장(VPN 서비스 등)

  4. 트랜스코딩: 클라이언트 환경에 맞춰 이미지 포맷을 변환하거나 내용 압축

  5. 로드 밸런싱: 여러 대의 원 서버로 트래픽을 분산시켜 서버 부하 완화

배치 위치에 따른 분류

네트워크 상의 위치와 역할에 따라 크게 Forward Proxy와 Reverse Proxy로 나뉜다.

구분
위치
역할 및 특징

Forward Proxy

클라이언트 앞단

클라이언트를 대신해 외부 서버로 요청 전송 내부망에서 외부망 접속 제어, 캐싱, 익명화 목적으로 사용

Reverse Proxy

서버 앞단

서버를 대신해 외부의 요청 수신 로드 밸런싱, 보안(서버 IP 숨김), SSL Offloading 목적으로 사용(Nginx, HAProxy 등)

기타 배치 유형

  • Egress Proxy: 내부망에서 외부 인터넷으로 나가는 트래픽을 제어(Forward Proxy의 일종)

  • Ingress Proxy: 외부에서 내부 서버로 들어오는 트래픽을 처리(Reverse Proxy의 일종)

프락시 계층과 트래픽 처리

프락시는 단독으로 쓰이기도 하지만, 여러 대가 연쇄적으로 연결되어 계층(Chaining)을 이룰 수 있다.

  • 부모(Parent) 프락시: 서버 쪽에 더 가까운 프락시(Upstream)

  • 자식(Child) 프락시: 클라이언트 쪽에 더 가까운 프락시(Downstream)

트래픽을 프락시로 유도하는 방법

웹 트래픽이 프락시로 향하도록 유도하는 방법에는 여러 가지가 있다.

  1. 클라이언트 설정: 브라우저 설정 메뉴에서 직접 프락시 주소를 입력(수동 설정)

  2. PAC(Proxy Auto-Configuration): 자바스크립트 파일(.pac)을 통해 상황에 따라 프락시를 동적으로 선택

  3. 투명 프락시(Transparent Proxy): 네트워크 장비(라우터 등) 레벨에서 트래픽을 가로채 강제로 프락시로 전달

  4. 서버 리다이렉션: HTTP 응답 코드(305 Use Proxy)를 사용하여 클라이언트에게 프락시 사용을 지시(보안 문제로 현재는 잘 쓰이지 않음)

메시지 추적

요청이 둘 이상의 프락시를 거치는 경우는 흔하기 때문에, 디버깅이나 루프 방지를 위해 경로 추적을 위해 다음과 같은 헤더를 사용한다.

  • Via 헤더: 메시지가 거쳐간 중간 노드(프락시, 게이트웨이)의 정보를 순서대로 기록

    • 예시: Via: 1.1 proxy1.example.com, 1.0 cache.example.com

  • X-Forwarded-For: 프락시를 거치기 전의 원래 클라이언트 IP 주소를 기록

    • 예시: X-Forwarded-For: client-ip, proxy1-ip, proxy2-ip

참고자료

Last updated

Was this helpful?