다음을 통해 공유


추적 및 계측 애플리케이션

비고

이 문서는 .NET Framework에만 적용됩니다. .NET 6 이상 버전을 포함하여 .NET의 최신 구현에는 적용되지 않습니다.

추적은 실행 중인 애플리케이션의 실행을 모니터링하는 방법입니다. 개발 시 .NET Framework 애플리케이션에 추적 및 디버깅 계측을 추가할 수 있으며, 애플리케이션을 개발하는 동안과 배포한 후에 해당 계측을 모두 사용할 수 있습니다. 및 System.Diagnostics.TraceSystem.Diagnostics.Debug 클래스를 System.Diagnostics.TraceSource사용하여 나중에 분석할 수 있도록 로그, 텍스트 파일 또는 기타 디바이스에서 오류 및 애플리케이션 실행에 대한 정보를 기록할 수 있습니다.

계측이라는 용어는 제품의 성능 수준을 모니터링하거나 측정하고 오류를 진단하는 기능을 의미합니다. 프로그래밍에서 이는 애플리케이션이 다음을 통합하는 기능을 의미합니다.

  • 코드 추적 - 런타임에 애플리케이션 실행에 대한 정보 메시지 수신

  • 디버깅 - 개발 중인 애플리케이션에서 프로그래밍 오류를 추적하고 수정합니다. 자세한 내용은 디버깅을 참조하세요.

  • 성능 카운터 - 애플리케이션의 성능을 추적할 수 있는 구성 요소입니다. 자세한 내용은 성능 카운터를 참조하세요.

  • 이벤트 로그 - 애플리케이션 실행 시 주요 이벤트를 수신하고 추적할 수 있는 구성 요소입니다. 자세한 내용은 EventLog 클래스를 참조하세요.

코드의 전략적 위치에 추적 문을 배치하여 애플리케이션 계측은 분산 애플리케이션에 특히 유용합니다. 추적 문을 사용하면 문제가 발생할 때 정보를 표시할 뿐만 아니라 애플리케이션의 성능을 모니터링하기 위해 애플리케이션을 계측할 수 있습니다.

클래스는 TraceSource 향상된 추적 기능을 제공하며 이전 TraceDebug 추적 클래스의 정적 메서드 대신 사용할 수 있습니다. 친숙한 Trace 클래스와 Debug 클래스는 여전히 널리 사용되지만 TraceSource 클래스는 다음과 같은 TraceEventTraceData새 추적 명령에 권장됩니다.

Trace 클래스와 Debug 클래스는 동일합니다. 그러나 Trace 클래스의 프로시저와 함수는 기본적으로 릴리스 빌드로 컴파일되지만, Debug 클래스의 프로시저와 함수는 그렇지 않습니다.

TraceDebug 클래스는 개발 중 또는 배포 후 애플리케이션 성능을 모니터링하고 검사하는 수단을 제공합니다. 예를 들어 클래스를 Trace 사용하여 배포된 애플리케이션에서 발생하는 특정 유형의 작업(예: 새 데이터베이스 연결 만들기)을 추적할 수 있으므로 애플리케이션의 효율성을 모니터링할 수 있습니다.

코드 추적 및 디버깅

개발하는 동안 클래스의 Debug 출력 메서드를 사용하여 Visual Studio IDE(통합 개발 환경)의 출력 창에 메시지를 표시할 수 있습니다. 다음은 그 예입니다.

Trace.WriteLine("Hello World!")
Debug.WriteLine("Hello World!")
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.Debug.WriteLine("Hello World!");

이러한 각 예제는 애플리케이션이 디버거에서 실행될 때 출력 창에 "Hello World!"를 표시합니다.

이렇게 하면 애플리케이션을 디버그하고 테스트 환경에서의 동작에 따라 성능을 최적화할 수 있습니다. 모든 디버깅 출력을 받을 수 있도록 조건부 특성이 켜져 있는 디버그 빌드 Debug 에서 애플리케이션을 디버그할 수 있습니다. 애플리케이션을 릴리스할 준비가 되면, 컴파일러가 최종 실행 파일에 디버깅 코드를 포함하지 않도록 조건부 특성을 켜 Debug 지 않고 릴리스 빌드를 컴파일할 수 있습니다. 자세한 내용은 방법: 추적 및 디버그를 사용하여 조건부 컴파일을 참조하세요. 애플리케이션에 대한 다양한 빌드 구성에 대한 자세한 내용은 컴파일 및 빌드를 참조하세요.

설치된 애플리케이션에서 클래스의 메서드를 사용하여 코드 실행을 추적할 수도 있습니다. 코드에 추적 스위치 를 배치하여 추적의 발생 여부와 범위를 제어할 수 있습니다. 이렇게 하면 프로덕션 환경에서 애플리케이션의 상태를 모니터링할 수 있습니다. 이는 여러 컴퓨터에서 실행되는 여러 구성 요소를 사용하는 비즈니스 애플리케이션에서 특히 중요합니다. 구성 파일을 통해 배포 후 스위치를 사용하는 방법을 제어할 수 있습니다. 자세한 내용은 방법: 추적 스위치 만들기, 초기화 및 구성을 참조하세요.

