다음을 통해 공유


네트워킹 문제 해결

이 문서에서는 다양한 복잡성의 네트워킹 문제를 진단할 수 있는 몇 가지 도구를 설명합니다. 이러한 문제에는 서비스에서 예기치 않은 응답 값 문제 해결부터 연결 닫힌 예외의 근본 원인에 이르기까지 다양한 시나리오가 포함됩니다.

클라이언트 쪽 문제 해결을 위해 Java용 Azure 클라이언트 라이브러리는 Java용 Azure SDK의 구성 로깅에 설명된 대로 일관되고 강력한 로깅 스토리를 제공합니다. 그러나 클라이언트 라이브러리는 다양한 프로토콜을 통해 네트워크 호출을 수행하므로 제공된 문제 해결 범위를 벗어나는 문제 해결 시나리오가 발생할 수 있습니다. 이러한 문제가 발생하면 해결 방법은 이 문서에 설명된 외부 도구를 사용하여 네트워킹 문제를 진단하는 것입니다.

Fiddler

Fiddler 는 HTTP 디버깅 프록시로, 이를 통해 전달된 요청 및 응답을 있는 그대로 기록할 수 있습니다. 캡처하는 원시 요청 및 응답은 서비스가 예기치 않은 요청을 받거나 클라이언트가 예기치 않은 응답을 받는 시나리오 문제를 해결하는 데 도움이 될 수 있습니다. Fiddler를 사용하려면 HTTP 프록시를 사용하여 클라이언트 라이브러리를 구성해야 합니다. HTTPS를 사용하는 경우 암호 해독된 요청 및 응답 본문을 검사하기 위해 추가 구성이 필요합니다.

HTTP 프록시 추가

HTTP 프록시를 추가하려면 Java용 Azure SDK에서 프록시 구성의 지침을 따릅니다. 포트 8888의 localhost 기본 Fiddler 주소를 사용해야 합니다.

HTTPS 암호 해독 사용

기본적으로 Fiddler는 HTTP 트래픽만 캡처할 수 있습니다. 애플리케이션에서 HTTPS를 사용하는 경우 HTTPS 트래픽을 캡처할 수 있도록 Fiddler의 인증서를 신뢰하는 추가 단계를 수행해야 합니다. 자세한 내용은 Fiddler 설명서의 HTTPS 메뉴를 참조하세요.

다음 단계에서는 JRE(Java 런타임 환경)를 사용하여 인증서를 신뢰하는 방법을 보여 줍니다. 인증서를 신뢰할 수 없는 경우 Fiddler를 통한 HTTPS 요청이 보안 경고와 함께 실패할 수 있습니다.

  1. Fiddler의 인증서를 내보냅니다.

  2. JRE의 keytool(일반적으로 jre/bin)을 찾습니다.

  3. JRE의 cacert(일반적으로 jre/lib/security)를 찾습니다.

  4. Bash 창을 열고 다음 명령을 사용하여 인증서를 가져옵니다.

    sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler
    
  5. 암호를 입력합니다.

  6. 인증서를 신뢰합니다.

Wireshark

Wireshark 는 애플리케이션 코드를 변경하지 않고도 네트워크 트래픽을 캡처할 수 있는 네트워크 프로토콜 분석기입니다. Wireshark는 매우 구성 가능하며, 광범위하고 낮은 수준의 특정 네트워크 트래픽을 캡처할 수 있습니다. 이 기능은 원격 호스트에서 연결을 닫거나 작업 중에 연결이 닫히는 경우와 같은 문제 해결 시나리오에 유용합니다. Wireshark GUI는 TCP 재전송, RST 등과 같은 고유한 캡처 사례를 식별하는 색 구성표를 사용하여 캡처를 표시합니다. 캡처 시 또는 분석 중에 캡처를 필터링할 수도 있습니다.

캡처 필터 구성

캡처 필터는 분석을 위해 캡처되는 네트워크 호출 수를 줄입니다. 캡처 필터가 없으면 Wireshark는 네트워크 인터페이스를 통과하는 모든 트래픽을 캡처합니다. 이 동작은 대부분의 데이터가 조사에 잡음이 될 수 있는 대량의 데이터를 생성할 수 있습니다. 캡처 필터를 사용하면 캡처되는 네트워크 트래픽의 범위를 선제적으로 지정하여 조사 대상을 지정할 수 있습니다. 자세한 내용은 Wireshark 설명서의 Capturing Live Network Data(라이브 네트워크 데이터 캡처)를 참조하세요.

