개발 프록시 문제 해결

이 가이드를 사용하여 일반적인 개발 프록시 문제를 진단하고 해결합니다. 증상으로 시작하고 진단 질문을 통해 솔루션을 찾습니다.

증상: 개발자 프록시가 요청을 가로채지 않음

개발자 프록시를 시작했지만 앱의 요청이 개발 프록시 출력에 표시되지 않습니다. 이러한 질문을 통해 원인을 파악합니다.

개발 프록시가 실행되고 있나요?

개발 프록시가 실행 중이고 요청을 가로챌 준비가 됐 있는지 확인합니다.

살펴볼 항목:

개발 프록시를 시작한 후 다음과 유사한 출력이 표시됩니다.

 info    Dev Proxy API listening on http://127.0.0.1:8897...
 info    Dev Proxy listening on 127.0.0.1:8000...

Hotkeys: issue (w)eb request, (r)ecord, (s)top recording, (c)lear screen
Press CTRL+C to stop Dev Proxy

이 출력이 표시되지 않으면 다음을 수행합니다.

  • 실행하여 개발자 프록시가 올바르게 설치되었는지 확인합니다. devproxy --version
  • 오류가 발생하면 개발 프록시를 다시 설치합니다.

개발자 프록시가 시스템 프록시로 등록되었나요?

요청을 자동으로 가로채려면 개발자 프록시를 시스템 프록시로 등록해야 합니다. 그렇지 않은 경우 앱의 요청은 개발자 프록시를 완전히 우회합니다.

macOS를 확인하는 방법:

  1. 시스템 설정>네트워크 열기
  2. 활성 네트워크 연결 선택
  3. 세부 정보로 이동...>프록시
  4. HTTPS(보안 HTTP 프록시)로 설정된 항목을 찾습니다. 127.0.0.1:8000

Windows에서 확인하는 방법:

  1. 설정>네트워크 및 인터넷>프록시 열기
  2. 수동 프록시 설정에서 프록시 서버가 다음으로 설정되어 있는지 확인합니다.127.0.0.1:8000

개발자 프록시가 시스템 프록시로 등록되지 않은 경우:

개발 프록시 구성을 확인합니다. 구성 파일을 열고 다음이 포함되어 있지 않은지 확인하려면 실행 devproxy config 합니다.

{
  "asSystemProxy": false
}

이 설정이 존재하고 false로 설정된 경우, 제거하거나 true로 설정한 후 Dev Proxy를 다시 시작합니다.

올바른 URL을 보고 있나요?

개발 프록시는 구성의 패턴과 일치하는 URL에 대한 요청만 가로챌 수 있습니다 urlsToWatch .

확인 방법:

  1. 개발자 프록시 시작 출력에서 감시 중인 URL 목록을 확인합니다.
  2. 앱이 호출하는 URL과 비교

일반적인 문제:

  • 와일드카드 누락: https://api.example.com가 https://api.example.com/users와 일치하지 않습니다. https://api.example.com/*를 대신 사용하세요.
  • 잘못된 도메인: 하위 도메인을 포함하여 도메인 이름을 다시 확인합니다.
  • HTTP 및 HTTPS: 프로토콜이 일치하는지 확인

URL 패턴을 테스트하려면 다음을 수행합니다.

devproxy --urls-to-watch "https://your-api.com/*"

그런 다음 API에 요청을 수행하고 개발자 프록시가 로그하는지 확인합니다.

올바른 구성 파일을 사용하고 있나요?

개발자 프록시는 예상과 다른 구성 파일을 사용할 수 있습니다.

개발자 프록시가 구성 파일을 찾는 방법:

  1. 지정 --config-file하는 경우 개발자 프록시는 해당 파일을 사용합니다.
  2. 그 외 Dev Proxy는 현재 디렉터리에서 devproxyrc.json를 찾습니다.
  3. 찾을 수 없는 경우 개발자 프록시는 기본 설정을 사용합니다.

사용 중인 구성 파일을 확인하려면 다음을 수행합니다.

디버그 로깅을 사용하여 개발 프록시를 실행합니다.

devproxy --log-level debug

로드되는 구성 파일을 보여 주는 출력을 찾습니다.

구성 파일을 명시적으로 지정하려면 다음을 수행합니다.

