다음을 통해 공유


계측 및 추적 소개

업데이트: 2007년 11월

계측이라는 용어는 제품 성능의 수준을 모니터링하거나 측정하고 오류를 진단하는 능력을 나타냅니다. 프로그래밍에서 계측이란 다음과 같은 기능을 통합한 응용 프로그램의 능력을 의미합니다.

  • 코드 추적 – 런타임에 응용 프로그램의 실행에 대한 정보 메시지를 받습니다.

  • 디버깅 – 개발 중인 응용 프로그램에서 프로그래밍 오류를 추적하고 수정합니다. 자세한 내용은 디버깅을 참조하십시오.

  • 성능 카운터 – 응용 프로그램의 성능을 추적할 수 있는 구성 요소입니다. 자세한 내용은 성능 임계값 모니터링 개요를 참조하십시오.

  • 이벤트 로그 – 응용 프로그램 실행에서 주요 이벤트를 받고 추적할 수 있는 구성 요소입니다. 자세한 내용은 EventLog 클래스를 참조하십시오.

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!");
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.Debug.WriteLine("Hello World!");

위의 예제에서는 모두 응용 프로그램이 디버거에서 실행될 때 출력 창에 "Hello World!"를 표시합니다.

이러한 기능을 통해 테스트 환경에서의 동작에 따라 응용 프로그램을 디버깅하고 성능을 최적화할 수 있습니다. 모든 디버깅 출력을 받을 수 있도록 Debug 조건부 특성을 설정한 상태로 디버그 빌드에서 응용 프로그램을 디버깅할 수 있습니다. 응용 프로그램을 릴리스할 준비가 된 경우, Debug 조건부 특성을 설정하지 않고 릴리스 빌드를 컴파일하면 컴파일러가 디버깅 코드를 최종 실행 파일에 포함시키지 않도록 할 수 있습니다. 자세한 내용은 방법: 추적 및 디버그를 사용한 조건부 컴파일을 참조하십시오. 응용 프로그램의 여러 가지 빌드 구성에 대한 자세한 내용은 Visual Studio에서 빌드를 참조하십시오.

또한 Trace 클래스의 메서드를 사용하여 설치된 응용 프로그램에서 코드 실행을 추적할 수 있습니다. 추적 스위치를 코드에 포함하면 추적 발생 여부와 그 범위를 제어할 수 있습니다. 이를 통해 프로덕션 환경에서 응용 프로그램의 상태를 모니터링할 수 있습니다. Trace 클래스에 포함되어 있는 메서드의 이러한 특성은 여러 컴퓨터에서 실행되고 있는 다수의 구성 요소를 사용하는 업무용 응용 프로그램에서 특히 중요합니다. 배포 후에 구성 파일을 통해 스위치의 사용 방법을 제어할 수 있습니다. 자세한 내용은 방법: 추적 스위치 구성을 참조하십시오.

추적 기능을 사용할 응용 프로그램을 개발할 때는 일반적으로 응용 프로그램 코드에 추적 메시지와 디버깅 메시지를 모두 포함합니다. 응용 프로그램을 배포할 준비가 되면 Debug 조건부 특성을 설정하지 않고 릴리스 빌드를 컴파일할 수 있습니다. 그러나 컴파일러가 추적 코드를 실행 파일에 포함하도록 Trace 조건부 특성을 설정할 수 있습니다. 자세한 내용은 방법: 추적 및 디버그를 사용한 조건부 컴파일을 참조하십시오.

코드 추적 단계

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

  1. 계측 — 추적 코드를 응용 프로그램에 추가합니다.

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

  3. 분석 — 추적 정보를 확인하여 응용 프로그램의 문제점을 식별하고 이해합니다.

개발하는 동안 모든 디버그 및 추적 출력 메서드는 기본적으로 Visual Studio 출력 창에 정보를 씁니다. 배포된 응용 프로그램에서는 지정한 대상에 메서드가 정보를 씁니다. 추적 또는 디버깅의 출력 대상 지정에 대한 자세한 내용은 추적 수신기를 참조하십시오.

계측 및 분산 응용 프로그램 추적

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

그러나 응용 프로그램을 계측하여, 즉 추적 문을 코드의 전략적 위치에 배치하여 분산 응용 프로그램이 특정 이벤트, 특히 잘못 진행되고 있는 내용을 시스템 관리자에게 설명할 수 있도록 함으로써 이러한 약점을 보완할 수 있습니다. 그러면 응답 시간이 지나치게 느려지는 등 예기치 않은 상황이 런타임에 발생할 경우 가능한 원인을 알아낼 수 있습니다.

