다음을 통해 공유


프록시란?

프록시는 클라이언트(예: 애플리케이션)와 대상 서버(예: 백 엔드 API) 사이에 있는 중간 서버입니다. 애플리케이션이 요청을 보내면 프록시가 먼저 요청을 받습니다. 그런 다음 프록시는 대상 서버에 요청을 전달하거나 수정하거나 차단하거나 응답을 직접 반환할 수 있습니다.

즉, 프록시는 통신을 중재하기 위해 클라이언트 또는 서버를 대신하여 작동합니다.

프록시 작동 방식

프록시는 들어오는 요청을 수신하고 다음 작업 중 하나 이상을 수행하여 HTTP 수준(또는 다른 애플리케이션 프로토콜)에서 작동합니다.

  • 대상 서버에 요청을 전달한 다음 응답을 클라이언트에 다시 릴레이합니다.
  • 전달하기 전에 헤더, URL 또는 페이로드 수정
  • 대상 서버에 연결하지 않고 가로채고 로컬로 요청에 응답합니다.
  • 규칙 또는 액세스 정책에 따라 요청을 거부합니다.

클라이언트의 관점에서는 단순히 URL에 요청을 보내는 것입니다. 프록시는 백그라운드에서 다른 모든 것을 처리합니다. 패턴은 클라이언트에서 프록시를 거쳐 대상 서버로 가는 것입니다.

이 패턴은 보안, 관찰 가능성, 성능 및 테스트 가능성을 개선하는 데 사용할 수 있는 제어 및 추상화 계층을 도입합니다.

프록시 유형

다양한 유형의 프록시가 있습니다. 각 역할은 시스템 아키텍처의 특정 역할에 적합합니다.

프록시 전달

포워드 프록시는 클라이언트앞에 있습니다. 애플리케이션이 요청을 하면 프록시를 통해 전달 여부와 방법을 결정합니다. 전달 프록시는 일반적으로 다음을 위해 사용됩니다.

  • 외부 리소스에 대한 액세스를 제어합니다.
  • 클라이언트 트래픽을 익명화합니다.
  • 모니터링을 위해 나가는 트래픽을 기록합니다.
  • 콘텐츠 필터링 또는 변환을 적용합니다.

역방향 프록시

역방향 프록시는 서버앞에 있습니다. 클라이언트는 기본 백 엔드 인프라를 인식하지 못합니다. 역방향 프록시는 들어오는 요청을 수신하고 여러 백 엔드 서버 중 하나로 전달합니다. 역방향 프록시는 일반적으로 다음을 위해 사용됩니다.

  • 여러 서비스에서 트래픽 부하를 분산합니다.
  • 캐시된 응답을 제공하여 백 엔드 부하를 줄입니다.
  • TLS/SSL 연결을 종료합니다.
  • 공용 인터넷에서 내부 서비스 세부 정보를 숨깁니다.

투명 프록시

투명 프록시는 클라이언트가 트래픽을 사용하도록 명시적으로 구성하지 않고 트래픽을 가로채게 합니다. 이 형식은 회사 또는 인터넷 서비스 공급자 환경에서 정책을 적용하거나 사용량을 모니터링하는 데 사용됩니다.

프록시가 애플리케이션 개발자에게 중요한 이유

인프라 또는 네트워크 팀에서 프록시를 관리하는 경우가 많습니다. 그러나 프록시는 특히 개발 및 테스트 환경에서 애플리케이션 동작에 직접적인 영향을 줍니다. 다음은 일상적인 업무에 영향을 미치는 몇 가지 실용적인 방법입니다.

디버깅 및 관찰 가능성

프록시는 HTTP 트래픽을 캡처하고 검사할 수 있습니다. 개발자 프록시, Fiddler, Proxyman, Charles Proxy 또는 mitmproxy와 같은 도구는 로컬 전달 프록시 역할을 합니다. 애플리케이션을 통해 실행하여 요청 및 응답을 분석하고, 오류를 발견하고, 헤더 또는 인증 토큰을 확인할 수 있습니다.

