다음을 통해 공유


Glimpse를 사용하여 ASP.NET MVC 앱 프로파일링 및 디버그

작성자: Rick Anderson

엿보기는 ASP.NET 앱에 대한 자세한 성능, 디버깅 및 진단 정보를 제공하는 오픈 소스 NuGet 패키지의 번성하고 성장하는 제품군입니다. 설치하는 것은 간단하며, 가볍고, 초고속이며, 모든 페이지의 맨 아래에 주요 성능 메트릭을 표시합니다. 서버에서 무슨 일이 일어나고 있는지 확인해야 할 때 앱으로 드릴다운할 수 있습니다. 엿보기는 Azure 테스트 환경을 포함하여 개발 주기 전반에 걸쳐 사용하는 것이 좋습니다. FiddlerF-12 개발 도구는 클라이언트 쪽 보기를 제공하지만 서버에서 자세한 보기를 제공합니다. 이 자습서에서는 엿보기 ASP.NET MVC 및 EF 패키지를 사용하는 데 중점을 두지만 다른 많은 패키지를 사용할 수 있습니다. 가능한 경우 유지 관리하는 데 도움이 되는 적절한 엿보기 문서에 연결합니다. 엿보기는 오픈 소스 프로젝트입니다, 당신도 소스 코드와 문서에 기여할 수 있습니다.

엿볼 설치

NuGet 패키지 관리자 콘솔 또는 NuGet 패키지 관리 콘솔에서 엿볼을 설치할 수 있습니다. 이 데모에서는 Mvc5 및 EF6 패키지를 설치합니다.

NuGet Dlg에서 엿보기 설치

Glimpse.EF 검색

NuGet 설치 dlg의 Glimpse.EF

설치된 패키지를 선택하면 종속 모듈 엿보기가 설치된 것을 볼 수 있습니다.

DLg에서 설치된 엿보기 패키지

다음 명령은 패키지 관리자 콘솔에서 엿보기 MVC5 및 EF6 모듈을 설치합니다.

PM> Install-Package Glimpse.MVC5
PM> Install-Package Glimpse.EF6

localhost에 대해 엿볼 수 있도록 설정

http://localhost:<포트 #>/glimpse.axd로 이동하고 엿보기 켜기 단추를 클릭합니다.

축 페이지 엿보기

즐겨찾기 모음이 표시되는 경우 엿보기 단추를 끌어서 놓고 책갈피로 추가할 수 있습니다.

IE 및 엿보기 책갈피

이제 앱을 탐색할 수 있으며 페이지 아래쪽에 HUD( 헤드업 디스플레이 )가 표시됩니다.

HUD가 있는 연락처 관리자 페이지

HUD 엿보기 페이지에서는 위에 표시된 타이밍 정보를 자세히 설명합니다. HUD가 표시하는 눈에 거슬리지 않는 성능 데이터는 테스트 주기에 도착하기 전에 문제를 즉시 알릴 수 있습니다. 오른쪽 아래 모서리에서 "g"를 클릭하면 엿보기 패널이 나타납니다.

패널 엿보기

위의 이미지에서 실행 탭이 선택되어 파이프라인의 작업 및 필터에 대한 타이밍 세부 정보를 보여 줍니다. 파이프라인의 6단계에서 중지 조사식 필터 타이머 가 시작되는 것을 볼 수 있습니다. 경량 타이머는 유용한 프로필/타이밍 데이터를 제공할 수 있지만 보기 권한 부여 및 렌더링에 소요된 모든 시간을 놓치게 됩니다. Azure에 대한 ASP.NET MVC 앱의 프로필 및 시간에서 내 타이머에 대해 읽을 수 있습니다.

타임라인 탭

다음 코드를 강사 컨트롤러로 변경하여 Tom Dykstra의 뛰어난 EF 6/MVC 5 자습서 를 수정했습니다.

public ActionResult Index(int? id, int? courseID, int ? eager)
{
    var viewModel = new InstructorIndexData();

    viewModel.Instructors = db.Instructors
        .Include(i => i.OfficeAssignment)
        .Include(i => i.Courses.Select(c => c.Department))
        .OrderBy(i => i.LastName);

    if (id != null)
    {
        ViewBag.InstructorID = id.Value;
        viewModel.Courses = viewModel.Instructors.Where(
            i => i.ID == id.Value).Single().Courses;
    }

    if (courseID != null)
    {
       ViewBag.CourseID = courseID.Value;
       // Eager loading
       if (eager != null && eager > 0)
       {
          ViewBag.eagerMsg = "Eager Loading";

          viewModel.Enrollments = viewModel.Courses.Where(
              x => x.CourseID == courseID).Single().Enrollments;

       }
       else { 
        // Explicit loading
          ViewBag.eagerMsg = "Explicit Loading";

        var selectedCourse = viewModel.Courses.Where(x => x.CourseID == courseID).Single();
        db.Entry(selectedCourse).Collection(x => x.Enrollments).Load();
        foreach (Enrollment enrollment in selectedCourse.Enrollments)
        {
            db.Entry(enrollment).Reference(x => x.Student).Load();
        }

        viewModel.Enrollments = selectedCourse.Enrollments;
       }
    }

    return View(viewModel);
}