다음 예에서는 캡처 필터를 추가하여 특정 호스트에서 보내거나 받는 네트워크 트래픽을 캡처합니다.

Wireshark에서 캡처 필터 캡처로 이동하고 값host <host-IP-or-hostname>이 포함된 새 필터를 추가합니다.> 이 필터는 해당 호스트를 오가는 트래픽만 캡처합니다. 애플리케이션이 여러 호스트와 통신하는 경우 여러 캡처 필터를 추가하거나 'OR' 연산자를 사용하여 호스트 IP/호스트 이름을 추가하여 더 느슨한 캡처 필터링을 제공할 수 있습니다.

디스크로 캡처

예기치 않은 네트워킹 예외를 재현하고 이로 이어지는 트래픽을 보려면 애플리케이션을 오랫동안 실행해야 할 수 있습니다. 또한 메모리의 모든 캡처를 기본 수 없습니다. 다행히 Wireshark는 캡처를 디스크에 기록하여 사후 처리에 사용할 수 있습니다. 이 방법은 문제를 재현하는 동안 메모리 부족의 위험을 방지합니다. 자세한 내용은 Wireshark 설명서의 파일 입력, 출력 및 인쇄를 참조하세요.

다음 예제에서는 여러 파일이 있는 디스크에 캡처를 유지하도록 Wireshark를 설정합니다. 여기서 파일은 100k 캡처 또는 50MB 크기로 분할됩니다.

Wireshark에서 캡처 > 옵션으로 이동하고 출력 탭을 찾은 다음 사용할 파일 이름을 입력합니다. 이 구성으로 인해 Wireshark는 캡처를 단일 파일에 유지합니다.

여러 파일에 대한 캡처를 사용하도록 설정하려면 새 파일 만들기를 자동으로 선택한 다음, 100000 패킷 이후와 50MB 이후를 선택합니다. 이 구성에는 조건자 중 하나가 일치하면 Wireshark가 새 파일을 만듭니다. 각 새 파일은 입력한 파일 이름과 동일한 기본 이름을 사용하고 고유 식별자를 추가합니다.

Wireshark에서 만들 수 있는 파일 수를 제한하려면 X 파일과 함께 링 버퍼 사용을 선택합니다. 이 옵션은 Wireshark를 지정된 수의 파일만 사용하여 로깅하도록 제한합니다. 해당 파일 수에 도달하면 Wireshark는 가장 오래된 파일부터 시작하여 파일을 덮어쓰기 시작합니다.

필터 캡처

예를 들어 애플리케이션이 다양한 프로토콜을 사용하여 여러 호스트와 통신하는 경우와 같이 Wireshark에서 캡처하는 트래픽의 범위를 엄격하게 지정할 수 없는 경우가 있습니다. 이 시나리오에서는 일반적으로 이전에 설명한 영구 캡처를 사용하면 네트워크 캡처 후 분석을 더 쉽게 실행할 수 있습니다. Wireshark는 캡처를 분석하기 위한 필터와 유사한 구문을 지원합니다. 자세한 내용은 Wireshark 설명서에서 캡처된 패킷 작업을 참조하세요.

다음 예제에서는 지속형 캡처 파일을 로드하고 필터를 켭 ip.src_host==<IP>니다.

Wireshark에서 파일 > 열기로 이동하여 이전에 사용한 파일 위치에서 지속형 캡처를 로드합니다. 메뉴 모음 아래에 파일이 로드되면 필터 입력이 나타납니다. 필터 입력에서 ip.src_host==<IP>를 입력합니다. 이 필터는 IP <IP>를 사용하여 원본이 호스트에서 온 캡처만 표시되도록 캡처 보기를 제한합니다.

다음 단계

이 문서에서는 Java용 Azure SDK를 사용할 때 네트워킹 문제를 진단하기 위해 다양한 도구를 사용하는 방법을 설명했습니다. 이제 높은 수준의 사용 시나리오에 익숙해졌으므로 SDK 자체를 탐색할 수 있습니다. 사용 가능한 API에 대한 자세한 내용은 Java용 Azure SDK 라이브러리를 참조 하세요.