API 게이트웨이 및 라우팅

많은 프로덕션 시스템에서 애플리케이션의 백 엔드에 대한 트래픽은 API 게이트웨이 또는 NGINX와 같은 역방향 프록시 또는 Azure API Management와 같은 클라우드 네이티브 서비스를 통해 라우팅됩니다. 이러한 프록시는 라우팅, 인증, 속도 제한 등을 처리합니다.

API를 디자인하거나 분산 서비스를 빌드할 때 프록시가 헤더에 미치는 영향(예: X-Forwarded-For시간 제한 및 요청 크기 제한)을 이해해야 합니다.

CORS 및 로컬 개발

로컬 개발 중, 특히 웹 애플리케이션에서 브라우저에서 API를 호출할 때 CORS(원본 간 리소스 공유) 제한이 발생할 수 있습니다. 개발 프록시는 CORS 제한을 무시하도록 헤더를 다시 작성하는 동안 요청을 대상 API로 전달할 수 있습니다. CORS 요청을 다시 작성하는 개발자 도구의 일반적인 예는 express 또는 ASP.NET Core와 같은 프레임워크에서 vite, webpack-dev-server또는 사용자 지정 프록시 미들웨어입니다.

서비스 가상화 및 테스트

프록시는 백 엔드 API를 시뮬레이션할 수 있습니다. 이 기능은 테스트 중에 실제 서비스를 사용할 수 없거나 불안정하거나 비용이 많이 드는 경우에 유용합니다. 응답을 차단하고 모의 실험을 통해 시간 제한, 오류 또는 형식이 잘못된 데이터와 같은 다양한 시나리오에서 애플리케이션의 동작을 테스트할 수 있습니다.

개발자 프록시 또는 사용자 지정 프록시 구현과 같은 도구는 통합 및 엔드 투 엔드 테스트에서 이러한 용도로 일반적으로 사용됩니다.

인증 및 보안

프록시는 애플리케이션 보안의 최전선인 경우가 많습니다. 액세스 제어를 적용하거나, 인증 헤더를 삽입하거나, TLS/SSL 연결을 종료할 수 있습니다. 개발자는 애플리케이션이 프록시 뒤에 있을 때 동작하는 방식과 인증 또는 ID 정보를 전달하는 헤더에 액세스하는 방법을 알고 있어야 합니다.

일반적인 헤더 및 프록시 고려 사항

요청이 프록시를 통과하면 중요한 메타데이터를 유지하기 위해 특정 헤더가 추가되거나 수정됩니다. 예를 들어:

  • X-Forwarded-For: 클라이언트의 원래 IP 주소를 나타냅니다.
  • X-Forwarded-Proto: 원래 프로토콜(HTTP 또는 HTTPS)을 나타냅니다.
  • X-Forwarded-Host: 클라이언트에서 요청한 원래 호스트를 나타냅니다.

애플리케이션이 역방향 프록시 뒤에서 실행되는 경우 프레임워크 또는 플랫폼이 이러한 헤더를 신뢰하고 올바르게 해석하도록 구성되어 있는지 확인합니다.

개발 및 테스트를 위한 전달 프록시로서의 개발 프록시

개발 프록시는 애플리케이션에서 대상 서버로 요청을 가로채고 수정하는 데 사용할 수 있는 전달 프록시입니다. 개발자 프록시를 사용하면 다음을 수행할 수 있습니다.

  • 앱이 API 오류에 응답하는 방법을 확인합니다.
  • 앱이 API 속도 제한을 처리하는 방법을 확인합니다.
  • 앱이 느린 API를 처리하는 방법을 확인합니다.
  • 코드 줄을 작성하지 않고 모의 API를 빠르게 실행합니다.
  • API를 사용하는 방법에 대한 상황별 지침을 사용하여 앱을 개선합니다.

다음 단계