devproxy --config-file ./my-config.json

Node.js 애플리케이션에서 개발자 프록시를 사용하고 있나요?

Node.js 시스템 프록시 설정을 자동으로 사용하지 않습니다. 프록시를 명시적으로 사용하도록 Node.js 앱을 구성해야 합니다.

Solution:

global-agent 패키지를 사용하거나 프록시를 사용하도록 HTTP 라이브러리를 구성합니다. 자세한 지침은 Node.js 애플리케이션에서 개발 프록시 사용을 참조하세요.

전역 에이전트를 사용하여 빠른 수정:

  1. global-agent 설치:

    npm install global-agent
    
  2. 앱의 엔트리 포인트에 추가하세요.

    import { bootstrap } from 'global-agent';
    bootstrap();
    
  3. 프록시 환경 변수를 사용하여 앱을 시작합니다.

    NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node app.js
    

Windows에서 PowerShell과 함께 개발 프록시를 사용하고 있나요?

PowerShell은 Invoke-WebRequest 또는 Invoke-RestMethod으로 만든 웹 요청에 대해 시스템 프록시 설정을 자동으로 사용하지 않습니다.

Solution:

매개 변수를 설정하여 프록시를 사용하도록 PowerShell을 구성합니다 -Proxy .

Invoke-WebRequest -Uri "https://api.example.com/data" -Proxy "http://127.0.0.1:8000"

또는 전체 세션에 대한 프록시를 설정합니다.

$env:HTTPS_PROXY = "http://127.0.0.1:8000"
$env:HTTP_PROXY = "http://127.0.0.1:8000"

PowerShell 7+를 사용하는 경우 다음을 사용할 수도 있습니다.

[System.Net.WebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy("http://127.0.0.1:8000")

기타 플랫폼 및 프레임워크

다른 플랫폼을 사용하는 경우 다음 가이드를 확인하세요.

Platform Guide
.NET 애플리케이션 .NET 애플리케이션에서 개발 프록시 사용
.NET 4.8 애플리케이션 .NET 4.8 앱에는 특별한 구성이 필요합니다.
Docker 컨테이너 Docker 컨테이너에서 개발 프록시 사용
SharePoint Framework SPFx와 함께 개발 프록시 사용

증상: 요청이 가로채지지만 변경되지 않은 채로 그대로 전달됨

개발자 프록시는 출력에 요청을 표시하지만 수정, 모의 또는 시뮬레이션된 오류를 반환하지 않습니다.

플러그 인을 사용할 수 있나요?

사용하려는 플러그 인이 구성에서 사용하도록 설정되어 있는지 확인합니다.

확인 방법:

구성 파일을 열고 다음을 확인합니다.

  1. 플러그인은 plugins 배열에 나열됩니다.
  2. 플러그 인에 "enabled": true이/가 있습니다
{
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    }
  ]
}

플러그 인이 올바른 순서인가요?

플러그 인 순서는 개발자 프록시에서 중요합니다. 플러그 인은 나열된 순서대로 실행되며 일부 플러그 인은 다른 플러그 인이 실행되기 전에 처리를 중지할 수 있습니다.

일반적인 문제:

MockResponsePlugin가 GenericRandomErrorPlugin 앞에 있는 경우, 요청이 모의와 일치하면 랜덤 오류 플러그인은 실행되지 않습니다.

Solution:

플러그 인이 요청을 처리할 순서대로 정렬합니다. 자세한 내용은 모의 객체를 사용할 때 왜 임의 오류가 throw되지 않는지를 참조하세요.

모의 URL 패턴이 요청과 일치하나요?

모의 응답의 경우 URL 패턴이 요청 URL과 정확히 일치해야 합니다.

확인해야 할 사항:

  • 쿼리 문자열 매개 변수: https://api.example.com/users?id=1 일치하지 않음 https://api.example.com/users
  • 후행 슬래시: https://api.example.com/users/는 https://api.example.com/users와 일치하지 않음
  • 대/소문자 구분: URL 경로는 대/소문자를 구분합니다.

요청 메서드가 올바른가요?

모킹은 함수별로 다릅니다. GET 요청에 대한 모의 항목은 POST 요청과 일치하지 않습니다.

확인 방법:

모의 파일에서 속성이 요청과 method 일치하는지 확인합니다.

