본문 바로가기
[개발] 이야기

ASP.NET에서 Trace 추적 사용하여 쉽게 디버깅을 해보자

by 헤이나우
반응형

추적이란?

추적은 웹 응용 프로그램의 실행에 대한 진단 정보를 보여주는 기능입니다. ASP.NET은 페이지 추적과 응용 프로그램 추적을 제공합니다

■ 페이지 추적(Page-Level Tracing)

■ 응용 프로그램 추적(Application-Level Tracing)

페이지 추적과 응용 프로그램 추적의 차이점은 추적 범위가 다르다는 것입니다.

  

페이지 추적(Page-Level Tracin)

페이지 추적은 웹 응용 프로그램 내에 있는 여러 페이지 중 특정 페이지의 실행을 추적하는 기능입니다. 페이지 추적 기능은 다음과 같이@Page지시문에 Trace특성을 추가하고 이 특성을 True로 설정하면 간단히 활성화 시킬 수 있습니다.

  

또한 TraceMode는 추적 정보의 정렬 방법을 지정하는 특성입니다. 기본값은 sortByTime이며 이는 이벤트 시간 순으로 추적을 하는 것 입니다.

그리고 Trace의 Write()로 개발자가 임의로 지정한 추적 정보를 출력할 수 있습니다.

  

Trace에 대해서 자세히 알아 보겠습니다.

우선 Page지시문에 다음과 같은 항목을 추가 해 줍니다.

  

  

  

그리고 아무것도 입력하지 않은 상태에서 빌드후 실행을 해봅시다.~

  

그럼 위와 같은 Trace 항목들이 보이는 것을 확인 할 수 있습니다. 그냥 봐도 엄청 머리 아프게 생겼네요

하나하나 살펴보면서 무슨 뜻이 있는지 알아 보겠습니다.

  

요청 정보(Request Detalis)

  

요청 정보 섹션은 요청한 페이지의 일반적인 정보를 나타냅니다. 상태코드(Status Code)는 다음과 같으므로 참고하기 바랍니다.

상태코드 설명 상태코드 설명
200 OK 301 Meved Permanently
304 Not Modified 307 Temporary Redirect
400 Bad Request 401 Unuthorized
403 Forbidden 404 Not Found
408 Request Time-Out 500 Internal Server Error

제 것의 Trace 정보를 볼때 세션ID는 접속할 때의 ID이고 요청형식은 Get방식이고

요청 시간은 말그대로 요청한 시간이며, 상태코드는 200으로 OK 즉, 정상적이라는 뜻 입니다.

요청 인코딩과 응답 인코딩은 UTF-8로 같습니다.

  

추적 정보(Trace Information)

  

  

추적 정보 세션은 페이지가 처리되는 과정을 카테고리(Category, 범주)순 또는 시간순으로 나타냅니다. 'From First(s)'최초 메시지가 출력된 시점부터 현재까지 걸린 시간을 의미하며 From last는 이전 메시지가 출력된 시점부터 현재까지 걸린 시간을 의미합니다.

프로그래밍 과정에서 위와 같은 순서를 다 외울수 없으므로 Trace를 이용해 시간 정보및 순서를 확인할 수 있으며 이는 최적화 과정에서 어느 부분에서 시간이 많이 걸리는 지를 한눈에 알아 볼 수 있습니다.

  

  

컨트롤 트리(Control Tree)

  

  

컨트롤 트리 섹션은 페이지에 포함된 서버 컨트롤들의 계층정 구조를 보여줍니다.

  

세션상태(Session State)및 응용 프로그램 상태(Application State)

  

  

세션 상태 섹션은 Session 개체의 컬렉션 정보를 나타내며, 응용 프로그램 상태 섹션은 Application 개체의 컬렉션 정보를 나타냅니다. 지금은 세션상태와 응용 프로그램상태를 사용하지 않았으므로 추적 시에는 어떤 정보도 출력되지 않았습니다. 윈폼에 Session과 Application에 값을 넣어 보겠습니다.

  

우선 윈폼 코드 레벨로 들어 갑니다.

  

  

위와 같은 코드를 Page_Load에 삽입합니다.

  

빌드후 실행을 하여 다시한번 확인해 보니 키에 따른 값이 할당이 된 것을 확인 할 수 있습니다.

이는 Session과 application의 변수 값은 홈페이지가 켜져 있다면 어디서든지 사용할수 있는 변수 입니다. 약간의 차이점이 있습니다.

  

요청 쿠키 컬렉션(Request Cookes Collection)및 응답 쿠키 컬렉션(Response Cookies Collection)

  

  

