Proxy
클라이언트와 서버 사이에 위치하여 중개자 역할을 수행하는 서버 애플리케이션이다.
- 클라이언트의 요청을 받아 서버에 전달하고, 서버의 응답을 받아 다시 클라이언트에게 전달
- 보안, 캐싱, 로드 밸런싱 등 다양한 목적으로 필수적으로 사용
웹 중재자로서의 프락시는 클라이언트에게는 서버처럼 동작하고, 서버에게는 클라이언트처럼 동작한다.
- Server 입장: 클라이언트의 요청을 대신 전달해 주는 클라이언트
- Client 입장: 요청을 받아 처리해 주는 서버
공유 프락시 / 개인 프락시
Section titled “공유 프락시 / 개인 프락시”프락시는 하나의 클라이언트가 독점적으로 사용하는 개인 프락시와 여러 클라이언트가 공유하는 공유 프락시로 나뉜다.
- 공유 프락시(Shared Proxy): 여러 사용자가 함께 사용하는 프락시(대부분의 프락시에 해당)
- 캐시 프락시와 같은 경우 이용자 수가 많을 수록 효율 상승
- 개인 프락시(Private Proxy): 특정 개인이나 조직만 사용하는 프락시
- 보안이나 익명성을 위해 사용
프락시 vs 게이트웨이 vs 터널
Section titled “프락시 vs 게이트웨이 vs 터널”프락시와 게이트웨이는 모두 중개자 역할을 하지만, 그 기능과 목적에 차이가 있다.
- 프락시: 같은 프로토콜(주로 HTTP)을 사용하는 두 애플리케이션 사이를 중개
- 게이트웨이: 서로 다른 프로토콜(예: HTTP <-> FTP)을 사용하는 애플리케이션 사이를 중개하며 프로토콜 변환기 역할 수행
- 터널: 두 커넥션 사이에서 날(raw) 데이터를 열어보지 않고 그대로 전달
주요 기능과 활용 사례
Section titled “주요 기능과 활용 사례”프락시는 단순한 전달자를 넘어 다양한 부가 기능을 제공한다.
- 보안 및 필터링: 방화벽 기능을 수행하여 악성 트래픽 차단 및 사이트 접근 제한
- 성능 향상(캐싱): 자주 요청되는 리소스를 캐시하여 원 서버 부하 감소 및 응답 속도 향상
- 익명화(Anonymizer): 클라이언트의 IP 주소 등 식별 정보를 제거하여 익명성 보장(VPN 서비스 등)
- 트랜스코딩: 클라이언트 환경에 맞춰 이미지 포맷을 변환하거나 내용 압축
- 로드 밸런싱: 여러 대의 원 서버로 트래픽을 분산시켜 서버 부하 완화
배치 위치에 따른 분류
Section titled “배치 위치에 따른 분류”네트워크 상의 위치와 역할에 따라 크게 Forward Proxy와 Reverse Proxy로 나뉜다.
| 구분 | 위치 | 역할 및 특징 |
|---|---|---|
| Forward Proxy | 클라이언트 앞단 | 클라이언트를 대신해 외부 서버로 요청 전송 내부망에서 외부망 접속 제어, 캐싱, 익명화 목적으로 사용 |
| Reverse Proxy | 서버 앞단 | 서버를 대신해 외부의 요청 수신 로드 밸런싱, 보안(서버 IP 숨김), SSL Offloading 목적으로 사용(Nginx, HAProxy 등) |
기타 배치 유형
Section titled “기타 배치 유형”- Egress Proxy: 내부망에서 외부 인터넷으로 나가는 트래픽을 제어(Forward Proxy의 일종)
- Ingress Proxy: 외부에서 내부 서버로 들어오는 트래픽을 처리(Reverse Proxy의 일종)
프락시 계층과 트래픽 처리
Section titled “프락시 계층과 트래픽 처리”프락시는 단독으로 쓰이기도 하지만, 여러 대가 연쇄적으로 연결되어 계층(Chaining)을 이룰 수 있다.
- 부모(Parent) 프락시: 서버 쪽에 더 가까운 프락시(Upstream)
- 자식(Child) 프락시: 클라이언트 쪽에 더 가까운 프락시(Downstream)
트래픽을 프락시로 유도하는 방법
Section titled “트래픽을 프락시로 유도하는 방법”웹 트래픽이 프락시로 향하도록 유도하는 방법에는 여러 가지가 있다.
- 클라이언트 설정: 브라우저 설정 메뉴에서 직접 프락시 주소를 입력(수동 설정)
- PAC(Proxy Auto-Configuration): 자바스크립트 파일(.pac)을 통해 상황에 따라 프락시를 동적으로 선택
- 투명 프락시(Transparent Proxy): 네트워크 장비(라우터 등) 레벨에서 트래픽을 가로채 강제로 프락시로 전달
- 서버 리다이렉션: HTTP 응답 코드(305 Use Proxy)를 사용하여 클라이언트에게 프락시 사용을 지시(보안 문제로 현재는 잘 쓰이지 않음)
메시지 추적
Section titled “메시지 추적”요청이 둘 이상의 프락시를 거치는 경우는 흔하기 때문에, 디버깅이나 루프 방지를 위해 경로 추적을 위해 다음과 같은 헤더를 사용한다.
- 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
- 예시: