이전에 ASP를 사용하여 웹 응용 프로그램을 개발해 본 적이 있는 사람이라면 웹 응용 프로그램을 디버깅하는 것이 얼마나 번거로운지 알아야 합니다. ASP에서 디버깅은 고통스럽고 일반적으로 Response.Write() 메서드를 사용하여 변수 값을 인쇄하는 작업이 포함됩니다. 그렇다면 스스로에게 물어보세요. 애플리케이션을 배포하기 전에 디버깅 문을 제거하는 것을 몇 번이나 잊었나요?
.NET Framework 구성 요소의 출현으로 이러한 상황은 완전히 바뀌었습니다. .NET에서는 Visual Studio .NET의 디버거를 사용하거나 System.Web.TraceContext 네임스페이스의 Trace 클래스를 사용하여 전체 웹 응용 프로그램의 실행을 추적할 수 있습니다. 이 문서에서는 Trace 클래스를 사용하여 디버깅 작업을 지원하는 방법을 보여줍니다.
Trace 클래스 사용
ASP.NET에는 응용 프로그램 정보 흐름을 추적하는 데 도움이 되는 Trace 클래스가 포함되어 있습니다. 디버깅을 위해 Response 개체를 사용하는 대신 이제 Trace 클래스를 사용하여 디버깅 정보를 인쇄할 수 있습니다.
사용법을 보여주기 위해 먼저 ASP.NET 웹 응용 프로그램을 구축하고 기본 WebForm1에 Button과 ListBox 컨트롤을 배치합니다(그림 1 참조). ListBox 컨트롤을 세 가지 항목으로 채우고 AutoPostBack 속성을 True로 설정합니다.
그림 1. 기본 WebForm1 채우기 |
이 기사에서는 내 애플리케이션의 실행 흐름을 추적하고 싶습니다. 먼저 추적을 활성화하려면 Trace 속성을 포함해야 하며 해당 값은 그림 2와 같이 True(HTML 소스 모드 보기로 전환)로 설정됩니다.
그림 2. 활성화 추적 |
다음으로, 포스트백이 발생했는지 알 수 있도록 양식의 로드 이벤트에 Trace 문을 삽입합니다. PostBack 이벤트는 ASP.NET에서 가장 혼란스러운 기능 중 하나이며 ASP.NET을 처음 접하는 개발자에게는 실패로 이어지는 경우가 많습니다.
비공개 하위 페이지_Load(ByVal 발신자 As System.Object, _ ByVal e As System.EventArgs) _ MyBase.Load를 처리합니다. '페이지를 초기화하기 위한 사용자 코드를 여기에 배치하세요. Trace.Write("페이지 로드됨") IsPost가 아닌 경우뒤로 Trace.Write("포스트백에 없음") '포스트백이 발생할 때 일부 작업을 수행합니다Else Trace.Write("포스트백에서") '일부 작업 수행End If 서브 끝 |
또한 ListBox 항목을 선택할 때 포스트백이 발생하는지 알고 싶습니다.
비공개 하위 ListBox1_SelectedIndexChanged(ByVal 보낸 사람 As _ 시스템.객체, _ ByVal e As System.EventArgs) 핸들 _ ListBox1.SelectedIndexChanged Trace.Write("목록 상자 포스트백") 서브 끝 |
위의 ASP.NET 응용 프로그램이 실행되면 다음 출력이 표시됩니다(그림 3 참조).
그림 3. 추적 정보 표시 |
WebForm1이 처음으로 로드되면 "페이지 로드됨" 및 "포스트백에 없음"이라는 문자열을 볼 수 있습니다. WebForm1에서 버튼을 클릭하면 그림 4와 같은 기록을 볼 수 있습니다. 마찬가지로 ListBox를 클릭하면 "Listbox postback" 문자열도 표시됩니다.
그림 4. 추적 정보 확인 |
추적 페이지에는 다음 섹션이 포함되어 있습니다(그림 3에는 모든 정보가 표시되지는 않음).
섹션 | 설명 |
요청 세부 정보 | 대화 ID, 인코딩, 요청 시간 등 요청과 관련된 정보를 설명합니다. |
추적 정보 | 에는 현재 실행 중인 애플리케이션에 대한 세부 정보가 포함됩니다. 이 섹션에는 추적 정보가 표시됩니다. |
컨트롤 트리에는 | 페이지의 컨트롤에 대한 정보와 Viewstate 숨겨진 필드의 크기가 표시됩니다. |
쿠키 컬렉션에는 | 페이지에서 설정한 쿠키와 해당 값이 표시됩니다. |
헤더 컬렉션은 | content-length, user-agent와 같은 HTTP 헤더 정보를 표시합니다. |
Forms 컬렉션은 | 페이지의 컨트롤 이름과 해당 값을 표시합니다. |
서버 변수는 | 서버측 환경 변수를 표시합니다. |
당사의 추적 정보는 "추적 정보 섹션" 아래에 표시됩니다. 추적을 끄려면 페이지 지시문의 Trace 특성을 False로 설정하면 됩니다. 애플리케이션에서 추적 명령을 제거할 필요가 없습니다. 이제 디버깅을 끄는 것은 부울 값을 설정하는 것만큼 간단합니다.
추적을 켜거나 끄는 것은 단순히 페이지 지시문의 Trace 속성 값을 수정하는 것뿐입니다. Trace 클래스를 사용하여 프로그래밍 방식으로 추적을 해제할 수도 있습니다. Trace 클래스의 멤버는 다음과 같습니다.
속성 | 설명 |
IsEnabled는 | 현재 요청 추적을 활성화할지 여부를 나타냅니다. |
TraceMode는 | 추적 모드(sortByCategory 또는 sortByTime)를 설정합니다. |
방법 | 설명 |
Warn은 | 추적 정보를 빨간색으로 표시합니다. |
추적 정보를 작성합니다 | . |
프로그래밍 방식으로 추적을 끄려면 WebForm1의 로드 이벤트에서 다음 문을 사용합니다.
저희의 경우 추적정보가 눈에 띄게 표시되지 않아 다른 추적정보에 묻혀있습니다. Trace 클래스의 Warn() 메서드는 추적 정보를 빨간색으로 인쇄할 수 있습니다. 따라서 다음과 같이 코드를 작성하는 대신:
Trace.Write("페이지가 로드되었습니다") |
대신에:
그림 5에서는 Warn() 메서드에 대해 빨간색으로 표시된 디버깅 정보를 보여줍니다.
그림 5. Warn() 메서드를 사용하여 추적 정보를 빨간색으로 표시 |
추적 정보 정렬
애플리케이션에 여러 개의 추적 문을 넣으면 때때로 복잡해질 수 있습니다. 추적 정보를 여러 범주로 나눌 수 있으면 추적이 더 쉽습니다. Trace 클래스를 사용하면 범주에 따라 추적 정보를 분류하고 정렬할 수 있습니다.
다음 예에서는 추적 정보를 카테고리별로 그룹화하는 방법을 보여줍니다.
비공개 하위 페이지_Load(ByVal 발신자 As System.Object, _ ByVal e As System.EventArgs) _ MyBase.Load를 처리합니다. Trace.TraceMode = TraceMode.SortByCategory '페이지 초기화를 위한 사용자 코드를 여기에 배치하세요. Trace.Warn("Page_Load", "페이지 로드됨") IsPost가 아닌 경우뒤로 '일부 작업 수행 Trace.Warn("Page_Load", "포스트백에 없음") 또 다른 Trace.Warn("Page_Load", "포스트백에서") 종료 조건 서브 끝
비공개 하위 ListBox1_SelectedIndexChanged(ByVal 보낸 사람 _ System.Object로, ByVal e로 _ System.EventArgs) 핸들 _ ListBox1.SelectedIndexChanged Trace.Warn("ListBox", "목록 상자 포스트백") 서브 끝 |
이 예제를 실행하면 다음 디버깅 정보가 범주별로 그룹화되어 표시됩니다(그림 6 참조).
그림 6. 카테고리별 정렬 |
위의 코드를 분석해 보겠습니다.
Trace.TraceMode = TraceMode.SortByCategory |
TraceMode 속성은 추적에서 지원되는 모드를 설정합니다.
· SortByCategory: 유형에 따라 추적 정보를 정렬합니다.
· SortByTime: 실행 순서에 따라 추적 정보를 표시합니다.
카테고리별 정렬 모드를 선택했기 때문에 그림 7에서는 카테고리별로 정렬된 정보를 보여줍니다.
Trace.Warn("Page_Load", "페이지 로드됨") |
Warn 속성은 메시지를 빨간색으로 표시합니다. 이는 오버로드된 메서드입니다. 이 예에서는 두 개의 매개변수를 전달합니다. 첫 번째 입력 카테고리(Category), 두 번째 파라미터는 메시지(Message)를 가져오는 것입니다.
Trace 클래스를 사용하여 추적 모드를 설정하는 것 외에도 페이지 지시문을 사용하여 추적 모드를 지정할 수도 있습니다.
<%@ Page Language="vb" Trace="true" TraceMode="SortByCategory" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> |
응용 프로그램 추적
마지막 섹션에서는 페이지 내의 실행 정보 흐름을 추적하는 페이지 추적에 대해 설명합니다. ASP.NET은 응용 프로그램 수준 추적도 지원합니다. 응용 프로그램 수준 추적은 web.config 파일의 추적 섹션에서 설정됩니다.
애플리케이션 수준 추적을 활성화하려면 다음 값을 설정하십시오.
속성 | 값 | 설명 |
Enabled | True | 응용 프로그램 수준 추적을 활성화하거나 비활성화합니다. |
requestLimit | 10은 | 추적할 최대 요청 수를 설정합니다. |
pageOutput | False는 | 페이지 끝에 추적 정보를 표시합니다. |
TraceMode | sortByTime | 추적 정보 정렬 방법입니다. |
localOnly | True는 | 로컬이 아닌 컴퓨터에서 브라우저 추적을 볼 수 있는 기능을 설정합니다. |
애플리케이션이 로드되면 추적 정보가 페이지에 표시되지 않습니다. 추적 정보를 보려면 추적 뷰어(trace.axd)를 사용해야 합니다.
그림 7. 애플리케이션 수준 추적 |
그림 7은 애플리케이션의 마지막 6개 요청에 대한 추적 정보를 보여줍니다. 각 요청에 대한 세부정보를 보려면 각 행의 "세부정보 보기" 링크를 클릭하세요.
web.config 파일에서 추적이 true로 설정되고 페이지 지시문에서 false로 설정된 경우 추적이 비활성화됩니다.
요약
ASP.NET을 사용하면 웹 응용 프로그램 디버깅이 훨씬 쉬워집니다. 이제 추적을 사용하는 방법을 알았으니, 사용해 보고 생산성이 얼마나 향상되는지 확인해 보세요!