요청 쿠키 컬렉션 섹션은 요청한 쿠키의 컬렉션 정보를 나타내며, 응답 쿠키 컬렉션 섹션은 응답한 쿠키의 컬렉션 정보를 나타냅니다. 쿠키 또한 사용하지 않았으며 한번 사용해 보도록 하겠습니다.

  

  

Page_Load에 다음과 같은 구문을 추가 합니다.

  

  


Page_Load에 사용한 쿠키값을 추적 한 것을 확인 할 수 있습니다.

하지만 쿠키는 사용자가 임의로 쿠키 값을 제거 한다면 사용하지 못하기 때문에 쓸때 중요한 자료를 쿠키를 이용하는 것은 많은 위험이 있을 수 있습니다.

  

Headers 컬렉션(Headers Collection)

  

headers컬렉션 섹션은 사용자가 페이지를 요청할 때 포함된 헤더 정보를 나타냅니다.

요청한 사용자의 쿠키값도 확인 할 수 있습니다.

  

From 컬렉션(From Collection)

  

From 컬렉션 섹션은 사용자가 요청한 From 의 게시 정보를 나타냅니다.

From 컬렉션을 확인해 보겠습니다.

  

  

위와 같이 버튼과 텍스트 박스를 추가하고 클릭 이벤트를 잡아 줍니다. 클릭 이벤트에는 간단하게 Response.Write("문자");를 입력해 주고 빌드후 실행한 뒤 버튼을 한번 클릭해 줍니다.

  

From 컬렉션에 다음과 같은 정보가 나온 것을 확인 할 수 있습니다. 사용자가 Button1과 TextBox1의 게시 정보를 요청한 정보를 확인 할 수 있습니다.

  

서버 변수(Server Variables)

  

서버 변수 섹션은 웹 폼으로 전달된 여러 서버 변수들을 나타냅니다. 보시면 여러 정보들을 확인 할 수 있습니다.

  

응용 프로그램 추적(Application-Level Tracing)

응용 프로그램 추적은 말 그대로 응용 프로그램의 실행을 추적하는 기능입니다. 응용 프로그램 추적 기능은 다음과 같이 Web.Config파일에 <Trace>요소를 추가하고 이 요소의 enabled특성을 True로 지정하면 활설화 할 수 있습니다.

  

  

  

이렇게 활성화하고 웹 응용 프로그램을 실행하는 순간, 웹 응용 프로그램에서는 일어나는 모든 사용자 요청은 추적 정보 로그로 서버에 저장됩니다. 그리고 이 정보를 확인 할 때는 http://웹 응용 프로그램 루트/Trace.axd 주소를 통해 확인 할 수 있는데 이때 사용되는 Trace.axd를 추적 뷰어라고 합니다.

  

  

추적 뷰어를 보면 웹 응용 프로그램에 요청된 모든 페이지의 추적 정보들이 '이 응용 프로그램에 대한 요청'을 통해서 볼 수 있습니다.

특성 설명
enabled 응용 프로그램 추적 활성화 여부를 지정합니다
LocalOnly 추적 뷰어(trace.axd)를 로컬 컴퓨터에서만 사용하게 할 것인지 아니면 모든 컴퓨터(최종 사용자 포함)에서 사용 가능하게 할 것인지의 여부를 지정합니다. True이면 로컬 컴퓨터에서만 추적 뷰어를 사용할 수 있습니다.
pageOutput 웹 응용 프로그램 내에 있는 모든 페이지의 페이지 추적 활성화 여부를 지정합니다. 이 특성을 true로 지정하면 명시적으로 @Page지시문의 trace특성을 false로 지정하지 않는 이상 모든 페이지의 페이지 추적이 자동적으로 활성화 됩니다.
traceMode 추적 정보 섹션의 정렬 방식을 지정합니다
requestLimit 서버에 추적 요청 수를 지정합니다. 바로 뒤에 오는 mostRecent특성이 false이고 이 속성에서 지정한 수만큼의 추적이 쌓이면 더 이상 응용 프로그램 추적이 일어나지 않습니다 기본값은 10입니다.
mostRecent 응용 프로그램 추적을 가장 최근의 추적으로 갱신할 것인지의 여부를 지정합니다. 이특성이 true이면 requestLimit특성에 지정된 추적 수를 유지하면서 가장 최근의 응용 프로그램 추적을 계속적으로 갱신합니다. 하지만 이 특성을 false이면 requestLimit에 지정한 수만큼의 추적 정보가 쌓인 후 더 이상 응용 프로그램을 추적하지 않습니다.

 

이런 추적을 통해서 개발시 여러가지 정보를 확인 및 디버그 할 수 정보들을 확인할수 있습니다.

ASP.NET은 눈에 보이지 않는 버그가 너무 무섭기 때문에 이러한 보이지 않는 정보들을 보려고 노력을 꾸준히 해야겠네요~

반응형

댓글