위의 코드를 사용하면 쿼리 문자열(eager)을 전달하여 데이터의 즉시 로드 또는 명시적 로드를 제어할 수 있습니다. 아래 이미지에서 명시적 로드가 사용되고 타이밍 페이지에 작업 메서드에 로드된 각 등록이 Index 표시됩니다.

명시적 로드

다음 코드에서 eager가 지정되고 보기가 호출된 후 각 등록이 Index 페치됩니다.

eager가 지정됨

시간 세그먼트를 마우스로 가리키면 자세한 타이밍 정보를 가져올 수 있습니다.

상세 타이밍을 보려면 마우스로 가리킵니다.

모델 바인딩

모델 바인딩 탭은 양식 변수가 바인딩되는 방식과 일부 변수가 예상대로 바인딩되지 않는 이유를 이해하는 데 도움이 되는 풍부한 정보를 제공합니다. 아래 이미지는 해당 기능에 대한 도움말 페이지를 표시하기 위해 클릭할 수 있는 ? 아이콘을 보여줍니다.

모델 바인딩 보기 엿보기

경로

경로 엿보기 탭은 라우팅을 디버그하고 이해하는 데 도움이 될 수 있습니다. 아래 이미지에서 제품 경로가 선택됩니다(녹색으로 표시됨, 엿보기 규칙). 제품 이름이 선택됨 경로 제약 조건, 영역 및 데이터 토큰도 표시됩니다. 자세한 내용은 ASP.NET MVC 5의 경로 및 특성 라우팅 엿보기를 참조하세요.

Azure에서 엿보기 사용

엿보기 기본 보안 정책을 사용하면 로컬 호스트에서만 엿볼 데이터를 표시할 수 있습니다. 원격 서버(예: Azure의 웹앱)에서 이 데이터를 볼 수 있도록 이 보안 정책을 변경할 수 있습니다. Azure의 테스트 환경의 경우 강조 표시된 표시를 web.config 파일의 맨 아래에 추가하여 엿볼 수 있도록 설정합니다.

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
    <runtimePolicies>
      <ignoredTypes>
        <add type="Glimpse.AspNet.Policy.LocalPolicy, Glimpse.AspNet"/>
      </ignoredTypes>
    </runtimePolicies>
  </glimpse>
</configuration>

이 변경만으로 모든 사용자가 원격 사이트에서 데이터 엿보기를 볼 수 있습니다. 게시 프로필(예: Azure 테스트 프로필)을 사용할 때만 적용된 을 배포하도록 위의 태그를 게시 프로필에 추가하는 것이 좋습니다. 데이터 엿보기를 제한하기 위해 역할을 추가하고 이 역할의 canViewGlimpseData 사용자만 데이터 엿보기를 볼 수 있도록 허용합니다.

GlimpseSecurityPolicy.cs 파일에서 주석을 제거하고 IsInRole 호출을 에서 Administrator 역할로 canViewGlimpseData 변경합니다.

public class GlimpseSecurityPolicy : IRuntimePolicy
{
    public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
    {
        var httpContext = policyContext.GetHttpContext();
        if (!httpContext.User.IsInRole("canViewGlimpseData"))
        {
            return RuntimePolicy.Off;
        }

        return RuntimePolicy.On;
    }

    public RuntimeEvent ExecuteOn
    {
        get { return RuntimeEvent.EndRequest | RuntimeEvent.ExecuteResource; }
    }
}

경고

보안 - Glimpse에서 제공하는 풍부한 데이터는 앱의 보안을 노출할 수 있습니다. Microsoft는 프로덕션 앱에서 사용하기 위해 Glimpse에 대한 보안 감사를 수행하지 않았습니다.

역할을 추가하는 방법에 대한 자세한 내용은 Azure에 멤버 자격, OAuth 및 SQL Database 사용하여 보안 ASP.NET MVC 5 웹앱 배포 자습서를 참조하세요.

추가 리소스