추적 문을 사용하면 원래의 소스 코드를 조사하고 수정하고 다시 컴파일한 다음 디버깅 환경에서 런타임 오류를 해결해야 하는 어려운 작업을 피할 수 있습니다. 응용 프로그램을 계측하여 오류를 표시할 수 있을 뿐 아니라 성능을 모니터링할 수도 있습니다.

추적 문의 전략적 배치

런타임 동안 사용할 추적 문을 배치할 때는 특별히 주의해야 합니다. 배포된 응용 프로그램에서 필요할 것으로 예상되는 추적 정보를 고려하여 가능한 모든 추적 시나리오가 적절하게 다루어지도록 해야 합니다. 그러나 추적 기능을 사용하는 응용 프로그램은 너무 다양하기 때문에 추적을 전략적으로 배치하기 위한 일반 지침은 없습니다. 추적 문 배치에 대한 자세한 내용은 방법: 응용 프로그램 코드에 추적 문 추가를 참조하십시오.

추적 출력

추적 출력은 수신기라는 개체에서 수집합니다. 수신기는 추적 출력을 받아서 창, 로그 또는 텍스트 파일과 같은 출력 장치에 쓰는 개체입니다. 새로 만든 추적 수신기는 일반적으로 Trace.Listeners 컬렉션에 추가되므로 수신기가 모든 추적 출력을 받을 수 있습니다.

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

추적 정보를 기록하는 여섯 가지 Debug Member 및 Trace 메서드가 다음 표에 나와 있습니다.

메서드

출력

Assert

지정한 텍스트, 지정한 텍스트가 없는 경우에는 호출 스택 Assert 문의 인수로 지정한 조건이 false인 경우에만 출력이 기록됩니다.

Fail

지정한 텍스트, 지정한 텍스트가 없는 경우에는 호출 스택

Write

지정한 텍스트

WriteIf

지정한 텍스트(WriteIf 문의 인수로 지정된 조건이 충족되는 경우)

WriteLine

지정한 텍스트와 캐리지 리턴

WriteLineIf

지정한 텍스트와 캐리지 리턴(WriteLineIf 문의 인수로 지정된 조건이 충족되는 경우)

Listeners 컬렉션의 모든 수신기는 위 표에 설명된 메시지를 받지만 메시지를 받는 수신기의 종류에 따라 다른 동작이 수행될 수 있습니다. 예를 들어, DefaultTraceListenerFail 또는 Assert 오류 알림을 받을 경우 어설션 대화 상자를 표시하지만 TextWriterTraceListener는 단지 출력을 해당 스트림에 씁니다.

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

Visual Basic 정보:

Visual Basic 2005에서는 이전 버전의 Visual Basic에서 사용되었던 Debug.Print 메서드 대신 Debug.Write, Debug.WriteIf, Debug.WriteLineDebug.WriteLineIf 메서드가 사용됩니다.

Write 메서드와 WriteLine 메서드는 항상 지정된 텍스트를 씁니다. Assert, WriteIfWriteLineIf에는 지정된 텍스트를 쓸지 여부를 제어하는 Boolean 인수를 사용해야 합니다. 이들 메서드는 식이 true(WriteIfWriteLineIf) 또는 false(Assert)인 경우에만 지정된 텍스트를 씁니다. Fail 메서드는 항상 지정된 텍스트를 씁니다. 자세한 내용은 방법: 응용 프로그램 코드에 추적 문 추가 및 .NET Framework 참조를 참조하십시오.

보안 관련 사항

ASP.NET 응용 프로그램을 배포하기 전에 추적과 디버깅의 사용을 해제하지 않으면 응용 프로그램 자체의 정보가 노출되어 악의적인 프로그램에 의해 악용될 수도 있습니다. 자세한 내용은 방법: 추적 및 디버그를 사용한 조건부 컴파일, Visual Studio에서 빌드방법: 추적 스위치 구성을 참조하십시오. 디버깅은 IIS(인터넷 정보 서비스)를 통해 구성할 수도 있습니다.

참고 항목

작업

방법: 응용 프로그램 코드에 추적 문 추가

방법: 추적 스위치 구성

개념

추적 스위치

추적 수신기

기타 리소스

응용 프로그램 추적 및 조율