추적을 사용하려는 애플리케이션을 개발하는 경우 일반적으로 애플리케이션 코드에 추적 및 디버깅 메시지를 모두 포함합니다. 애플리케이션을 배포할 준비가 되면 디버그 조건부 특성을 켜지 않고 릴리스 빌드를 컴파일할 수 있습니다. 그러나 컴파일러가 실행 파일에 추적 코드를 포함할 수 있도록 추적 조건부 특성을 켤 수 있습니다. 자세한 내용은 방법: 추적 및 디버그를 사용하여 조건부 컴파일을 참조하세요.

코드 추적 단계

코드 추적의 세 단계는 다음과 같습니다.

  1. 계측 - 애플리케이션에 추적 코드를 삽입합니다.

  2. 추적 - 추적 코드는 지정된 대상에 정보를 씁니다.

  3. 분석 - 추적 정보를 평가하여 애플리케이션의 문제를 식별하고 이해합니다.

개발하는 동안 모든 디버그 및 추적 출력 메서드는 기본적으로 Visual Studio의 출력 창에 정보를 씁니다. 배포된 애플리케이션에서 메서드는 지정한 대상에 추적 정보를 씁니다. 추적 또는 디버깅을 위한 출력 대상을 지정하는 방법에 대한 자세한 내용은 추적 수신기를 참조하세요.

다음은 일반적으로 추적을 사용하여 배포된 애플리케이션에서 잠재적인 문제를 분석하고 수정하는 데 관련된 주요 단계에 대한 전반적인 보기입니다. 이러한 단계를 수행하는 방법에 대한 자세한 내용은 적절한 링크를 참조하세요.

애플리케이션에서 추적을 사용하려면
  1. 애플리케이션을 배포한 후 온사이트에서 수신할 추적 출력을 고려합니다.

  2. 스위치 집합을 만듭니다. 자세한 내용은 방법: 추적 스위치 구성을 참조하세요.

  3. 애플리케이션 코드에 추적 문을 추가합니다.

  4. 추적 출력을 표시할 위치를 결정하고 적절한 수신기를 추가합니다. 자세한 내용은 추적 수신기 만들기 및 초기화를 참조하세요.

  5. 애플리케이션 및 애플리케이션에 포함된 추적 코드를 테스트하고 디버그합니다.

  6. 다음 절차 중 하나를 사용하여 애플리케이션을 실행 코드로 컴파일합니다.

    • 솔루션 탐색기에서 속성 페이지 대화 상자의 디버그 페이지와 함께 빌드 메뉴를 사용합니다. Visual Studio에서 컴파일할 때 사용합니다.

      -또는-

    • 컴파일의 명령줄 메서드에 TraceDebug 컴파일러 지시문을 사용합니다. 자세한 내용은 추적 및 디버그를 사용하여 조건부 컴파일을 참조하세요. 명령줄에서 컴파일할 때 사용합니다.

  7. 런타임 중에 문제가 발생하면 적절한 추적 스위치를 켭니다. 자세한 내용은 추적 스위치 구성을 참조하세요.

    추적 코드는 지정된 대상(예: 화면, 텍스트 파일 또는 이벤트 로그)에 추적 메시지를 씁니다. 컬렉션에 포함된 수신기 유형에 따라 대상이 결정됩니다.

  8. 추적 메시지를 분석하여 애플리케이션의 문제를 식별하고 이해합니다.

추적 계측 및 분산 애플리케이션

분산 애플리케이션을 만들 때 애플리케이션을 사용하는 방식으로 테스트하기가 어려울 수 있습니다. 가능한 모든 운영 체제 또는 웹 브라우저 조합(모든 지역화된 언어 옵션 포함)을 테스트하거나 동시에 애플리케이션에 액세스할 사용자 수를 시뮬레이트할 수 있는 기능이 있는 개발 팀은 거의 없습니다. 이러한 상황에서는 분산 애플리케이션이 대용량, 다양한 설정 및 고유한 최종 사용자 동작에 어떻게 반응하는지 테스트할 수 없습니다. 또한 분산 애플리케이션의 많은 부분에는 직접 상호 작용하거나 해당 부분의 활동을 볼 수 있는 사용자 인터페이스가 없습니다.

그러나 시스템 관리자에게 특히 문제가 발생하는 이벤트를 포함하여, 관심 있는 특정 이벤트를 분산 애플리케이션이 설명할 수 있도록 코드의 전략적 위치에 추적 문장을 배치하여 애플리케이션을 계측함으로써 이를 보완할 수 있습니다. 그런 다음 런타임에 예기치 않은 일이 발생하는 경우(예: 응답 시간이 지나치게 느림) 가능한 원인을 확인할 수 있습니다.