{
  "request": {
    "url": "https://api.example.com/users",
    "method": "GET"
  },
  "response": {
    "statusCode": 200,
    "body": { "users": [] }
  }
}

증상: 앱의 SSL/인증서 오류

개발자 프록시를 통해 요청을 시도할 때 앱이 SSL 또는 인증서 오류를 발생시킵니다.

개발자 프록시 인증서가 설치되어 있나요?

개발자 프록시는 자체 서명된 인증서를 사용하여 HTTPS 트래픽의 암호를 해독합니다. 시스템에서 이 인증서를 신뢰해야 합니다.

Solution:

인증서 설치 명령을 실행합니다.

devproxy cert ensure

이 명령은 시스템에 개발자 프록시 인증서를 설치하고 신뢰합니다.

인증서를 신뢰할 수 있나요?

인증서가 설치되어 있지만 신뢰할 수 없습니다.

macOS를 확인하는 방법:

  1. 키 집합 액세스 열기
  2. "개발자 프록시" 검색
  3. 인증서를 두 번 클릭합니다.
  4. 신뢰 확장
  5. SSL(Secure Sockets Layer)이 Always Trust로 설정되어 있는지 확인

Windows에서 확인하는 방법:

  1. certmgr.msc을 실행합니다.
  2. 신뢰할 수 있는 루트 인증 기관>인증서로 이동
  3. 개발자 프록시 인증서 찾기

인증서를 신뢰할 수 없는 경우:

인증서를 제거하고 다시 설치합니다.

devproxy cert remove
devproxy cert ensure

Node.js사용하고 있나요?

Node.js 기본적으로 시스템 인증서 저장소를 사용하지 않습니다. 다음 중 하나를 수행해야 합니다.

옵션 1: 인증서 유효성 검사 사용 안 함(개발 전용):

NODE_TLS_REJECT_UNAUTHORIZED=0 node app.js

경고

프로덕션 환경에서는 절대 사용하지 NODE_TLS_REJECT_UNAUTHORIZED=0 마세요. 모든 인증서 유효성 검사를 사용하지 않도록 설정합니다.

옵션 2: Node.js데브 프록시 인증서 추가:

개발 프록시 인증서를 내보내고 환경 변수를 NODE_EXTRA_CA_CERTS 설정합니다.

NODE_EXTRA_CA_CERTS=/path/to/devproxy-cert.pem node app.js

다른 런타임 또는 프레임워크를 사용하고 있나요?

다른 플랫폼은 인증서를 다르게 처리합니다.

Platform 해결 방법
파이썬 사용 REQUESTS_CA_BUNDLE 또는 SSL_CERT_FILE 환경 변수
Java 를 사용하여 Java 키 저장소로 인증서 가져오기 keytool
.NET 인증서는 일반적으로 시스템 저장소를 통해 신뢰할 수 있습니다.
도커 컨테이너에 인증서 탑재 및 CA 인증서 업데이트

기타 일반적인 문제

게이트웨이 시간 제한으로 모든 요청이 실패합니다.

원인:

개발 프록시가 대상 API에 도달할 수 없습니다.

Solution:

게이트웨이 시간 제한으로 모든 요청이 실패하는 이유를 참조하세요.

개발자 프록시를 사용한 후 인터넷 연결 없음

원인:

개발자 프록시가 시스템 프록시로 등록을 제대로 취소하지 않습니다.

Solution:

프록시를 사용한 후 인터넷 연결이 작동하지 않는 이유는 무엇인가요?

예기치 않게 429개 응답 가져오기

원인:

속도 제한 플러그 인을 사용하도록 설정하고 구성합니다.

Solution:

429개 응답을 계속 받는 이유는 무엇인가요?

데이터베이스 오류

오류 해결 방법
SqliteConnection 초기화 오류 SQLite 구성 수정
"데이터베이스 디스크 이미지가 잘못되었습니다." 데이터베이스 다시 작성

더 많은 도움말 보기

솔루션을 찾을 수 없는 경우:

  1. 디버그 로깅 사용: 자세한 출력을 위해 실행 devproxy --log-level debug
  2. 기존 문제 검색: 개발 프록시 GitHub 문제
  3. 도움말 요청: 도움말 및 지원 받기

참고하십시오