추적 문을 사용하면 원래 소스 코드를 검사하고, 수정하고, 다시 컴파일하고, 디버깅 환경 내에서 런타임 오류를 생성하는 어려운 작업을 방지할 수 있습니다. 애플리케이션을 계측하여 오류를 표시할 뿐만 아니라 성능을 모니터링할 수도 있습니다.

추적 문의 전략적 배치

런타임에 활용할 추적 문을 배치할 때는 특별히 주의해야 합니다. 배포된 애플리케이션에 필요할 가능성이 있는 추적 정보를 고려해야 하므로 모든 추적 시나리오가 적절하게 다루어질 수 있습니다. 그러나 추적을 사용하는 애플리케이션은 매우 다양하기 때문에 추적의 전략적 배치에 대한 일반적인 지침은 없습니다. 추적 문을 배치하는 방법에 대한 자세한 내용은 방법: 애플리케이션 코드에 추적 문 추가를 참조하세요.

추적의 출력

추적 출력은 수신기라는 개체에 의해 수집 됩니다. 리스너는 트레이스 출력을 수신하고 출력 장치(일반적으로 창, 로그 또는 텍스트 파일)에 기록하는 객체입니다. 추적 수신기가 만들어지면 일반적으로 컬렉션에 Trace.Listeners 추가되므로 수신기가 모든 추적 출력을 수신할 수 있습니다.

추적 정보는 항상 최소한 기본 Trace 출력 대상인 DefaultTraceListener에 기록됩니다. 어떤 이유로 컬렉션에 다른 수신기 DefaultTraceListenerListeners 추가하지 않고 삭제한 경우 추적 메시지가 수신되지 않습니다. 자세한 내용은 추적 수신기를 참조하세요.

추적 정보를 작성하는 6개의 Debug 멤버 및 Trace 메서드가 다음 표에 나와 있습니다.

메서드 출력
Assert 지정된 텍스트입니다. 또는 지정되지 않은 경우 호출 스택입니다. 출력은 문에서 Assert 인수로 지정된 조건이 false인 경우에만 작성됩니다.
Fail 지정된 텍스트입니다. 또는 지정되지 않은 경우 호출 스택입니다.
Write 지정한 텍스트입니다.
WriteIf 문에서 WriteIf 인수로 지정된 조건이 충족되는 경우 지정된 텍스트입니다.
WriteLine 지정한 텍스트 및 캐리지 리턴입니다.
WriteLineIf 조건이 WriteLineIf 문에서 인수로 지정된 경우, 지정된 텍스트와 캐리지 리턴이 추가됩니다.

컬렉션의 Listeners 모든 수신기는 위 표에 설명된 메시지를 수신하지만, 수행된 작업은 메시지를 수신하는 수신기의 종류에 따라 달라질 수 있습니다. 예를 들어 DefaultTraceListenerFail 알림을 받거나 실패한 Assert 알림을 받으면 어설션 대화 상자를 표시하지만, TextWriterTraceListener는 단순히 출력을 스트림에 씁니다.

사용자 고유의 수신기를 구현하여 사용자 지정 결과를 생성할 수 있습니다. 예를 들어 사용자 지정 추적 수신기는 메시지 상자에 메시지를 표시하거나 데이터베이스에 연결하여 테이블에 메시지를 추가할 수 있습니다. 모든 사용자 지정 수신기는 위에서 언급한 6가지 메서드를 지원해야 합니다. 개발자 정의 수신기를 만드는 방법에 대한 자세한 내용은 .NET Framework 참조를 참조 TraceListener 하세요.

WriteWriteLine 메서드는 항상 지정한 텍스트를 씁니다. Assert, WriteIf, 및 WriteLineIf는 지정된 텍스트를 쓸지 말지를 제어하는 부울 인수를 필요로 하며, 식이 true (WriteIfWriteLineIf의 경우) 또는 false (Assert의 경우)일 때만 해당 텍스트를 작성합니다. 메서드는 Fail 항상 지정된 텍스트를 씁니다. 자세한 내용은 애플리케이션 코드에 추적 문을 추가하는 방법 및 .NET Framework 참조를 참조하세요.

보안 문제

ASP.NET 애플리케이션을 배포하기 전에 추적 및 디버깅을 사용하지 않도록 설정하지 않으면 애플리케이션에서 악성 프로그램에서 악용될 수 있는 자체에 대한 정보를 표시할 수 있습니다. 자세한 내용은 방법: 추적 및 디버그를 사용하여 조건부 컴파일, 컴파일 및 빌드방법: 추적 스위치 만들기, 초기화 및 구성을 참조하세요. 디버깅은 IIS(인터넷 정보 서비스)를 통해 구성할 수도 있습니다.

참고하십시오